サブフォームの値をメインFのテーブルへ&残数計算

このQ&Aのポイント
  • サブフォーム内の要素の合計をメインフォームの特定のフィールドに代入したい場合、値の代入マクロを使用することができます。
  • 外注に出した数と仕上がってきた数から残数を計算する場合、色別の発注数と完了数をクエリで取得し、差分を計算することができます。
  • 要約文の作成例です。
回答を見る
  • ベストアンサー

サブフォームの値をメインFのテーブルへ&残数計算

アクセスについて二つ質問があります。 1. クエリを元に作ったサブフォーム内に、レイヤー数、パターン数、合計というフィールドがあります。 レイヤー数xパターン数=合計という計算になっています。 サブフォーム内の”合計”を全て足した数字を、メインフォームの”合計オーダー数”というフィールドに代入し、またこの値をテーブルに入れたいと考えています。 サブフォームのフッターに、合計を全て足した数字を計算するように、コントロールを作りました。 メインフォームの元のテーブルには、合計オーダー数というフィールドがあり、そこにこの数字を格納したいのですが、サブフォームのフッターで出した値を、”合計オーダー数フィールド”へ表示することが出来ても、テーブルには格納されません。(手入力なら入ります。) 値の代入マクロというのがあるようなのですが、これがそれにあたりますでしょうか? お教え頂ければ幸いです。 2. クエリにて残数を計算したい 外注に出した数と仕上がってきた数から、残数を出したいと思っています。 カッティングIDひとつに対して、カラーIDがいくつかある状態です。 外注に出すときは、カッティングID別に出しますが、あがってくる時は、ばらばらにあがってきます。 例えば、赤を40、青を20、緑を20発注する場合、仕上がってくる時は、 赤10、青10、緑5、といった様にあがってきます。 これを色別に発注した数(合計)と(色枚完了数)から、色別の残数(未完了数)を出したいのですが、 どうしたらよいでしょうか? まずは、二つのテーブルからクエリで色別の発注数、と色別の完了数を出すところまではしました。 T-色別カッティング詳細 ・ID(オート番号、主キー) ・カッティングID   ・カラーID   ・枚数    ・パターン数 Q-色別外注発注数 (上記T-色別カッティング詳細を元に) ・カッティングID ・カラーID ・商品名 ・レイヤー数 ・パターン数 ・合計(レイヤー数xパターン数) T-完了詳細 ・完了ID ・カッティングID ・カラーID ・会社ID ・完了日 ・完了数 Q-完了数 (上記T-完了詳細を元に) ・カッティングID ・カラーID ・色枚完了数合計(SumOf完了数) お手数ですが、ご教授頂けますと幸いです。 宜しくお願いいたします

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

>希望と致しましては、ボタン一つで値の表示・テーブル >への格納が出来ればと思っております。 このままでは、親フォーム以外のどれかの コントロール(たとえばサブフォームの フィールドなど)をクリックしたり、レコードを 移動したりしないとレコードは確定しませんね。 では、以下のように一行追加したものを試してみてください。 Private Sub コマンド5_Click()   Me!合計オーダー数 = Me!埋め込み0!tx総計   DoCmd.RunCommand acCmdSaveRecord End Sub DoCmd.RunCommand acCmdSaveRecord によって、現在のレコードを確定させます。 この場合は親フォームのレコードソース が対象になります。 引き続き(2)については確認してみます。

nerihime
質問者

補足

ご丁寧に誠に有難うございました。 お蔭様で、テーブルにも同時に格納することができました。 (2)につきましても、私も引き続き色々と試しております。 大変お手数ではございますが、お手すきの際に宜しくお願いいたします。

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

No1の回答に勘違いがあったので(多分)、 以下を試してみてください。 Private Sub コマンド5_Click()   Me!合計オーダー数 = Me!埋め込み0!tx総計 End Sub 「埋め込み0」についての説明はNo1と同じです。

nerihime
質問者

補足

