• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access サブフォームにフィルター後、計算)

Accessサブフォームのフィルターと計算を一括で行う方法はありますか?

このQ&Aのポイント
  • Access2003でサブフォームにフィルターをかけてレコードを抽出し、計算結果を自動入力したいです。
  • 具体的には、サブフォームのカレントレコードの西暦フィールドと同じ値が入っているレコードを抽出し、そのレコードの合計値をフォームフッターで算出します。
  • しかし、フィルターと計算を一括で行おうとすると、計算の間に合わないためエラーが出ます。フィルターと計算を別々のプロシージャで順に実行することで正しく算出することができます。一括で処理する良い方法はありますか?

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

  • ベストアンサー
回答No.2

DSumで集計する方法ですが、 > サブフォームのカレントレコードの[西暦]フィールドにある値と同じ値が入っているレコードを抽出。 これですが、どのようにしていますか。 Filterプロパティに抽出条件を設定してるのなら、それを利用できます。 DSum("原価","テーブル名",Me.Filter) で原価合計を求められます。 あるいは、 DSum("原価","テーブル名","西暦=" & Me.西暦) でもいいでしょう。 タイマーを使う場合は、 タイマー間隔 は 0 に設定しておいて、 タイマー時のイベントプロシージャは、 Private Sub Form_Timer()   Me.TimerInterval = 0      2.の処理    End Sub で、1.の処理の最後で、タイマー間隔を設定します。 Private コマンド1_Click()   1.の処理   Me.TimerInterval = 500 End If

tomoneel
質問者

お礼

遅くなりました!本日、出勤して内容確認・実行しました。 教えていただいた通り、Dsum関数で条件を付けて抽出・合計することで、 一旦フィルターをかけて抽出するプログラムも、 フォームフッターで合計するテキストボックスも必要なくなり、 大変スッキリとしたプログラムができました。 実際には抽出条件が複数ありAndで繋げる際に、Andも" "で囲む事に気付かず苦戦して御礼が遅くなってしまいました。 = DSum("工事費", "T金額", "営業番号 ='" & Me.営業番号 & "'And 種別 ='" & Me.種別 & "'and 西暦 =" & Me.西暦) 妥協なく、しかもスッキリ気持ちの良い処理ができました。 本当にありがとうございます!感謝しています。

その他の回答 (2)

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.3

メインフォームからサブフォームのボックスを参照することは出来ませんが サブフォームからマインフォームのボックスを参照できます。 サブフォームのイベントで Me.Parent!原価合計 = SUM(原価) Me.Parent!受注高合計 =SUM(受注高)

tomoneel
質問者

お礼

Me.Parent 初めて知りました。 子から親を参照する時に使うのですね。 今回はDsumで条件を指定して抽出・合計することで解決しました。 考えていただいてありがとうございます。 Me.parent、今後生かせそうです。

回答No.1

> 1.サブフォームにフィルターをかけてレコードを抽出 >  (フォームフッターで合計値を計算するフィールドを用意しておく) > 2.その合計値を利用した計算結果をカレントレコードのフィールドに自動入力 これは私もはまったことがあります。 1.の後で Requery や Recalc をかけてみてもうまく行かなかったです。 最終的には、フォームフッターの合計値を参照するのをやめて、DSum関数で合計値を求めました。 フッターにあるのに別に集計するのは無駄のような気がしますが、しょうがないですね。 フッターを参照するなら、1. の実行後、タイマーイベントを使って時間をおいて、2.を実行するという方法もありますが、これもいまいちですね。

tomoneel
質問者

お礼

ご回答ありがとうございます! 同じ経験をされた方がいて嬉しいです。 Dsum関数に挑戦中ですが、フォームで抽出したレコードをDSumで合計するやり方がわかりません。 Dsum式の中で、テーブルから参照して抽出条件を設定しなおさないといけませんか? 例を教えていただけないでしょうか。 又はタイマーイベントの方法を教えてください。 sleep を使うと良いですか。 質問ばかりですいません。宜しくお願いします。

tomoneel
質問者

補足

sleep で3秒ほど処理を止めてみましたが、「0で除算しました」のエラーが出ました。

関連するQ&A