#630 | テーブルに保存された式によって計算を行う方法 | クエリ、VBA | |
テーブルのあるフィールドに「式」(Excelのセルの計算式のようなイメージのもの)をあらかじめ登録しておき、その式によってレコードごとに異なる計算、あるいはフィールドの値に応じて計算を行う例です。 まず、例として下図のようなテーブルを用意します。 ここでは、「Data1」(数値型)、「Data2」(数値型)、「Data3」(テキスト型)の各フィールドに任意の値が保存されています。 そして、「計算式」フィールドには上記3つのフィールド名を使った式が文字列として保存されています。 ここでは、「Data1」〜「Data3」にはユーザーがいろいろな値を入力することを想定していますが、「計算式」はあらかじめ固定的なものでかつ隠しフィールド的なものを想定します。 次に、このテーブルを元に次のようなクエリを作成します。 ここでは、『計算結果: CalcVal([計算式],[Data1],[Data2],[Data3])』という演算フィールドを作っています。テーブルにある4つのフィールド名を引数として指定して、ユーザー定義関数(Functionプロシージャ)である『CalcVal』を呼び出しています。 そして、そのプロシージャが次のようなものです。 Public Function CalcVal(strFormula As String, lngData1 As Long, lngData2 As Long, strData3 As String) Dim strCalcFormula As String '計算式に引数の値を埋め込む strCalcFormula = strFormula strCalcFormula = Replace(strCalcFormula, "[Data1]", lngData1) strCalcFormula = Replace(strCalcFormula, "[Data2]", lngData2) strCalcFormula = Replace(strCalcFormula, "[Data3]", """" & strData3 & """") '計算を実行して返り値に設定 CalcVal = Eval(strCalcFormula) End Function ここでは、まず「計算式(strFormula引数)」の文字列内にある各フィールド名をこのプロシージャの引数値に置き換えています。 たとえば、計算式が「IIf([Data2] = 1, [Data1], [Data3])」で、3つの引数が「2」・「0」・「E」である場合、次のような置換が行われます。
そして、この置換後の値はまだ単なる文字列に過ぎませんので、それを「Eval」関数に掛けることで”式として評価”させ、その結果をプロシージャの返り値として返しています。 実行結果: |
|||
|
Copyright © T'sWare All rights reserved |