pitoin654様 再度ご返信有難うございます。お蔭様で、合計オーダー数をコマンドボタンで表示することは出来ましたが、次のレコードに行かないと値がテーブルには格納されないようでした。 希望と致しましては、ボタン一つで値の表示・テーブルへの格納が出来ればと思っております。 と申しますのも、値を確定後、印刷ボタンにてフォームに表示中データのレポートを印刷するのですが、テーブルに値が格納されないと、合計オーダー数の部分が空白となってしまいます。次のリコードに進んで、戻れば格納されているのですが、そうせずとも出来るでしょうか? 度々ご面倒をお掛け致しますが、何卒宜しくお願いいたします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

たぶん回答がつかないのは、(1)はともかく (2)の部分にわかりにくいところがあるからだと 思いますが。(1)もどちらかというと何となく 不安なところがありますが。 (1) たとえば、メインフォームのレコードソースが、 ID   名前       合計オーダー数 1    スカート 2    手袋 3    ズボン 4    セーター のようになっているものとします。 また、サブフォームにはレイヤー数、パターン数、合計以外にIDという フィールドがあるものとします。このIDはメインフォームのIDと 連動するフィールドです。もし、メインフォームのIDとサブフォームの IDのようにリンクして連動するフィールドがないのであれば、 メインフォームとサブフォームのレコードソースをすべて表示 しないと難しいことにはなりますが。(そのときに回答が可能かは 何とも言えませんが) メインフォームにボタンを一つ設定し、そのボタンのクリックイベントで、 Private Sub コマンド5_Click()   Dim strSQL As String   strSQL = "UPDATE テーブル1 SET テーブル1.合計オーダー数 =" & Me!埋め込み0!tx総計 & " WHERE ([テーブル1].[ID]=" & Me!ID & ")"   DoCmd.RunSQL strSQL   Me.Refresh End Sub なお、「埋め込み0」というのはメインフォームのデザインビューのとき、 サブフォームを表示するために設定するコントロールで、サブフォーム そのものではありません。もしサブフォームと同じ名前にしているならば それでも構いませんが、初期値は「埋め込み0」というような名前に なっています。 また、コード中のテーブル名はメインフォームのレコードソースです。 実際に合わせて名前を変更してください。 (2) 問題の(2)についてですが。質問には、 T-色別カッティング詳細 ・ID(オート番号、主キー) ・カッティングID   ・カラーID   ・枚数    ・パターン数 Q-色別外注発注数 (上記T-色別カッティング詳細を元に) ・カッティングID ・カラーID ・商品名 ・レイヤー数 ・パターン数 ・合計(レイヤー数xパターン数) とありますが、「Q-色別外注発注数」の ・商品名 ・レイヤー数 はどこからきたのでしょうか。もしかしたら T-商品のようなものがあって、そこに登録されている のでしょうか。それならば、「T-色別カッティング詳細」 にリレーションをとる何か、たとえば商品IDのような ものがないと、不必要なデータが「Q-色別外注発注数」 に出てくるのでは、と思います。

nerihime
質問者

補足

