仕入先製品マスタの編集画面は、発注先・担当課・単価を修正できる画面です。ロット別単価は新規登録画面ですでに解説した仕組みと同じため、ここでは旧単価の登録・履歴管理に絞って詳しく解説します。
仕入先製品編集画面の構成
図番・仕入先・仕入先単価・関連工程を編集できるほか、画面右側にロット単価・旧単価の一覧が表示され、それぞれ専用のポップアップから追加登録できます。
フォームビュー
F30仕入先製品編集 ポップアップフォームビュー
画面の概要
編集項目は以下の通りです。
仕入先製品編集 編集項目
| 項目 | 内容 |
|---|---|
| 図番 | 製品マスタ図番コンボボックス |
| 仕入先 | 仕入先コード(新規登録同様、仕入先検索から選択) |
| 仕入先単価 | 発注単価 |
| 関連工程 | 成形/加工/印刷/材料のチェックボックス |
| 有効/手配 | 状態フラグ |
| 備考 | 備考欄 |
| ロット単価一覧 | サブフォームで表示、ロット別単価登録ボタンから追加 |
| 旧単価一覧 | サブフォームで表示、旧単価ボタンから追加 |
デザインビューで見る仕組み
図番・仕入先の各コントロールは新規登録画面と同様、非連結のコンボボックスと非表示列を組み合わせた構成です。画面右側にロット単価・旧単価の2つのサブフォームが並んで配置されています。
デザインビュー
F30仕入先製品編集 ポップアップデザインビュー
デザインビューの概要
図番コンボボックスの非表示列から図番ID・取引先コードを、仕入先コンボの非表示列から仕入先名を取得する構成は新規登録画面と共通です。ロット単価・旧単価はそれぞれ別テーブルを参照するサブフォームとして右側に配置され、編集画面から直接ポップアップで追加登録できるようになっています。
ロット別単価ボタン
ロット単価登録画面をポップアップで開くボタンです。開くマクロ・登録処理・クリア処理の詳細は新規登録画面ですでに解説した内容と共通のため、そちらを参照してください。
仕入先製品マスタ「新規登録」(ロット別単価登録の仕組み)
仕入先製品マスタの新規登録画面は、製品マスタの図番に対して発注先(仕入先)と担当課を登録する画面です。仕入先の検索と、ロット別単価の登録という2つのポップアップ機能を内包した、やや複雑な構成になっています。 仕入先製品マス[…]
旧単価の仕組み
仕入先単価が改定された場合に、過去の単価を履歴として残すための機能です。編集画面の旧単価ボタンからポップアップを開き、現行単価をワンクリックでコピーしたうえで履歴に追加登録できます。
フォームビュー
F30仕入先製品旧単価編集 ポップアップフォームビュー
デザインビュー
F30仕入先製品旧単価編集 ポップアップデザインビュー
旧単価・登録日・備考の入力欄と、現行単価をコピーする「現行単価コピー」ボタンが配置されています。編集画面(F30仕入先製品編集)はこのポップアップの背後で開いたままのため、閉じずに直接値を参照できる設計です。
クエリ:Q30仕入先製品編集旧単価サブの構成
Q30仕入先製品編集旧単価サブ クエリデザインビュー
T30仕入先製品Mロット旧単価のうち、旧単価フラグがTrueのレコードだけを抽出して降順(新しい順)に表示します。
Q30仕入先製品編集旧単価サブ 抽出条件
| フィールド | 抽出条件 |
|---|---|
| 旧単価 | True(固定) |
| 図番ID | [Forms]![F30仕入先製品編集]![図番ID] |
| 仕入先コード | [Forms]![F30仕入先製品編集]![仕入先コード] |
| 登録日 | 降順で並べ替え |
旧単価ボタン(開くマクロ)
図番が未選択の場合はエラーで中止し、選択済みなら旧単価履歴画面をポップアップで開いて図番ID・図番・登録日を転記するマクロです。
サブマクロ:旧単価開く
- サブマクロのテキスト表示
-
サブマクロ:旧単価開く If IsNull([図番]) Then メッセージボックス(旧単価を登録する図番が選択されていません, はい, 警告, 未選択) マクロの中止 If 文の最後 フォームを開く(F30仕入先製品旧単価編集, フォーム ビュー, , , , 標準) 値の代入 アイテム:[Forms]![F30仕入先製品旧単価編集]![図番ID] 式:[Forms]![F30仕入先製品編集]![図番ID] 値の代入 アイテム:[Forms]![F30仕入先製品旧単価編集]![図番] 式:[Forms]![F30仕入先製品編集]![図番] 値の代入 アイテム:[Forms]![F30仕入先製品旧単価編集]![登録日] 式:Date() 再クエリ マクロの中止 サブマクロの最後
マクロの概要
| アクション | 内容 |
|---|---|
| Nullチェック | 図番未選択ならエラーで中止 |
| フォームを開く | F30仕入先製品旧単価編集をポップアップで開く |
| 値の代入 | 図番ID・図番を転記、登録日に当日日付をセット |
| 再クエリ | 一覧を最新化 |
マクロの設置場所
| 設置場所 | イベント |
|---|---|
| F30仕入先製品編集:旧単価ボタン | クリック時 |
現行単価コピーボタン
編集画面(F30仕入先製品編集)の仕入先単価を、旧単価入力欄にそのままコピーするマクロです。編集画面を閉じずに開いたままにしているからこそ成立する、シンプルな1行の値の代入です。
サブマクロ:旧単価コピー
- サブマクロのテキスト表示
-
サブマクロ:旧単価コピー 値の代入 アイテム:[Forms]![F30仕入先製品旧単価編集]![単価] 式:[Forms]![F30仕入先製品編集]![仕入先単価] マクロの中止 サブマクロの最後
マクロの概要
| アクション | 内容 |
|---|---|
| 値の代入 | 編集画面の仕入先単価を旧単価欄にコピー |
マクロの設置場所
| 設置場所 | イベント |
|---|---|
| F30仕入先製品旧単価編集:現行単価コピーボタン | クリック時 |
旧単価へ追加ボタン
単価・登録日の未入力チェックと確認メッセージのあと、Q30仕入先製品編集旧単価追加を実行して履歴に登録するマクロです。
サブマクロ:旧単価登録
- サブマクロのテキスト表示
-
サブマクロ:旧単価登録 If IsNull([単価]) Then メッセージボックス(単価が入力されていません, はい, 警告, 未入力) コントロールの移動(単価) マクロの中止 If 文の最後 If IsNull([登録日]) Then メッセージボックス(登録日が入力されていません, はい, 警告, 未入力) コントロールの移動(登録日) マクロの中止 If 文の最後 警告音 If MsgBox("旧単価を登録してよろしいですか?",4+32,"確認")=6 Then メッセージの設定(いいえ) クエリを開く(Q30仕入先製品編集旧単価追加, データシート, 編集) If MsgBox("「"+[Forms]![F30仕入先製品旧単価編集]![図番]+"」の旧単価を追加しました。") Then マクロの実行(M30仕入先製品.旧単価クリア) 再クエリ マクロの中止 If 文の最後 Else メッセージボックス(処理を中止しました, はい, 警告, 中止) マクロの中止 If 文の最後 サブマクロの最後
マクロの概要
| アクション | 内容 |
|---|---|
| 必須チェック | 単価・登録日の未入力を確認 |
| 確認メッセージ | 「旧単価を登録してよろしいですか?」で登録意思を最終確認 |
| クエリを開く | Q30仕入先製品編集旧単価追加をデータシートビューで実行 |
| 登録後の処理 | 完了メッセージ表示→旧単価クリアマクロ実行→再クエリ |
マクロの設置場所
| 設置場所 | イベント |
|---|---|
| F30仕入先製品旧単価編集:旧単価へ追加ボタン | クリック時 |
クエリ:Q30仕入先製品編集旧単価追加の構成
Q30仕入先製品編集旧単価追加 クエリデザインビュー
編集画面(F30仕入先製品編集)を閉じずに参照できることを利用し、仕入先コードは編集画面から直接取得しています。
Q30仕入先製品編集旧単価追加 追加フィールド構成
| フィールド | 追加元 |
|---|---|
| 図番ID | [Forms]![F30仕入先製品旧単価編集]![図番ID] |
| 登録日 | [Forms]![F30仕入先製品旧単価編集]![登録日] |
| 単価 | [Forms]![F30仕入先製品旧単価編集]![単価] |
| 備考 | [Forms]![F30仕入先製品旧単価編集]![備考] |
| 旧単価 | True(固定) |
| 仕入先コード | [Forms]![F30仕入先製品編集]![仕入先コード] |
旧単価クリアマクロ
登録完了後、入力欄をリセットするマクロです。
サブマクロ:旧単価クリア
- サブマクロのテキスト表示
-
サブマクロ:旧単価クリア 値の代入([単価], Null) 値の代入([登録日], Null) 値の代入([備考], Null) マクロの中止 サブマクロの最後
マクロの概要
| アクション | 内容 |
|---|---|
| 値の代入 | 単価・登録日・備考をNullに戻す |
マクロの設置場所
| 設置場所 | イベント |
|---|---|
| M30仕入先製品:旧単価登録から呼び出し | – |
クエリ:Q30仕入先製品編集更新の構成
編集内容をT30仕入先製品Mに反映するための更新クエリです。IDを条件に、仕入先コード・仕入先単価・備考・手配・有効・関連工程4項目を更新します。
Q30仕入先製品編集更新 クエリデザインビュー
Q30仕入先製品編集更新 更新フィールド構成
| フィールド | 更新元 |
|---|---|
| 仕入先コード | [Forms]![F30仕入先製品編集]![仕入先コード] |
| 仕入先単価 | [Forms]![F30仕入先製品編集]![仕入先単価] |
| 備考 | [Forms]![F30仕入先製品編集]![備考] |
| 手配 | [Forms]![F30仕入先製品編集]![手配] |
| 有効 | [Forms]![F30仕入先製品編集]![有効] |
| 成形課 | [Forms]![F30仕入先製品編集]![成形] |
| 加工課 | [Forms]![F30仕入先製品編集]![加工] |
| 印刷課 | [Forms]![F30仕入先製品編集]![印刷] |
| 材料課 | [Forms]![F30仕入先製品編集]![材料] |
| 抽出条件(ID) | [Forms]![F30仕入先製品編集]![ID] |
各コントロールの設定
編集開く・編集更新・閉じるの各マクロをまとめて解説します。
詳細ボタン(編集開くマクロ)
リスト画面から選択したレコードのIDを転記し、DLookupで全フィールドを編集画面に転写して開くマクロです。
サブマクロ:編集開く
- サブマクロのテキスト表示
-
サブマクロ:編集開く フォームを開く(F30仕入先製品編集, フォーム ビュー, , , , 標準) 値の代入 アイテム:[Forms]![F30仕入先製品編集]![ID] 式:[Forms]![F30仕入先製品リスト]![F30仕入先製品リストサブ]![ID] 値の代入 アイテム:[Forms]![F30仕入先製品編集]![仕入先コード] 式:DLookUp("仕入先コード","T30仕入先製品M","[ID]=[Forms]![F30仕入先製品編集]![ID]") 値の代入([Forms]![F30仕入先製品編集]![仕入先単価], DLookUp("仕入先単価","T30仕入先製品M","[ID]=[Forms]![F30仕入先製品編集]![ID]")) 値の代入([Forms]![F30仕入先製品編集]![成形], DLookUp("成形課","T30仕入先製品M","[ID]=[Forms]![F30仕入先製品編集]![ID]")) 値の代入([Forms]![F30仕入先製品編集]![加工], DLookUp("加工課","T30仕入先製品M","[ID]=[Forms]![F30仕入先製品編集]![ID]")) 値の代入([Forms]![F30仕入先製品編集]![図番], DLookUp("図番","T30仕入先製品M","[ID]=[Forms]![F30仕入先製品編集]![ID]")) 値の代入([Forms]![F30仕入先製品編集]![印刷], DLookUp("印刷課","T30仕入先製品M","[ID]=[Forms]![F30仕入先製品編集]![ID]")) 値の代入([Forms]![F30仕入先製品編集]![材料], DLookUp("材料課","T30仕入先製品M","[ID]=[Forms]![F30仕入先製品編集]![ID]")) 値の代入([Forms]![F30仕入先製品編集]![有効], DLookUp("有効","T30仕入先製品M","[ID]=[Forms]![F30仕入先製品編集]![ID]")) 値の代入([Forms]![F30仕入先製品編集]![手配], DLookUp("手配","T30仕入先製品M","[ID]=[Forms]![F30仕入先製品編集]![ID]")) 値の代入([Forms]![F30仕入先製品編集]![備考], DLookUp("備考","T30仕入先製品M","[ID]=[Forms]![F30仕入先製品編集]![ID]")) 再クエリ コントロール名:(空欄) マクロの中止 サブマクロの最後
マクロの概要
| アクション | 内容 |
|---|---|
| フォームを開く | F30仕入先製品編集をフォームビューで開く |
| 値の代入 | 一覧から選択したIDを転記 |
| 値の代入(複数) | ID一致条件でDLookupを使い、仕入先コード・仕入先単価・図番・関連工程4項目・有効・手配・備考を転写 |
| 再クエリ | ロット単価・旧単価のサブフォームを最新状態に更新 |
マクロの設置場所
| 設置場所 | イベント |
|---|---|
| F30仕入先製品リスト:詳細ボタン | クリック時 |
編集更新ボタン
確認メッセージのあと、Q30仕入先製品編集更新を実行してT30仕入先製品Mを更新し、完了メッセージ表示後にフォームを閉じて一覧を再クエリするマクロです。
サブマクロ:編集更新
- サブマクロのテキスト表示
-
サブマクロ:編集更新 警告音 If MsgBox("訂正・編集したデータを更新してもよろしいですか?",4+32,"確認")=6 Then メッセージの設定(いいえ) クエリを開く(Q30仕入先製品編集更新, データシート, 編集) メッセージボックス(訂正・編集したデータを更新しました。, はい, なし, 完了) ウィンドウを閉じる(フォーム, F30仕入先製品編集, 確認) 再クエリ マクロの中止 Else メッセージボックス(処理を中止します, はい, なし, 中止) マクロの中止 If 文の最後 サブマクロの最後
マクロの概要
| アクション | 内容 |
|---|---|
| 確認メッセージ | 「訂正・編集したデータを更新してもよろしいですか?」で更新意思を最終確認 |
| 更新処理 | Q30仕入先製品編集更新をデータシートビューで実行 |
| 更新後の処理 | 完了メッセージ表示→フォームを閉じる→一覧を再クエリ |
マクロの設置場所
| 設置場所 | イベント |
|---|---|
| F30仕入先製品編集:編集更新ボタン | クリック時 |
閉じるボタン
フォームを閉じるボタンです。マクロ:M99共通.閉じるを呼び出す共通処理で統一されています。
閉じるボタンの解説
フォームごとに同じ処理のマクロを個別に作ると、マクロの数が際限なく増えて管理が大変になります。M99共通マクロはどのフォームでも使い回せる処理をサブマクロとして一箇所に集約したものです。コントロール名を統一しておくことでフォームを問わず同じ[…]
まとめ
仕入先製品マスタの編集は、基本情報の修正に加えてロット単価・旧単価という2つの履歴管理機能を1画面に集約しています。ロット別単価は新規登録画面と共通の仕組みのため、旧単価まわりの登録・クリア・現行単価コピーの流れを中心に解説しました。ポップアップの作業ウィンドウ固定や、親フォームを閉じない参照設計など、細部の配慮が随所に活きています。
本サイトではマクロを用いた構築手順を中心に紹介していますが、決してマクロを唯一の正解として推奨しているわけではありません。VBAが扱える環境であれば、より多彩で柔軟なプログラムが組めるVBAでの構築をむしろ推奨したいと考えています。
ここでマクロという選択肢を提示しているのは、VBAにハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。