- ベストアンサー
Access Dsum関数
サブフォームのレコードセットの合計を求めメインフォームにボックスで表示したいのですが、Dsumの演算対象の条件の記述が間違っているらしくエラーがでます。 =DSum("前年度売上","Q_商品分類のサブフォーム","品目ID=" & [業態&調査商品]![Q_商品分類のサブフォーム]![品目ID]="1090") 品目IDの1090をどう指定してやるかが分かりません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ANo.2で、品目ID毎の集計を表示できます。 親フォームのレコードソースとして、品目テーブルを指定し、サブフォールとのリンクを品目IDでとります。 このようにすると、親フォームの移動ボタンをクリックして、品目コードを変えれば、連動して、集計値が再計算されます。それぞれの品目コードに相当する合計額が表示されます。 品目IDを指定するのであれば、品目選択用のコンボボックスを置き、この更新時イベントでフォームへのフイルター処理を行わせることで、自由に品目を変えながら集計値を確認できるようになります。 親フォームとサブフォームのリンクは行っていますか? コンボボックスの更新時イベントの設定は、下記の様になります。 Me.Filter="品目ID=" & Me.品目ID選択 '品目IDが数値の時 Me.FilterOn=True コンボボックス名を、品目ID選択、表示データは、1列目品目ID(幅0)、2列目品目名の2列とします。この方が、品目IDの数値を調べる必要がありません。 リンクなしなら、サブフォームに直接フィルターをかけるようにすれば問題ありません。
その他の回答 (2)
- psgrade
- ベストアンサー率86% (19/22)
DSum関数では、DomainとしてForm名は指定できないのではないでしょうか。 サブフォームのフォームフッターにSum([合計したいフィールド名])をコントロールソースとするテキストボックスを配置します。フォームフッターは、可視にいいえを指定します。親フォームにこのサブフォームコントロールをコントロールソースとするテキストボックスを作成します。すなわち、=[サブフォーム名].Form![サブフォームコントロール名]とします。 これでも目的は達成できるのではないでしょうか。
- mshr1962
- ベストアンサー率39% (7417/18945)
1090がテキストフィールドなら =DSum("前年度売上","Q_商品分類のサブフォーム","品目ID = '1090'") 1090が数値フィールドなら =DSum("前年度売上","Q_商品分類のサブフォーム","品目ID = 1090") でいいのでは?
補足
ありがとうございます。 質問内用の関数を間違えて貼り付けていました。 すみません。 =DSum("前年度売上","Q_商品分類のサブフォーム","品目ID = 1090") 上の関数でエラーが出るので以下のようにサブフォームの名前を追加しましたがエラーでした。 =DSum("[Q_商品分類のサブフォーム]![前年度売上]","Q_商品分類のサブフォーム","[Q_商品分類のサブフォーム]![品目ID] = 1090") 何が悪いのでしょうか?
補足
フールドを合計したいのではなくフールドのID1090だけを合計したいのでそれでは駄目ですね。 1090以外にも合計したいIDはあるのですが同じことをするだけなので 説明を省略いたしました。