piroin 654様 ご返信有難うございます。説明不足でわかりづらいところがあり申し訳ございません。 1. メインフォームとサブフォームは、NoPotonganというIDでリンクされています。アドバイスを元に、コードを貼り付けてみましたが、コンパイルエラーのExpected: End of Statementというのが出てきてしまいました。 T_SuratPotongBaseInfo (メインフォームの元のテーブル名) TotalOrderQtty (メインフォーム元のテーブルのフィールド名、全ての合計数を格納したいフィールド) F_SuratPotongDetail (埋め込みサブフォームのコントロール名、サブフォーム名と同じ名前にしてあります) OrderQtty_Total(サブフォームのフッターに作った合計を全て足した数字を計算するコントロール名) 申し訳ございませんが、ご確認いただけますでしょうか? Private Sub cmd_MasukDataIni_Click() Dim strSQL As String strSQL = "UPDATE T_SuratPotongBaseInfo SET T_SuratPotongBaseInfo.TotalOrderQtty =" & Me!F_SuratPotongDetail!txOrderQtty_Total & " WHERE ([T_SuratPotongBaseInfo].[NoPotongan]=" & Me! NoPotongan & ")" DoCmd.RunSQL strSQL Me.Refresh End Sub 2. こちらも説明不足で申し訳ございません。 T_発注情報 ・カッティングID(主キー) ・裁断日 ・合計オーダー数 ・商品名 ・生地名 ・サイズ T_色別カッティング詳細 ・ID(オート番号、主キー) ・カッティングID   ・カラーID   ・レイヤー数    ・パターン数 Q_色別外注発注数  ・カッティングID ・カラーID ・商品名 ・レイヤー数 ・パターン数 ・合計(レイヤー数xパターン数) 例) Q_色別外注発注数 合計外注発注数は、(枚数xパターン数) カッティングID 001、 カラーID 1(赤)、合計外注発注数 100 カッティングID 001、 カラーID 2(青)、合計外注発注数 100 カッティングID 001、 カラーID 3(緑)、合計外注発注数 100 カッティングID 002、 カラーID 1(赤)、合計外注発注数 200 カッティングID 002、 カラーID 2(青)、合計外注発注数 200 T_完了詳細には、 カッティングID 001、カラーID 1(赤)、 完了日5/6、 完了数 10 カッティングID 001、カラーID 1(赤)、 完了日5/7、 完了数 20 カッティングID 001、カラーID 2(青)、 完了日5/6、 完了数 10 カッティングID 001、カラーID 2(青)、 完了日5/7、 完了数 20 カッティングID 002、カラーID 1(赤)、 完了日5/6、 完了数 20 カッティングID 002、カラーID 1(赤)、 完了日5/7、 完了数 5 カッティングID 002、カラーID 2(青)、 完了日5/7、 完了数 10 Q_完了数は、 カッティングID 001、 カラーID 1(赤)、合計完了数 30 カッティングID 001、 カラーID 2(青)、合計完了数 30 カッティングID 002、 カラーID 1(赤)、合計完了数 25 カッティングID 002、 カラーID 2(青)、合計完了数 10 今回計算したいと思っているのは、【合計外注発注数】から、色毎の完了数をまとめた【Q-完了数の合計完了数】です。 カッティングID 001、 カラーID 1(赤)、合計外注発注数 100-合計完了数 30=70 カッティングID 001、 カラーID 2(青)、合計外注発注数 100-合計完了数 30=70 カッティングID 001、 カラーID 3(緑)、合計外注発注数 100-合計完了数 0=100 カッティングID 002、 カラーID 1(赤)、合計外注発注数 200-合計完了数 25=175 カッティングID 002、 カラーID 2(青)、合計外注発注数 200-合計完了数 10=190  Q_色別外注発注数 とQ_完了数から選択クエリを作り、カッティングIDとカラーIDを結合し、 [Q_色別外注発注数 ]![合計発注数] - [Q_完了数]![合計完了数]をビルドで作成したところ、 上記の カッティングID 001、 カラーID 3(緑)、合計外注発注数 100-合計完了数 0=100 以外は、 値が出るのですが、完了数が入っていないものはNull値の為か、値が出てきません。 Nz関数にて色々と試みているのですが、何分知識不足のため、どうNz関数を式に当てはめてよいか悩んでおります。 お手数をお掛け致しますが、ご教授頂けますと幸いです。 何卒宜しくお願いいたします。

