平均値が必要な2つのデータ列があります。セルの1つにゼロがあり、ゼロ以外の値をとっているとします。MSアクセス平均または合計
SELECT ID, IIF((A+B)=A, A, IIF((A+B)=B, B, (A+B)/2)) AS AVE_AB <br/>
FROM Data;
このコードを効率的にする方法はありますか?私はこれを行うための25の別の変数を持っており、できるだけコードをより効率的に短くしたいと考えています。
平均値が必要な2つのデータ列があります。セルの1つにゼロがあり、ゼロ以外の値をとっているとします。MSアクセス平均または合計
SELECT ID, IIF((A+B)=A, A, IIF((A+B)=B, B, (A+B)/2)) AS AVE_AB <br/>
FROM Data;
このコードを効率的にする方法はありますか?私はこれを行うための25の別の変数を持っており、できるだけコードをより効率的に短くしたいと考えています。
あなたが少しでも複雑な式のロジックを必要とするアクセスクエリを構築し、列の多くのペアのためにそのロジックを再利用する必要がされている場合は、カスタムVBA関数を作成するほうが良いでしょう(また、ユーザ定義関数と呼ばれます、またはUDF)を使用してこの作業を行います。あなたの例では、それは難しいことではありません。 SQLビューでクリーンなコード
Excel's = AverageIF Accessには組み込まれていない)、あなたは
SELECT ID, AverageIFNotZero(A,B) AS AVE_AB, AverageIFNotZero(C,D) AS AVE_CD FROM Data;
あなたはVBAで働いたことがない場合:あなたはこのようなクエリデザイナまたはSQLビューで簡単に再利用することができ、その後
Public Function AverageIFNotZero(columnA, columnB)
If columnA = 0 Then
AverageIFNotZero = columnB
Else
If columnB = 0 Then
AverageIFNotZero = columnA
Else
AverageIFNotZero = (columnA + columnB)/2
End If
End If
End Function
:ULDの線に沿ってVisual Basicで新しいモジュールを作成します前に、ここでのアクセス2013年にこの簡単な例を設定する手順は、次のとおりです。
Option Explicit
のような、1行または2行の自動生成コードが表示されます。表示されているコードの下をクリックし、上記のコードサンプルからPublic Function
で始まるものすべてを入力するか、 を貼り付けます。パーフェクト!ちょうど私が探していたもの。ありがとうございました! – PVic
私はそれを保存して関数を実行しようとすると、「未定義関数 'AverageIFNotZero' in Expresion」という警告が表示される理由は分かりますか?私は関数を保存する前に正常に実行されますが、いったん保存されると何らかの理由でこの警告が表示されます。 – PVic
VBAまたはクエリのいずれかで意図的に関数名のスペルを間違えない限り、そのエラーを再現できません。それらが一致する限り(大文字と小文字は区別されません)、データベースを保存してから再度開いても、うまく動作するようです。保存しても問題が解決しない場合は、使用しているAccessのバージョンと、UDFが使用しているモジュールとUDFが使用しているモジュールの名前について詳しく説明してください。 – Mat
SWITCH
機能が役立ちます。これはもう少し簡潔ですが、渡すロジックが非常に多いため、入力するのが簡単にならないことがあります。あなたは可能ですfind more info here
SELECT ID,
SWITCH(A+B=A,A,
A+B=B,B,
1=1,(A+B)/2) AS AVE_AB
FROM Data
どうやってですか?
SELECT ID, IIF ((A*B) = 0, abs(A-B), (A+B)/2)) as AVE_AB
FROM Data;
使用SGN:
SELECT ID, (A + B)/(Sgn(A) + Sgn(B)) AS AVE_AB
FROM Data;
Aおよび/またはBは、負で腹筋を適用することができる場合:
SELECT ID, (A + B)/(Abs(Sgn(A)) + Abs(Sgn(B))) AS AVE_AB
FROM Data;
それは短くはないが、AとBのみを必要とします他のフィールドのコピー貼り付け時に元のコードの5倍に2回置き換えられます。
どのバージョンのAccessですか? – BJones