親フォームとサブフォーム間の演算

このQ&Aのポイント
  • テーブルのフィールドを利用して、親フォームとサブフォームの間で演算を行いたい場合の方法について教えてください。
  • 親フォームには決定金額の合計を表示し、サブフォームには請求金額の合計を表示したいです。どのような計算式を使えばよいでしょうか?
  • また、親フォームの決定金額合計からサブフォームの請求金額合計を差し引いて、請求過不足を計算したいです。適切な計算方法を教えてください。
回答を見る
  • ベストアンサー

親フォームとサブフォーム間の演算

どうぞよろしくお願いします。 現在、テーブルに[決定金額_1],[受け日_1],[決定金額_2],[受け日_2],[決定金額_3],[受け日_3] というフィールドがあります。 上記テーブルを基にクエリを作成し、【決定金額合計:[決定金額_1]+[決定金額_2]+[決定金額_3]】 というフィールドを設けて決定金額の合計を算出し、フォームを作成します。 [決定金額・受け日]×3と[決定金額合計]のフィールドを持ったフォームに、[F請求状況]という サブフォーム(帳票フォーム)を埋め込みました。 この[F請求状況]は、[請求日],[請求金額],[請求内容]がありフォーム上で[請求金額合計]を 算出しています。(=SUM([請求金額]) これは、決定した金額に対して複数回(多いときは5回ほど)請求を分ける時があるので 帳票フォームにしました。 親フォームの[決定金額合計]からサブフォームの[請求金額合計]を差し引いて [請求過不足]というフィールドを計算させたいのですが、どのようにしたらよいのでしょうか? なにとぞよろしくお願いします。

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

  • ベストアンサー
  • chayamati
  • ベストアンサー率41% (254/607)
回答No.1

初めに、メインフォームからサブフォームのボックス内容を参照、変更が出来ませんが、 サブフォームからメインフォームのボックスの内容を参照、変更する事が出来ます。 サブフォームからメインフォームのボックスを参照するにはMe.Parent!を用います。 これを踏まえて 1.サブフォーム側でメインフォームの[決定金額の合計]と[請求金額合計]を対比する。 2.メインフォームに[請求金額合計]というテキストボックスを配置し、   請求の都度このボックスを更新します。   Me.Parent!請求金額合計=請求金額合計 どちらでも処理可能ですが、自分なら2でやります。 このボックスは非連結でもよいのですが、テーブルに[請求金額合計]を追加しておくと サブテーブル無のレポートがありそうですね

RINKAITO
質問者

お礼

大変参考になりました。 どうもありがとうございました。

RINKAITO
質問者

補足

chayamati様 早速のご回答どうもありがとうございます。 ご回答の内容は理解できた(つもり)と思いますが、 実際に2の方法で試したところ、「#Name?」のエラーが出て うまく参照してくれません。 [請求金額合計]をフォーム上でのみ計算させているのが 原因でしょうか?

関連するQ&A

  • サブフォームにした方がいいのか親フォームがいいのか

    単票・帳票フォームで使う場合、 サブフォームにした方がいいのか親フォームのままのほうがいいのか。 アクセスでフォームでデータを表示する際に、 フォームのデータシートビューの場合は、 フォームヘッダーにコントロールを置けないから、 データシートをサブフォームとして、親フォームに乗せてコントロールを設置しますが、 単票・帳票フォームの場合は、フォームヘッダーにコントロールが置けますよね。 その場合でもデータシートビューのように サブフォームにした方が良いのでしょうか? そもそもどういう時にサブフォームにした方が良いのかわかりません テーブルやクエリのデータをフォームとしてデータシートビューで表したい上、 コントロールも設置したい時にサブフォームにするべきで、 それ以外(単票・帳票フォーム)はフォームのまま使うべきでしょうか? 添付の画像は、 帳票フォームをサブフォームに載せずにコマンドボタンなどを置いたバージョンです。

  • サブフォームのビューを切り替えたい

    親フォーム(フォーム1)にサブフォームとして、 テーブルをソースとするサブフォーム(テーブル1のサブフォーム)を配置しました。 親フォームからサブフォームのビューを変更したいのですが どうすればいいか教えてください。 親フォームのコマンドボタンにはそれぞれ Private Sub 単票フォームへ切り替え_Click() Me.Controls("テーブル1のサブフォーム").Form.DefaultView = 1 '帳票フォーム End Sub Private Sub 帳票フォームへ切り替え_Click() Me.Controls("テーブル1のサブフォーム").Form.DefaultView = 0 '単票フォーム End Sub としたのですが、 実行すると 実行時エラー 2136 "このプロパティを設定するには、フォームまたはレポートをデザインビューで開きます"。 となってしまいます。 Private Sub 帳票フォームへ切り替え_Click() DoCmd.SelectObject acForm, "テーブル1のサブフォーム" DoCmd.RunCommand acCmdFormView End Sub にしたところ、 実行時エラー 2489 “オブジェクト テーブル1が開いていません、” になります。 サブフォームに埋め込んでいて親フォームを開いていても 開いてない事になるのですね。 フォームビューの時に、切り替える事は不可能なのでしょうか? 帳票ビュー表示用フォーム、 単票ビュー表示用フォーム を作るしかないのでしょうか?

  • 親フォームからサブフォームのレコードソースを設定

    親フォームからサブフォームのレコードソースを設定するには? フォーム1にテーブル1をドロップアンドドラッグして、「テーブル1のサブフォーム」を作成しました。 フォーム1にあるコマンドボタンから「テーブル1のサブフォーム」のRecordSourceを設定する方法を教えてください。 「テーブル1のサブフォーム」からなら Private Sub Form_Load() Me.RecordSource = "" End Sub とできるのですが、 やりたいことはフォーム1からのイベントなので 「テーブル1のサブフォーム」からのイベントは使えません。 だからってフォーム1の Private Sub コマンド2_Click() Me.テーブル1のサブフォーム.RecordSource = "テーブル1のサブフォーム" End Sub とするとコンパイルエラーになります。 良い方法があれば教えてください。アドバイスよろしくお願いします。

  • サブフォームのテキストボックスの表示が遅い

    ACCESS2010です。 サブフォーム(帳票フォーム)のフッターにある、コントロールソースが =nz(sum([金額]),0) と設定してあるテキストボックスがあります。([合計金額s]) サブフォームの詳細には[数量]、[単価]、[金額](タブオーダーもこの順番)があり、この[金額]の合計値が上記[合計金額s]に表示されます。 ただ一つ問題があり、[金額]でエンターを押した後[合計金額s]の内容が更新されるまで約1秒位かかります。 これの何が問題なのかと言うと、[金額]でエンターを押した後[F12]キーを押すことで入力したデータをテーブルに書き込んでいるのですが、メインフォームに[合計金額s]を参照しているコントロールがあり、[合計金額s]が更新される前に[F12]キーを押すと更新前の内容でデータに書き込まれてしまうのです。 今は[金額]でエンターを押し一息ついてから[F12]キーを押しています。 何か良い解決策が有りましたらご教示ください。

  • サブフォームからフィルターをかけてフォームを開く。

    いつもお世話になっております。 テーブル(T_弁護士)とテーブル(T_案件)の 二つを作成し、それを基にして、 それぞれ(F_弁護士)と(F_案件)があります。 F_弁護士フォームにはサブフォームを作成して そこにT_案件のうち個々の担当する案件の一覧を データシート形式で表示させています。 このサブフォームはクエリー(Q_弁護士から案件)を 基にしたフォーム(SF_弁護士から案件のサブフォーム)で、 そのクエリーではT_弁護士とT_案件を T_弁護士の氏名フィールドを(1) 対 T_案件の担当者名(多)でリレーションシップを組み T_案件の案件名の抽出条件 (Like "*" & [forms]![F_弁護士]![氏名] & "*")と 設定して、複数の案件の一覧を表示させています。 そして、このサブフォーム (SF_弁護士から案件のサブフォーム)の一覧から それぞれの案件IDをクリックして 個々の案件を特定し、F_案件で 表示オープンさせたいと考え、 クリック時の埋め込みマクロで フォームを開く[F_案件]、 Where条件式、 [ID]=[Forms]![SF_弁護士から案件のサブフォーム]![ID] としたところパラメーターの入力というダイアログ ボックスが出て [Forms!SF_弁護士から案件のサブフォーム!ID] というふうに いちいちIDの入力を求められます。 その都度、IDを入力すれば表示オープンさせられるのですが、 これを解消して直にクリックしたIDの案件を 表示させたいのです。 皆様、何かとお忙しいとは存じますが どうかお知恵をお貸しください。 どうぞよろしくお願いいたします。

  • ★Access★2つのサブフォームの計算

    受注管理として、注文書の作成入力をしています。 『メインフォーム』で、顧客先などを入力し、『サブフォームA』で受注明細を入力しています。そして受注種類が2つあるので、フィールドの違う受注明細の『サブフォームB』もあるんです。各サブフォームには数量・単価・金額が入っています。 『サブフォームA』『サブフォームB』の両方に注文がある場合は、各サブフォームの合計(=[Form]!サブフォームA!金額合計)を出し、その合計同士を足して総合計金額(A+B)が『メインフォーム』にちゃんと表示されます。しかし、『サブフォームA』にだけ注文がある場合、『A』合計は表示されますが、『B』合計が空欄になってしまって、A+Bの合計が計算されないのです。さらにレポート印刷もできないのです。 どうすればいいのでしょうか?合計プロパティの既定値を0にしてもだめなんです。誰か教えて下さい。

  • ACCESS フォームからサブフォームのデータを更新・入力したい

    ACCESS フォームからサブフォームのデータを更新・入力したい tbl_プロジェクトというテーブルにIDとプロジェクトコード、プロジェクトの基本情報を持たせ、f_プロジェクトフォームからプロジェクトコード、件名、契約日等のデータ及び、f_テーマサブフォームにテーマを入力できるようなフォームを作成しています。フォームで入力したものをそれぞれのテーブルに保存したいのですがうまくいかない部分があります。 フォームから入力すると、tbl_プロジェクトに所属する情報は更新されます。そのtbl_プロジェクトに所属するプロジェクトコードをサブフォームのtbl_テーマのプロジェクトコードにも反映したいのですがどのようにしたらよいでしょうか? そういったことは可能でしょうか?分かりにくい説明で申し訳ないですが教えていただけると助かります。よろしくお願いします! DBの構成 【テーブル】 tbl_プロジェクト (1件1件のIDとプロジェクトコードを持つ) (フィールド:P_ID、プロジェクトコード、件名、契約日など) tbl_テーマ(プロジェクト毎に関連のあるキーワードを持つ) (フィールド:P_ID、プロジェクトコード、テーマ)←これのプロジェクトコードにtbl_プロジェクトのデータが入るようにしたい。 tbl_顧客(プロジェクトを依頼した顧客情報を持つ) 【クエリ】 q_テーマ(プロジェクト、テーマ、顧客を抽出するクエリ) 【フォーム】 f_プロジェクト (プロジェクトを1件ずつ表示・参照・新規作成するフォーム) f_テーマサブフォーム (f_プロジェクトフォームのプロジェクトコードにづきテーマを          表示・入力するサブフォーム) リレーションはP_IDをキーに一対多で作成しています。

  • サブフォームからメインフォームのフィールドにエンターキーで移動したい

    ACCESS2000です。 フォームの中にサブフォームを作っています。 入力される都合で、フォームの中途にサブフォームがあります。このサブフォームのレコードの数は固定しています。(今は19です) サブフォームは帳票形式です。 サブフォームの最後のレコードでエンターキーやTABキーが押された時、メインフォームの指定するフィールドに移動するには、どうすれば良いでしょう。 使用者に特殊なキー操作を強要したくないので、VBAで記述したいのですが。

  • サブフォームにあるテキストボックスの値を参照したい

    ACCESS2010です。 サブフォーム(帳票フォーム)のフッターにある、コントロールソースが =nz(sum([金額]),0) と設定してあるテキストボックスがあります。([合計金額s]) この[合計金額s]の値を、メインフォームのコントロールソースがテーブルの項目に設定されているテキストボックス([金額])で参照したいのですが、金額入力直後の値が参照できません。 現在はメインフォームに中継用のテキストボックス([金額wk])を作成し、コントロールソースを[合計金額s]に設定、acNewRecする前に[金額wk]の値を[金額]へ渡しています。 何とか直接参照する方法はありませんでしょうか。

  • サブフォームを複数持つフォームを、一つのキーワード取得用フォームから印

    サブフォームを複数持つフォームを、一つのキーワード取得用フォームから印刷できますか。 印刷用フォームを作成しました。 その中には、基本情報とサブ情報1、サブ情報2…というような複数のサブフォームがあります。 基本テーブルは、 商品番号、商品名 内容 というようなフィールドがあります。   サブ1テーブルは、 商品番号、日付A サブ2テーブルは、 商品番号、日付B キーワード取得用フォームに、商品番号と日付を入れてコマンドボタンを押すと、サブフォームを複数持つフォームに、 (1)基本テーブルの内容と、 (2)それぞれのサブフォームには取得した日付の日付情報(複数レコードもあり) を入れて印刷したいのです。 こんなことは可能でしょうか。 コマンドボタンにクリック時のイベントを書けばいいような気もするのですが、方法がわかりません。 教えてください。よろしくお願いいたします。

専門家に質問してみよう