• ベストアンサー

ACCESS2003 Yes/No型の条件判断計算

ACCESS2003で質問です。 Yes/No型のテーブルが複数あり、そのチェックの場所によりクエリでの計算方法が変わります。 Aにチェックが入っていたらX-Z Bにチェックが入っていたらY+Z Yes/No型の項目で条件式が作成できますでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#22222
noname#22222
回答No.3

A=50 F=100として X=真 Y=偽 Z=偽のとき Z=F-A Zの値は50 この場合、 X=-1 Y=0 Z=0 です。 Z=100 - 50 Z=50 と計算させるには Z=100+50 ×-1 ということになります。 Z=F+A* X は、X=真 であれば Z=F+A*-1 ということです。 つまり、X=真であれば、目的の演算が行われます。 が、X=偽の場合を+演算するには Z=F+A* X は Z= 100+50×0 となり不具合が発生します。 先の回答と同じやり方であれば、 Z=F+A* (X + (Y + Z) ×-1) X=-1、Y=0、Z=0 を代入すると、 Z=100+50×(-1+(0+0)×-1)=100-50 X=0、Y=-1、Z=0 を代入すると、 Z=100+50×(0+(-1+0)×-1)=100+50 X=0、Y=0、Z=-1 を代入すると、 Z=100+50×(0+(0+-1)×-1)=100+50 と不具合は解消されます。

FORCE_009
質問者

お礼

なるほど論理積でしたでしょうか? それぞれのフラグで処理すれば解決しそうです。 さらにチャレンジしたいと思います。 ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#22222
noname#22222
回答No.2

計算式は、幾つかの書き方があります。 (1)IIF を利用する。 (2)真=-1、偽=0 を利用する。 次は、更新クエリを SQLビューで表示しています。 UPDATE テーブル1 SET Z = A+B*(D+E*-1); これでも、次のようにZは更新されます。 ID      A      B      Z      D      E 1       1      2      -1     Yes     No 2       1      2       3     No     Yes *IIF関数より、随分とスッキリ書けます。 チクッと上級編です!

FORCE_009
質問者

お礼

>チクッと上級編です! ありがとうございます。 Accessの関数一覧の解説書がない分 IIFで条件設定するのかと思いました。 昨日、ヒントをいただき試してみましたが・・・ 色々と関数定義のエラーが表示されました。 教えていただいた方法で試してみたいと思います。

FORCE_009
質問者

補足

s_husky 様 早速実行してみましたら、チェックマークが入っている項目すべて同じ結果の数値でした。 計算式を理解していないためなのですが 改めてもうすこしサンプルデーターを追加します。 X:F-A Y:F-B Z:F-Cの式が定義されていて、Xにチェックマークされていたら、Zの値がF-Aの計算式で計算されます。 チェックマークの位置で、計算式を判別しています。 例 A=50 F=100として X=真 Y=偽 Z=偽のとき Z=F-A Zの値は50 やはり、IIFでX,Y,Zの値を判断し真の時計算をさせるのでしょうか よろしくお願いいたします。

すると、全ての回答が全文表示されます。
noname#22222
noname#22222
回答No.1

一応、 YesNo = True ----> X -z YesNo = False ----> Y +z ならば、 SELECT テーブル1.ID, テーブル1.X, テーブル1.Y, テーブル1.Z, テーブル1.YesNo, IIf([YesNo],[x]-[z],[Y]+[z]) AS V FROM テーブル1; ******************************************** IIf([YesNo],[x]-[z],[Y]+[z]) AS V ******************************************** YesNo_A = True YesNo_B = True <= 矛盾 あえて YesNo_A、YesNo_B を用意しても、矛盾が解消されていれば、 ******************************************** IIf([YesNo_A],[x]-[z],[Y]+[z]) AS V ******************************************** でいけると思います。 ID     X       Y      Z      YesNo   V 1      1       2      3      Yes     -2 2      1       2      3      No      5

FORCE_009
質問者

お礼

早速回答ありがとうございます。 試してみたいと思います。 True False(真/偽)でチェックマークを判断し 条件文になるのですね。 初心者のため関数がわからないのですが クエリで条件判断する場合、IFではなくIIFなのですね。 ありがとうございました。

FORCE_009
質問者

補足

申し訳ありません。 質問の内容に不備がありました。 テーブルにデータ型がYes/No型の項目があります。 入力時チェックマークを入れます。 A=100 B=50 D=True E=False Dにチェックが入っていたとき、Z=A-B (それ以外は無視) Eにチェックが入っていたとき、Z=A+B といった感じで、Zを求める内容(計算式)が変化します。(Z内容を更新) Zはテーブルで定義済みです。

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう