資材マスタ「編集」

資材マスタの編集画面です。資材リストの詳細ボタンから開き、選択した資材の全フィールドをその場で編集できます。ロット別単価・旧単価の登録状況は「ロット単価登録あり」ラベルで自動的にお知らせする仕組みです。

資材マスタ編集画面の構成

資材リストで「詳細」ボタンを押した行のデータが、そのままこの編集フォームに転写された状態で開きます。詳細画面=編集画面という位置づけです。

フォームビュー

実際に資材を1件開いた状態です。ロット単価の登録があるため、赤い「ロット単価登録あり」ラベルが表示されています。

資材マスタ編集 ポップアップフォームビュー

画面の概要

各コントロールの役割をまとめます。ロット単価有無のチェックボックスと赤いラベルは別物で、チェックボックスは手動設定、ラベルはロット単価データの実在有無をシステムが自動判定して表示する仕組みです。

画面の概要

項目 内容
登録者 登録者コードのコンボボックス
資材と関連部署 所属部署コードのコンボボックス
取引先名 取引先コードのコンボボックス
資材名 資材名の入力欄
種別 種別コードのコンボボックス
仕様 仕様の入力欄
単価 単価の入力欄
最低発注数量 最低発注数量の入力欄
単位 単位のコンボボックス
備考 備考の入力欄
登録日 登録日の表示欄
在庫数 在庫数の表示欄(単位付き)
在庫更新日 在庫更新日の表示欄
在庫メモ 在庫メモの入力欄
ロット単価有無(チェックボックス) T60資材Mのロット単価フィールドを直接編集する手動フラグ
有効 有効フラグのチェックボックス
ロット単価登録あり(赤ラベル) ロット別単価データが1件でも存在する場合に自動表示(手動フラグとは独立)
ロット別単価登録ボタン ロット別単価の登録画面を開く(製品マスタと同じ構造)
旧単価履歴・登録ボタン 旧単価の履歴・登録画面を開く(製品マスタと同じ構造)
編集更新ボタン 入力内容をチェックしT60資材Mを更新する
閉じるボタン フォームを閉じる

デザインビューで見る仕組み

フォームの内部構造を確認します。全コントロールが非連結で、開いたタイミングでDLookupにより値が転写される設計です。

デザインビュー

各コントロールが非連結(レコードソースなし)で配置されている様子を確認できます。

資材マスタ編集 ポップアップデザインビュー

デザインビューの概要

デザインビューの概要

項目 設定内容
レコードソース 空欄(非連結フォーム)
ロット単価登録あり ラベル 初期状態はVisible=いいえ。ロット単価データがある場合のみ編集開くマクロでTrueに切り替え
フォームフッター 編集更新・閉じるボタンを配置

編集フォームを開く仕組み

詳細ボタンを押してから編集フォームが表示されるまでの流れです。IDの引き継ぎ→全フィールドの転写→ロット単価有無の判定、という3段階で構成されています。

編集開くマクロ

資材リストのサブフォームで選択中の行のIDを編集フォームに引き継ぎ、表示マクロを呼び出します。ロット単価データがあればラベルを表示状態に切り替えます。

サブマクロ:編集開く

サブマクロのテキスト表示
サブマクロ:編集開く
 フォームを開く (F60資材編集, フォームビュー, , , , 標準)
 値の代入 [Forms]![F60資材編集]![ID]、[Forms]![F60資材リスト]![F60資材リストサブ]![ID]
 マクロの実行 (M60資材.編集表示, , )
 If DCount("*","Q60資材ロット単価有無")>0 Then
  値の代入 [Forms]![F60資材編集]![ロット単価有無].[Visible]、True
 If 文の最後
 マクロの中止
サブマクロの最後

マクロの概要

項目 内容
フォームを開く F60資材編集をフォームビューで開く
値の代入(ID) 資材リストで選択中の行のIDを編集フォームに引き継ぐ
マクロの実行 M60資材.編集表示を呼び出し全フィールドを転写
ロット単価有無判定 Q60資材ロット単価有無で件数を確認し、1件以上あればラベルを表示状態に切り替える

マクロの設置場所

項目 内容
フォーム F60資材リスト
コントロール 詳細ボタン
イベント クリック時

編集表示マクロ

DLookupでT60資材Mから全フィールドを取得し、編集フォームの各コントロールに転写します。

サブマクロ:編集表示