関連するQ&A

  • Access2000でメインサブフォーム

    テーブル1 商品ID 数値型(主キー) 商品名 テキスト型 ------------------ テーブル2 売上ID  数値型(主キー) 商品ID  数値型 月日   日付型 売上個数 数値型 --------------------- 以上のようなテーブルがあり、テーブル1を「メイン」テーブル2を「サブ」のメインサブフォームを作成しました。 しかし、「サブ」のデータが多いため、さらに、サブフォームの日付フィールドを使い、抽出をしたいのですが、方法がわかりません。(例えば、9/1以上9/10以下のような抽出) いろいろやってみは見たのですが、思うようにできません。メインサブフォームでさらにサブフォームのデータを抽出するということは無理なのでしょうか?

  • サブフォームの値をメインフォームで表示

    Accessのサブフォームの値をメインフォームで表示する方法をお教え下さい。 画像にありますように、各コントロールは以下になります。 http://upload.fam.cx/cgi-bin/img-box/th6120120093700.jpg MAIN_FORM1(このフォーム) subform_1(サブフォーム) combo1(コンボボックス) textbox1(テキストボックス) subform_1はクエリオブジェクト、「Q_月報」を呼び出し、以下のSQLでできています。 -------------------------------------------------------------------------------------------------- SELECT Format([伝票日付],"yyyy-mm") AS 月, 出庫テーブル.商品番号, 商品マスタ.商品名, Sum(出庫テーブル.数量) AS 数量の合計 FROM 出庫テーブル INNER JOIN 商品マスタ ON 出庫テーブル.商品番号 = 商品マスタ.商品番号 WHERE (((Format([伝票日付],"yyyy-mm"))=[Forms]![月報]![リスト2])) GROUP BY Format([伝票日付],"yyyy-mm"), 出庫テーブル.商品番号, 商品マスタ.商品名; -------------------------------------------------------------------------------------------------- MAIN_FORM1には下記のVBAコードが書かれています。 -------------------------------------------------------------------------------------------------- Private Sub リスト2_Click() Me!月報サブフォーム.Requery End Sub -------------------------------------------------------------------------------------------------- MAIN_FORM1を開き、コンボボックスにある日付を選択すると、日付をキーにサブフォームでrequeryされるようになっています。 わからない点は、MAIN_FORM1にtextbox1に、サブフォームの「数量の合計フィールド」の合計を表示したいと思います。 textbox1のコントロールソースに、「=Sum([Forms]![月報サブフォーム]![数量の合計])」をやりましたが、うまく表示ができません。エラーと表示されます。どのように注文フォームに表示されている、「数量の合計フィールド」の合計をテキストボックスに表示できるでしょうか?

  • 2つのサブフォーム間でデータの連携

    今、ある単票フォームに、2つのサブフォームを配置し、そのサブフォーム間で金額の連携をしたいと考えています。 【親フォームA】 ・ID1、長整数型(主きー) ・受付日時 ・発注金額総合計 <== ※Bが更新されたら、ここを更新したい 【サブフォームB】 ・ID2、長整数型(主キー) ・ID1(外部キー) ・発注日 ・発注合計金額 <=== ※Cが更新されたら、ここを更新したい ==> Aの更新へ↑ 【サブフォームC】 ・ID3、長整数型(主キー) ・ID2(外部キー) ・発注項目名 ・単価 ・数量 ==>ここを更新する→Bへ↑ ・単位 ==>ここを行進する→Bへ↑ ・摘要 サブフォームB、Cは、いずれも帳票型です。 それぞれ、テーブルA, B, Cがレコードソースで テーブル構成は、上の項目の構成と同じです。 A-ID1: B-ID1 = 1:多 B-ID2: C-ID2 = 1:多 この時、Cで単価と数量を入力したら、Bの発注合計金額の値を更新したいです。 それと同時に、親Form Aの「発注金額総合計」の値を、Bの全てのレコードの「発注合計金額」のSumで更新したいです。 よろしくお願いします。

  • アクセス2002メインフォームとサブフォームの合算

    発注書を作成し、担当者毎に改ページを設定してます。 担当毎にメインフォームの発注数量とサブフォームの発注数量の合計を ページフッターに表示することは出来たのですが、 全体の合計数を各担当のページに表示させる方法がわかりません。 教えてください。

  • access2013 サブフォーム作成のエラー

    Access2013にてフォーム内にサブフォームウィザードを使って追加しようとします。 しかし、最終的に「フォームを作成できませんでした」とエラーがでます。 ■手順  (1)「既存のテーブル/クエリを選択」  (2)一つの指定テーブルからフィールドを選択※  (3)名前を指定して「完了」 ■不具合内容  上記の※でフィールドを選択する際に、  フィールドを9つまでは完成しますが、それ以上だとエラーがでます。 ■質問内容  サブフィールドを追加する際に、フィールドの数に制限はあるのでしょうか?  フィールドを14個指定したいのですが、解決策はあるのでしょうか? 内容に不足がありましたら申し訳ありません。 どなたかお教えいただけると幸いです。

  • ACCESS──メインフォームでサブフォームのレコード件数をカウントしたい

    日付/品番/出庫数のフィールドで構成された「明細テーブル」があります。 「日付」フィールドからなるメインフォーム、「品番/出庫数」からなるサブフォームをつくり、メインフォームのサブフォームコントロールのレコードソースを「サブフォーム」に指定しました。 日付を入れるとその日の出庫明細がサブフォーム上に表示されるのですが、このレコード件数をメインフォーム上のコントロールで表示したいのです。 サブフォームのヘッダにテキストボックスコントロールを作り「=Count([品番])」としてやれば、「サブフォーム上での」件数表示は出来るのですが、同じ式をメインフォーム上のコントロールに記述すると、「全レコードの件数」が表示されてしまいます(当たり前ですが) そこで、「=Count([埋め込み].Form![品番])」とやってみました。ここで「埋め込み」とはメインフォーム上のサブフォームコントロールの名前です。 結果は「#Error」となってしまいます。Count関数だけでなくSum関数などでも同様の結果となります。 はっきりいって「サブフォームのヘッダに表示させればいいじゃないか」というところなのですが、「式ビルダ」ではサブフォームのコントロール名も容易に参照できるようになっており、なにか方法があるのではないか、初歩的なところでつまずいていないか、と思案している次第です。 なにかアドバイスいただけたら幸いです。

  • 隣のセルを合計する方法を教えてください

    左隣のセルの数を足して注文残数を表示するにはどうしらたいいか教えてください。 発注数合計と出庫数合計に設定したSUMはそのままで、 発注残数行に累計を表示していく方法を教えてください。 発注数が0になった場合セルを空白にしたかったので、 発注数残行のセルに =IF(出庫数合計>=発注数合計,"",発注数合計-出庫数合計) を設定してみました。(この数式があっているかもわかりません) これに、ただ、左隣のセルの数字を+するだけだと#VALUE!が表示されてしまいます。 発注残数のセルが累計され、かつ、注文残数が0になったら空白にできる 方法を教えてください。 初歩的な質問ですみません。

  • アクセス サブフォームの使い方

    フォームにテキストボックスとコマンドボタンサブフォームが1つづつありま す。 やりたいことは、テキストボックスに入力した条件でコマンドボタンを押すと サブフォームに結果が表示されるというものです。 ID 分類 名称 1  花  バラ 2  花  ユリ 3  昆虫 カブトムシ とテーブルがあった場合、 テキストボックスに 花 を入力すると サブフォームに バラとユリが 表示されるというものです。(実際にはフィールド数はもっとあります。) コマンドボタンにクエリの実行を登録し、サブフォームはクエリをベースに作 成しました。 コマンドボタンをクリックするとクエリの結果が表示され(当たり前ですね) サブフォームは白紙のままです。 ファームのデザインビューをクリックし、再度フォームを表示すると結果は反 映されます。 この、クエリの結果を表示せず、かつサブフォームに結果を表示させる方法を 教えてください。

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

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

  • 他テーブルの集計結果を別テーブルのカラムに格納

    新規テーブル作成時にあるカラムに別のテーブルの集計結果を入れることはできるのでしょうか? 例えば、商品を定義したテーブルの中に、その商品が合計いくつ売れているかを集計するカラムを設置し、常に発注テーブルからその商品の合計発注数を引っ張って来て格納するイメージです。 テーブル作成時のみ集計するではなく、常に参照し動きがあれば数値が自動で変わるようになる方法を探しています。 いちいちselectで集計しなくても始めからカラムに集計値が入っていれば楽だなぁと思い質問しました。 どなたかわかる方いらっしゃいましたらよろしくお願いします。 商品テーブル CREATE TABLE product ( product_no SERIAL NOT NULL, (商品id) product_name VARCHAR(200) NOT NULL, (商品名) product_price VARCHAR(20) NOT NULL, (料金) product_sum INTEGER, (合計発注数)←ここ PRIMARY KEY(product_no) ); 発注テーブル CREATE TABLE order ( order_no SERIAL NOT NULL, (発注id) product_no INTEGER NOT NULL REFERENCES product(product_no) ON UPDATE CASCADE ON DELETE CASCADE,(商品id) order_num INTEGER NOT NULL,(その商品の発注数) order_date TIMESTAMP,(発注日) PRIMARY KEY(order_no) );

専門家に質問してみよう