Access2003です。
1.サブフォームにフィルターをかけてレコードを抽出
(フォームフッターで合計値を計算するフィールドを用意しておく)
2.その合計値を利用した計算結果をカレントレコードのフィールドに自動入力
これを1つのプロシージャで行いたいのですが、うまくいきません。
1と2を分けるとうまくいきます。何か方法はありますでしょうか。
具体的に…
サブフォームのカレントレコードの[西暦]フィールドにある値と同じ値が入っているレコードを抽出。
抽出されたレコードの合計をフォームフッターで算出。([原価合計][受注高合計])
[カレントレコードの売上高]=[(カレントレコードの)原価]/[原価合計]*[受注高合計]
※全体の原価に占めるカレントレコード原価の割合で、売上高を算出します。
これを一括処理しようとすると、フィルター後の[原価合計][受注合計]の算出が間に合わないのか、「0で除算しました」とエラーが出ます。
フィルターをかけるのと、売上高を求めるのを別々のプロシージャに分けて順に実行するとちゃんと算出できます。
一括でやりたいのですが、良い方法はありますか?
宜しくお願いします。
※前回もAccessの質問をさせていただきましたが、お礼を入力する前にベストアンサーを決定してしまったため、お礼ができませんでした。回答者の皆さんその節はありがとうございました!
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
遅くなりました!本日、出勤して内容確認・実行しました。
教えていただいた通り、Dsum関数で条件を付けて抽出・合計することで、
一旦フィルターをかけて抽出するプログラムも、
フォームフッターで合計するテキストボックスも必要なくなり、
大変スッキリとしたプログラムができました。
実際には抽出条件が複数ありAndで繋げる際に、Andも" "で囲む事に気付かず苦戦して御礼が遅くなってしまいました。
= DSum("工事費", "T金額", "営業番号 ='" & Me.営業番号 & "'And 種別 ='" & Me.種別 & "'and 西暦 =" & Me.西暦)
妥協なく、しかもスッキリ気持ちの良い処理ができました。
本当にありがとうございます!感謝しています。
No.3
- 回答日時:
メインフォームからサブフォームのボックスを参照することは出来ませんが
サブフォームからマインフォームのボックスを参照できます。
サブフォームのイベントで
Me.Parent!原価合計 = SUM(原価)
Me.Parent!受注高合計 =SUM(受注高)
Me.Parent 初めて知りました。
子から親を参照する時に使うのですね。
今回はDsumで条件を指定して抽出・合計することで解決しました。
考えていただいてありがとうございます。
Me.parent、今後生かせそうです。
No.1
- 回答日時:
> 1.サブフォームにフィルターをかけてレコードを抽出
> (フォームフッターで合計値を計算するフィールドを用意しておく)
> 2.その合計値を利用した計算結果をカレントレコードのフィールドに自動入力
これは私もはまったことがあります。
1.の後で Requery や Recalc をかけてみてもうまく行かなかったです。
最終的には、フォームフッターの合計値を参照するのをやめて、DSum関数で合計値を求めました。
フッターにあるのに別に集計するのは無駄のような気がしますが、しょうがないですね。
フッターを参照するなら、1. の実行後、タイマーイベントを使って時間をおいて、2.を実行するという方法もありますが、これもいまいちですね。
ご回答ありがとうございます!
同じ経験をされた方がいて嬉しいです。
Dsum関数に挑戦中ですが、フォームで抽出したレコードをDSumで合計するやり方がわかりません。
Dsum式の中で、テーブルから参照して抽出条件を設定しなおさないといけませんか?
例を教えていただけないでしょうか。
又はタイマーイベントの方法を教えてください。
sleep を使うと良いですか。
質問ばかりですいません。宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- Excel(エクセル) エクセル/列追加時、合計行の計算式 7 2023/03/15 11:14
- その他(お金・保険・資産運用) 至急!【Wolt】各メニューの価格設定の簡単な計算方法 3 2023/03/05 11:58
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- 簿記検定・漢字検定・秘書検定 満期保有目的債券の償却原価法の計算について(簿記2級) 1 2022/06/18 15:40
- 高校 日商簿記3級の勉強中なのですが 精算表が完成せず困っています。 こちらの問題の回答を教えていただきた 2 2023/03/02 09:07
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- 不動産業・賃貸業 建物、土地一括売却時の按分 2 2023/06/01 09:44
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
フィルタ後のフォームの件数の取得の仕方
Access(アクセス)
-
access マクロでのフィルタの解除の方法
Access(アクセス)
-
ACCESS──メインフォームでサブフォームのレコード件数をカウントしたい
Access(アクセス)
-
-
4
クロス集計クエリの結果をテーブルにしたい
Access(アクセス)
-
5
アクセスで『0の値以外』を表示する方法
Access(アクセス)
-
6
Accessを開きなおすとテキストボックスの値がエラー#Name?になる
その他(データベース)
-
7
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
8
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
9
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
10
Access サブフォームでの選択行の取得
その他(データベース)
-
11
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
12
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
13
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
-
14
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
15
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
16
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
17
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
18
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
19
「#エラー」の回避
Access(アクセス)
-
20
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードを保存するコード ア...
-
アクセスでフォームビューがみ...
-
Accessで上の行を自動でコピー...
-
AccessVBA RecordSourceのリセ...
-
レコード削除時に(サブ)フォー...
-
Accessでフォーム上に 直前の...
-
ACCESSフォームのリストボック...
-
ACCESS起動時に所定フォームを...
-
Accessでレコードの保存をせず...
-
ACCESSでフォームを使って、テ...
-
フォームが開いただけでCurrent...
-
アクセス 前レコード内容を、...
-
Access2002_メソッドまたはデー...
-
Access2010、値を入力したら自...
-
レコードをダブルクリックする...
-
アクセス データの競合を非表...
-
アクセスのフォームで立ち上げ...
-
アクセス帳票フォームのループ...
-
Accessで一件の新規レコードの...
-
Accessでチェックボックスで抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードを保存するコード ア...
-
ACCESSでフォームを使って、テ...
-
アクセスでフォームビューがみ...
-
新規レコード行を非表示にしたい
-
フィルタ後のフォームの件数の...
-
Accessでレコードの保存をせず...
-
アクセスの自動保存解除はでき...
-
AccessVBA RecordSourceのリセ...
-
Accessでフォーム上に 直前の...
-
レコード削除時に(サブ)フォー...
-
ACCESSフォームのリストボック...
-
Access:フォームプロパティ「...
-
Accessで上の行を自動でコピー...
-
Access レコード移動時イベント...
-
accessのクエリで、該当するデ...
-
ACCESSのクエリで抽出したデー...
-
ACCESS起動時に所定フォームを...
-
Accessで新しいレコードに規定...
-
Access 「このレコードを保存す...
-
Access 帳票フォームでカレント...
おすすめ情報