サブマクロのテキスト表示
サブマクロ:編集表示
 値の代入 [Forms]![F60資材編集]![登録者コード]、DLookUp("登録者コード","T60資材M","[ID]=[Forms]![F60資材編集]![ID]")
 値の代入 [Forms]![F60資材編集]![所属部署コード]、DLookUp("所属部署コード","T60資材M","[ID]=[Forms]![F60資材編集]![ID]")
 値の代入 ([Forms]![F60資材編集]![取引先コード], DLookUp("取引先コード","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 値の代入 ([Forms]![F60資材編集]![資材名], DLookUp("資材名","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 値の代入 ([Forms]![F60資材編集]![仕様], DLookUp("仕様","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 値の代入 ([Forms]![F60資材編集]![種別コード], DLookUp("種別コード","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 値の代入 ([Forms]![F60資材編集]![単価], DLookUp("単価","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 値の代入 ([Forms]![F60資材編集]![単位], DLookUp("単位","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 値の代入 ([Foms]![F60資材編集]![在庫数], DLookUp("在庫数","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 値の代入 ([Forms]![F60資材編集]![在庫更新日], DLookUp("在庫更新日","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 値の代入 ([Forms]![F60資材編集]![在庫メモ], DLookUp("在庫メモ","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 値の代入 ([Formsrms]![F60資材編集]![備考], DLookUp("備考","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 値の代入 ([Forms]![F60資材編集]![登録日], DLookUp("登録日","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 値の代入 ([For]![F60資材編集]![ロット単価], DLookUp("ロット単価","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 値の代入 ([Forms]![F60資材編集]![有効], DLookUp("有効","T60資材M","[ID]=[Forms]![F60資材編集]![ID]"))
 マクロの中止
サブマクロの最後

マクロの概要

項目 内容
処理内容 T60資材MからID一致のレコードを検索し、登録者コード・所属部署コード・取引先コード・資材名・仕様・種別コード・単価・単位・備考・登録日・在庫数・在庫更新日・在庫メモ・ロット単価・有効の14項目をDLookupで一括転写

マクロの設置場所

項目 内容
マクロモジュール M60資材
呼び出し元 編集開くマクロ

ロット単価有無の判定クエリ(Q60資材ロット単価有無)

T60資材ロット旧単価から、編集中のID・ロット別=Trueの条件で該当データを抽出するクエリです。同じクエリがロット単価一覧の表示にも使われています。

Q60資材ロット単価有無 クエリデザインビュー

Q60資材ロット単価有無 フィールド構成

フィールド テーブル 表示 抽出条件
ロット別 T60資材ロット旧単価 非表示 True
資材ID T60資材ロット旧単価 非表示 [Forms]![F60資材編集]![ID]
ロット T60資材ロット旧単価 表示(昇順)
単位 T60資材ロット旧単価 表示
前〜 T60資材ロット旧単価 表示
後〜 T60資材ロット旧単価 表示
単価 T60資材ロット旧単価 表示
登録日 T60資材ロット旧単価 表示
備考 T60資材ロット旧単価 表示

ロット単価が登録されているかどうかは、本来なら「ロット別単価登録」ボタンを押して中身を確認しないとわかりません。この編集画面では、フォームを開いた時点でQ60資材ロット単価有無の件数を判定し、1件でもあれば赤い「ロット単価登録あり」ラベルを表示状態に切り替えています。

チェックボックス(T60資材M.ロット単価)は手動フラグにすぎませんが、このラベルは実データの有無を都度チェックした結果です。担当者は開いた瞬間に「この資材はロット単価が絡んでいるかどうか」を判断でき、単価欄だけを見て通常単価だと思い込むミスを防げます。

編集更新処理

入力チェックから更新クエリの実行までの流れです。

編集更新マクロ

必須項目を上から順にチェックし、確認ダイアログで「はい」を選んだ場合のみ更新クエリを実行します。

サブマクロ:編集更新

サブマクロのテキスト表示
サブマクロ:編集更新
 If IsNull([登録者コード]) Then
  メッセージボックス (登録者が登録されていません, はい, 警告, 未入力)
  コントロールの移動 (登録者コード)
  マクロの中止
 If 文の最後

 If IsNull([所属部署コード]) Then
  メッセージボックス (所属部署が登録されていません, はい, 警告, 未入力)
  コントロールの移動 (所属部署コード)
  マクロの中止
 If 文の最後

 If IsNull([取引先名]) Then
  メッセージボックス (取引先名が登録されていません, はい, 警告, 未入力)
  コントロールの移動 (取引先コード)
  マクロの中止
 If 文の最後

 If IsNull([資材名]) Then
  メッセージボックス (資材名が登録されていません, はい, 警告, 未入力)
  コントロールの移動 (資材名)
  マクロの中止
 If 文の最後

 If IsNull([種別コード]) Or [種別コード]="" Then
  メッセージボックス (種別が登録されていません, はい, 警告, 未入力)
  コントロールの移動 (種別コード)
  マクロの中止
 If 文の最後

 If IsNull([単価]) Then
  メッセージボックス (単価が登録されていません, はい, 警告, 未入力)
  コントロールの移動 (単価)
  マクロの中止
 If 文の最後

 If IsNull([単位]) Then
  メッセージボックス (単位が登録されていません, はい, 警告, 未入力)
  コントロールの移動 (単位)
  マクロの中止
 If 文の最後

 If IsNull([登録日]) Then
  メッセージボックス (登録日が登録されていません, はい, 警告, 未入力)
  コントロールの移動 (登録日)
  マクロの中止
 If 文の最後

 警告音

 If MsgBox("編集したデータを更新してもよろしいですか?",4+32,"確認")=6 Then
  メッセージの設定 (いいえ)
  クエリを開く (Q60資材編集更新, データシート, 編集)
  メッセージボックス (編集データを更新しました, はい, なし, 更新)
  ウィンドウを閉じる ( , , 確認)
  再クエリ ()
  マクロの中止

 Else
  メッセージボックス (処理を中止しました, はい, なし, 中止)
  マクロの中止
 If 文の最後
サブマクロの最後

マクロの概要

項目 内容
必須項目チェック 登録者・所属部署・取引先名・資材名・種別・単価・単位・登録日を順にチェック(単価・単位は記載上2回チェックされているが動作への影響なし)
クエリを開く Q60資材編集更新(更新クエリ)を実行しT60資材Mを更新
ウィンドウを閉じる 更新完了後にフォームを閉じる

マクロの設置場所

項目 内容
フォーム F60資材編集
コントロール 編集更新ボタン
イベント クリック時

更新クエリ(Q60資材編集更新)

編集フォームの各コントロールの値でT60資材Mを更新します。IDを抽出条件にして対象レコードを1件に絞り込みます。

Q60資材編集更新 クエリデザインビュー(一部)

Q60資材編集更新 更新フィールド構成

更新対象フィールド 更新内容
ID 抽出条件:[Forms]![F60資材編集]![ID](更新はしない)
所属部署コード [Forms]![F60資材編集]![所属部署コード]
種別コード [Forms]![F60資材編集]![種別コード]
資材名 [Forms]![F60資材編集]![資材名]
仕様 [Forms]![F60資材編集]![仕様]
取引先コード [Forms]![F60資材編集]![取引先コード]
備考 [Forms]![F60資材編集]![備考]
単価 [Forms]![F60資材編集]![単価]
単位 [Forms]![F60資材編集]![単位]
最低発注数量 [Forms]![F60資材編集]![最低発注数量]
登録者コード [Forms]![F60資材編集]![登録者コード]
登録日 [Forms]![F60資材編集]![登録日]
在庫数 [Forms]![F60資材編集]![在庫数]
在庫更新日 [Forms]![F60資材編集]![在庫更新日]
在庫メモ [Forms]![F60資材編集]![在庫メモ]
ロット単価 [Forms]![F60資材編集]![ロット単価]
有効 [Forms]![F60資材編集]![有効]

元資材名フィールドはこの編集画面では更新対象外です。


ロット別単価登録ボタン

編集フォームのロット別単価登録ボタンです。フォーム・マクロの構成は新規登録ページと同じ仕組みのため、詳細は製品マスタの編集ページで解説しているロット別単価セクションをご覧ください。

ロット別単価登録 ポップアップフォーム

ロット単価登録解説ページ

関連記事

製品マスタの編集フォームは新規登録フォームと同じ非連結の設計思想で構成されています。製品マスタ基本情報フォームの編集ボタンから図番IDを引き継ぎ、DLookupで全フィールドを転記した上で編集・更新する仕組みです。テーブルに直結させない理由[…]

旧単価履歴・登録ボタン

旧単価の履歴確認と新規登録を行うボタンです。こちらもT60資材ロット旧単価テーブルを共有する構成で、製品マスタの旧単価登録の仕組みと同一のため、詳細は製品マスタの編集ページの該当セクションをご覧ください。

旧単価利例・登録 ポップアップフォーム

旧単価履歴・登録解説ページ

関連記事

製品マスタの編集フォームは新規登録フォームと同じ非連結の設計思想で構成されています。製品マスタ基本情報フォームの編集ボタンから図番IDを引き継ぎ、DLookupで全フィールドを転記した上で編集・更新する仕組みです。テーブルに直結させない理由[…]


まとめ

資材マスタの編集画面は、詳細ボタンからの遷移時にDLookupで14項目を一括転写し、更新時は同じくID一致の更新クエリで一括反映する非連結フォームの標準パターンです。ロット単価データの実在有無を開いた瞬間に赤ラベルで知らせる仕組みが、手動フラグだけに頼らない資材マスタ特有の工夫になっています。

 

本サイトではマクロを用いた構築手順を中心に紹介していますが、決してマクロを唯一の正解として推奨しているわけではありません。VBAが扱える環境であれば、より多彩で柔軟なプログラムが組めるVBAでの構築をむしろ推奨したいと考えています。

ここでマクロという選択肢を提示しているのは、VBAにハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。