Accessマクロで作る 製品マスタ「編集」フォームの作り方

製品マスタの編集フォームは新規登録フォームと同じ非連結の設計思想で構成されています。製品マスタ基本情報フォームの編集ボタンから図番IDを引き継ぎ、DLookupで全フィールドを転記した上で編集・更新する仕組みです。テーブルに直結させない理由には、複数ユーザーが同時に同じレコードを扱う際の排他モードを避ける狙いがあります。

このページでは以下のことを解説しています。

  • 非連結フォーム設計により、複数ユーザーが同じ図番を同時に開いても排他ロックが発生しない(製造現場での同時参照・編集を妨げない)
  • 図番IDを引き継いだ全フィールドの自動転記と、更新クエリによる一括反映
  • 関連部署(成形課〜営業課)・現品票区分・フォーキャスト・作業工程1〜16の編集
  • 黒系の配色による「編集中」の視覚的サイン(新規登録の青系と区別し誤操作を抑止)
  • ロット別単価の登録(数量に応じた単価設定、前〜/後〜/なしの排他選択)
  • 旧単価の履歴保存(現行単価のワンクリックコピーで変更前の単価を記録)
  • 仕入先マスタ登録エリアからの仕入先追加(新規登録と同じ仕組み)

製品マスタ編集フォームを開く方法

製品マスタ基本情報フォームのフッターにある編集ボタンを押すと、F10製品編集フォームが起動します。フリガナ検索のような呼び出しコンボボックスは持たず、表示中の図番IDをそのまま引き継いで全フィールドを転記する設計です。

製品マスタ基本情報フォームのフッター(編集ボタンから開く)

編集ボタンのマクロ

製品マスタ基本情報フォームの編集ボタンに設定されたマクロです。F10製品編集をフォームビューで開き、図番IDをキーにT10製品MからDLookupで全フィールドを転記します。作業工程・工程担当も含めて全コントロールがこの1サブマクロで一括転記されます。

サブマクロ:編集開く

サブマクロのテキスト表示
サブマクロ:編集開く

  フォームを開く (F10製品編集, フォーム ビュー, , , , 標準)

  値の代入
    アイテム = [Forms]![F10製品編集]![図番ID]
    式    = [Forms]![F00メインメニュー]![図番ID]

  値の代入
    アイテム = [Forms]![F10製品編集]![図番]
    式    = DLookUp("図番","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")

  値の代入 ([Forms]![F10製品編集]![取引先コード], DLookUp("取引先コード","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![品名], DLookUp("品名","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![単価], DLookUp("単価","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![成形課], DLookUp("成形課","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![加工課], DLookUp("加工課","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![印刷課], DLookUp("印刷課","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![品証課], DLookUp("品証課","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![業務課], DLookUp("業務課","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![営業課], DLookUp("営業課","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![現品票区分], DLookUp("現品票区分","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![成形フォーキャスト], DLookUp("成形フォーキャスト","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![加工フォーキャスト], DLookUp("加工フォーキャスト","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![重要事項], DLookUp("重要事項","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![備考], DLookUp("備考","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![営業メモ], DLookUp("営業メモ","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![登録日], DLookUp("登録日","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))

  値の代入 ([Forms]![F10製品編集]![工程1], DLookUp("工程1","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  ~
  値の代入 ([Forms]![F10製品編集]![工程16], DLookUp("工程16","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))

  値の代入 ([Forms]![F10製品編集]![工程作業者1], DLookUp("工程作業者1","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  ~
  値の代入 ([Forms]![F10製品編集]![工程作業者16], DLookUp("工程作業者16","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))

  値の代入 ([Forms]![F10製品編集]![在庫数], DLookUp("在庫数","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![在庫更新日], DLookUp("在庫更新日","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![登録者コード], DLookUp("登録者コード","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![工程群コード], DLookUp("工程群コード","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![業種コード], DLookUp("業種コード","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))
  値の代入 ([Forms]![F10製品編集]![納期設定], DLookUp("納期設定","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]"))

  再クエリ ()
  マクロの中止
サブマクロの最後

マクロの概要

アクション 内容
フォームを開く F10製品編集をフォームビューで起動
値の代入(図番ID) F00メインメニューの図番IDを引き継ぎ
値の代入(基本情報) 図番・取引先コード・品名・単価・各課フラグ・現品票区分・フォーキャストなどをDLookupで取得
値の代入(工程1〜16・工程作業者1〜16) 作業工程サブフォーム相当の項目もDLookupで取得
再クエリ フォーム全体の表示を更新

サブマクロ:編集開くの設置場所

設置場所 ボタン名
製品マスタ基本情報フォーム フッター 編集

製品マスタ編集フォームの画面構成

F10製品編集 ポップアップフォームビュー

F10製品編集の画面の概要

項目 内容
図番ID F00メインメニューから引き継ぎ(非表示)
図番・取引先・品名・単価 T10製品MからDLookupで取得して編集可能
関連部署(成形課〜営業課) チェックボックスで関連部署を編集
現品票区分 オプショングループで成形/加工/印刷を選択
フォーキャスト 成形・加工のチェックボックス
作業工程・工程担当 1〜16行を非連結コンボボックスで編集
仕入先マスタ登録 新規登録フォームと同じ仕組みで仕入先を追加・編集
仕入先情報サブフォーム 登録済み仕入先の一覧表示
編集更新ボタン 図番IDをキーに更新クエリを実行
閉じるボタン フォームを閉じる

黒系の画面は編集中のサイン

このシステムでは編集フォームを黒系の配色で統一しています。画面を開いた瞬間に「既存データを編集している」と視覚で判断できる設計です。新規登録の青系と明確に異なる配色にすることで、誤操作の抑止にも働きます。配色ルールはシステム全体で共通のため、どのフォームを開いても同じ視覚的感覚で操作できます。

色調・配色ページ

関連記事

Accessのフォームにおける「色」は、単なるデザイン要素ではありません。オペレーターが今どこにいて何をすべきかを直感的に伝えるための「重要なナビゲーション」だと考えています。 画面を開いた瞬間に「新規登録」か「編集」かを色で感じ取り、無[…]


デザインビューで見る編集フォームの仕組み

製品マスタの編集フォームは図番IDをキーにしたDLookupで全フィールドを転記し、更新は更新クエリで一括反映する非連結フォームです。テーブルやクエリに直接結びつけた連結フォームにしない理由は、複数ユーザーが同時に同じレコードを開いた場合の排他モードを避けるためです。

連結フォームでレコードを編集中、別のユーザーが同じレコードを開こうとすると、Accessは編集中のレコードをロックし、もう一方のユーザーは読み取り専用でしか開けなくなります。製造現場では複数の課が同じ図番の製品マスタを同時に参照・編集する場面が珍しくないため、この排他ロックが業務のボトルネックになりかねません。

非連結フォームであれば、フォーム自体はテーブルと直結していないため排他ロックが発生しません。複数ユーザーが同じ図番の編集フォームを同時に開いて作業しても、それぞれが独立して入力を進められます。更新時のみ更新クエリで一括反映するため、最後に保存した内容が反映される形にはなりますが、開いている間の操作がブロックされることはありません。

F10製品編集 ポップアップフォームデザインビュー

デザインビューの概要

項目 設定内容
フォーム名 F10製品編集
レコードソース 空欄(非連結フォーム)
配色 黒系(編集中のサイン)
作業工程・工程担当 非連結コンボボックス(1〜16)
仕入先マスタ登録 新規登録フォームと同じ仕組み

仕入先マスタ登録

編集フォーム上の仕入先マスタ登録エリアは、新規登録フォームと同じ仕組みです。仕入先を選択し関連工程(成形・加工・印刷・材料)をチェックして登録ボタンを押すと、仕入先情報サブフォームに一覧表示されます。詳しい仕組みは新規登録ページを参照してください。

仕入れ先マスタ登録

関連記事

製品マスタの新規登録は管理者のみが実行できます。基本情報・営業課情報・工程情報をこのフォームで一括登録し、関連する課のテーブルに図番IDを自動追加することで各課担当者が課別情報を登録するベースが完成します。仕入先製品マスタへの登録もこのフォ[…]


訂正更新ボタンのマクロ

確認ダイアログを経てQ10製品編集更新を実行し、T10製品Mを更新します。完了後はM10製品.表示マクロで基本情報フォームの表示を最新化し、編集フォームを閉じます。

サブマクロ:編集更新

サブマクロのテキスト表示
サブマクロ:編集更新

  警告音

  If MsgBox("訂正・編集したデータを更新してもよろしいですか?",4+32,"確認")=6 Then

    メッセージの設定(いいえ)
    クエリを開く (Q10製品編集更新, データシート, 編集)
    メッセージボックス (訂正・編集したデータを更新しました。, はい, なし, 完了)
    マクロの実行 (M10製品.表示)
    ウィンドウを閉じる (フォーム, F10製品編集, 確認)
    マクロの中止

  Else

    メッセージボックス (処理を中止します, はい, なし, 中止)
    マクロの中止

  If 文の最後
サブマクロの最後

マクロの概要

アクション 内容
警告音 更新前に警告音で注意を促す
MsgBox 確認 更新前に確認ダイアログを表示
クエリを開く Q10製品編集更新でT10製品Mを更新
マクロの実行 M10製品.表示で基本情報フォームの表示を最新化
ウィンドウを閉じる F10製品編集を閉じて基本情報フォームに戻る

マクロの設置場所

設置場所 ボタン名
F10製品編集 フッター 訂正更新

Q10製品編集更新クエリの構成

F10製品編集フォームの入力内容で、T10製品Mを図番IDをキーに一括更新するクエリです。基本情報から作業工程・工程担当まで、編集フォーム上の全フィールドがこの1クエリで更新されます。

Q10製品編集更新クエリ(一部)

Q10製品編集更新の構成(更新クエリ)

項目 内容
クエリの種類 更新クエリ
更新対象テーブル T10製品M
抽出条件 [Forms]![F10製品編集]![図番ID]
更新フィールド 図番ID・登録日・取引先コード・備考・重要事項・品名・単価・工程1〜16・工程作業者1〜16・業務課・営業課・成形フォーキャスト・加工フォーキャスト・現品票区分・在庫数・在庫更新日・登録者コード・業種コード・工程群コード・納期設定・成形課・加工課・印刷課・品証課

ロット別単価ボタン

数量によって単価が変わる製品のロット別単価を管理するポップアップフォームです。編集フォームの「ロット別単価」ボタンを押すと、図番IDと図番を引き継いだ状態でF10製品ロット単価登録が起動します。

F10製品ロット単価登録 ポップアップフォームビュー

F10製品ロット単価登録 ポップアップデザインビュー

F10製品ロット単価登録の画面の概要

項目 内容
図番・図番ID 編集フォームから引き継ぎ(表示のみ)
サブフォーム 登録済みロット単価の一覧(ロット別=Trueで絞り込み・Val([ロット])昇順)
ロット数 数量の起点を入力
単価 ロットに対応する単価を入力
登録日 自動でDate()をセット
備考 任意入力
前〜/ロット〜/〜なし いずれか1つを選択(ロット記入判定で排他チェック)
新規登録ボタン 入力エリアを表示して新規登録モードに切り替え
閉じるボタン フォームを閉じる

ロット別単価ボタンのマクロ

編集フォームのロット別単価ボタンに設定されたマクロです。図番IDのNullチェックで対象が選択されているかを確認し、F10製品ロット単価登録を起動してから図番ID・図番をセット、初期状態では入力エリアを非表示にします。

サブマクロ:ロット単価編集開く

サブマクロのテキスト表示
サブマクロ:ロット単価編集開く

  If IsNull([図番]) Then
    メッセージボックス
      メッセージ  ロット単価を登録する図番が選択されていません
      警告音    はい
      メッセージの種類  警告
      メッセージ タイトル  未選択
    マクロの中止
  If 文の最後

  フォームを開く (F10製品ロット単価登録, フォーム ビュー, , , , 標準)

  値の代入
    アイテム = [Forms]![F10製品ロット単価登録]![図番ID]
    式    = [Forms]![F10製品編集]![図番ID]

  値の代入
    アイテム = [Forms]![F10製品ロット単価登録]![図番]
    式    = [Forms]![F10製品編集]![図番]

  値の代入
    アイテム = [Forms]![F10製品ロット単価登録]![ロット単価追加].[Visible]
    式    = False

  マクロの実行 (M10製品新規.ロット単価登録)
  再クエリ ()
  マクロの中止
サブマクロの最後

マクロの概要

アクション 内容
IsNull([図番]) 図番のNullチェックで対象未選択を検知
フォームを開く F10製品ロット単価登録をフォームビューで起動
値の代入(図番ID・図番) 編集フォームから図番ID・図番を引き継ぎ
値の代入(ロット単価追加.Visible=False) 入力エリアを初期状態では非表示に設定
マクロの実行 M10製品新規.ロット単価登録で入力エリアの表示を制御
再クエリ サブフォームの表示を更新

マクロの設置場所

設置場所 ボタン名
F10製品編集 詳細セクション ロット別単価

新規登録ボタンのマクロ

新規登録ボタンを押すと入力エリアのコントロールを表示状態に切り替え、ロット数フィールドにフォーカスを移動します。

サブマクロ:ロット単価登録

サブマクロのテキスト表示
サブマクロ:ロット単価登録

  値の代入 ([Forms]![F10製品ロット単価登録]![ロット].[Visible], True)
  値の代入 ([Forms]![F10製品ロット単価登録]![単価].[Visible], True)
  値の代入 ([Forms]![F10製品ロット単価登録]![登録日].[Visible], True)
  値の代入 ([Forms]![F10製品ロット単価登録]![登録日], Date())
  値の代入 ([Forms]![F10製品ロット単価登録]![備考].[Visible], True)
  値の代入 ([Forms]![F10製品ロット単価登録]![前〜].[Visible], True)
  値の代入 ([Forms]![F10製品ロット単価登録]![後〜].[Visible], True)
  値の代入 ([Forms]![F10製品ロット単価登録]![なし].[Visible], True)
  値の代入 ([Forms]![F10製品ロット単価登録]![ロットから].[Visible], True)
  値の代入 ([Forms]![F10製品ロット単価登録]![新規登録].[Visible], True)
  コントロールの移動 (ロット)
  マクロの中止
サブマクロの最後

マクロの概要

アクション 内容
値の代入(各コントロール.Visible=True) ロット・単価・登録日・備考・前〜/後〜/なし・ロットから・新規登録ボタンを表示
値の代入(登録日=Date()) 登録日に本日の日付をセット
コントロールの移動 ロット数フィールドにフォーカスを移動

マクロの設置場所

設置場所 ボタン名
F10製品ロット単価登録 フッター 新規登録

ロット単価追加ボタンのマクロ

ロット数・単価・登録日の必須チェックとロット記入判定(前〜/後〜/なしのいずれか1つのみ)を確認してからQ10製品ロット単価登録追加クエリでT10製品Mロット旧単価に追加します。

サブマクロ:ロット単価追加

サブマクロのテキスト表示
サブマクロ:ロット単価追加

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

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

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

  If [ロット記入判定] <> 1 Then
    メッセージボックス (ロットの「前〜」「後〜」「〜なし」が入力されていないか2つ以上入力されています, はい, 警告, 未入力)
    マクロの中止
  If 文の最後

  If IsNull([図番]) Then
    メッセージボックス (ロット単価を登録する図番が指定されていません, はい, 警告, 不明)
    マクロの中止
  If 文の最後

  警告音

  If MsgBox("ロット単価を登録してよしいですか?",4+32,"確認")=6 Then

    メッセージの設定(いいえ)
    クエリを開く (Q10製品ロット単価登録追加, データシート, 編集)

    If MsgBox("「" + [Forms]![F10製品ロット単価登録]![図番] + "」のロット単価を追加しました。") Then
    If 文の最後

    マクロの実行 (M10製品新規.ロット単価クリア)
    再クエリ ()
    マクロの中止

  Else

    メッセージボックス (中止しました, はい, 警告, 中止)
    マクロの中止

  If 文の最後
サブマクロの最後

マクロの概要

アクション 内容
IsNull チェック ロット数・単価・登録日の必須チェック
ロット記入判定チェック 前〜/後〜/なしのいずれか1つのみ選択されているか確認
IsNull([図番]) 図番の指定確認
クエリを開く Q10製品ロット単価登録追加でT10製品Mロット旧単価に追加
マクロの実行 M10製品新規.ロット単価クリアで入力エリアをリセット
再クエリ サブフォームの表示を更新

マクロの設置場所

設置場所 ボタン名
F10製品ロット単価登録 詳細セクション ロット単価追加

クリアボタンのマクロ

入力済みの全フィールドをリセットします。ロット・単価・備考をNullに、登録日をDate()に、前〜/後〜/なしをFalseに戻してロット数フィールドにフォーカスを移動します。

サブマクロ:ロット単価クリア

サブマクロのテキスト表示
サブマクロ:ロット単価クリア

  値の代入 ([ロット], Null)
  値の代入 ([単価], Null)
  値の代入 ([登録日], Date())
  値の代入 ([備考], Null)
  値の代入 ([前〜], False)
  値の代入 ([後〜], False)
  値の代入 ([なし], False)
  コントロールの移動  ロット
  マクロの中止
サブマクロの最後

マクロの概要

アクション 内容
値の代入(ロット・単価・備考=Null) 入力欄をクリア
値の代入(登録日=Date()) 登録日を本日の日付にリセット
値の代入(前〜/後〜/なし=False) チェックボックスをオフに戻す
コントロールの移動 ロット数フィールドにフォーカスを移動

マクロの設置場所

設置場所 ボタン名
F10製品ロット単価登録 フッター クリア(M10製品新規.ロット単価クリアから呼び出し)

登録クエリの構成

Q10製品ロット単価登録追加はT10製品Mロット旧単価テーブルへの追加クエリです。図番ID・登録日・単価・備考・ロット別フラグ(True)・前〜/後〜/ロット数を一括で追加します。

Q10製品ロット単価登録追加クエリ

Q10製品ロット単価登録追加クエリの構成

項目 内容
クエリの種類 追加クエリ
追加先テーブル T10製品Mロット旧単価
追加フィールド 図番ID・登録日・単価・備考・ロット別(True)・前〜・後〜・ロット

旧単価ボタン

単価変更時に変更前の単価を履歴として保管するポップアップフォームです。編集フォームの「旧単価」ボタンを押すと、図番ID・図番・登録日(本日の日付)をセットした状態でF10製品旧単価編集が起動します。

F10製品旧単価編集 ポップアップフォームビュー

F10製品旧単価編集 ポップアップデザインビュー

F10製品旧単価編集の画面の概要

項目 内容
図番 編集フォームから引き継ぎ(表示のみ)
図番ID 編集フォームから引き継ぎ(非表示)
サブフォーム 登録済み旧単価の履歴一覧(旧単価=Trueで絞り込み・登録日降順)
旧単価 手入力または現行単価コピーで入力
登録日 自動でDate()をセット
備考 任意入力
現行単価コピーボタン 編集フォームの単価を旧単価フィールドに転記
旧単価へ追加ボタン Q10製品旧単価編集追加でT10製品Mロット旧単価に追加
閉じるボタン フォームを閉じる

旧単価ボタンのマクロ

編集フォームの旧単価ボタンに設定されたマクロです。図番IDのNullチェックで対象が選択されているかを確認し、F10製品旧単価編集を起動して図番ID・図番・登録日をセットします。

サブマクロ:旧単価開く

サブマクロのテキスト表示
サブマクロ:旧単価開く

  If IsNull([図番]) Then
    メッセージボックス (旧単価を登録する図番が選択されていません, はい, 警告, 未選択)
    マクロの中止
  If 文の最後

  フォームを開く (F10製品旧単価編集, フォーム ビュー, , , , 標準)

  値の代入
    アイテム = [Forms]![F10製品旧単価編集]![図番ID]
    式    = [Forms]![F10製品編集]![図番ID]

  値の代入
    アイテム = [Forms]![F10製品旧単価編集]![図番]
    式    = [Forms]![F10製品編集]![図番]

  値の代入
    アイテム = [Forms]![F10製品旧単価編集]![登録日]
    式    = Date()

  再クエリ ()
  マクロの中止
サブマクロの最後

マクロの概要

アクション 内容
IsNull([図番]) 図番のNullチェックで対象未選択を検知
フォームを開く F10製品旧単価編集をフォームビューで起動
値の代入(図番ID・図番) 編集フォームから図番ID・図番を引き継ぎ
値の代入(登録日=Date()) 登録日に本日の日付をセット
再クエリ サブフォームの表示を更新

マクロの設置場所

設置場所 ボタン名
F10製品編集 詳細セクション 旧単価

現行単価コピーボタンのマクロ

編集フォームに表示されている現在の単価を旧単価フィールドに転記します。単価変更前に旧単価として記録する際の手入力を省略できます。

サブマクロ:旧単価コピー

サブマクロのテキスト表示
サブマクロ:旧単価コピー

  値の代入
    アイテム = [Forms]![F10製品旧単価編集]![単価]
    式    = [Forms]![F10製品編集]![単価]

  マクロの中止
サブマクロの最後

マクロの概要

アクション 内容
値の代入(単価) 編集フォームの単価を旧単価フィールドに転記

マクロの設置場所

設置場所 ボタン名
F10製品旧単価編集 詳細セクション 現行単価コピー

旧単価へ追加ボタンのマクロ

単価・登録日の必須チェックを確認してからQ10製品旧単価編集追加クエリでT10製品Mロット旧単価に追加します。登録完了後はクリアマクロで入力エリアをリセットします。

サブマクロ:旧単価登録

サブマクロのテキスト表示
サブマクロ:旧単価登録

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

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

  警告音

  If MsgBox("旧単価を登録してよしいですか?",4+32,"確認")=6 Then

    メッセージの設定(いいえ)
    クエリを開く (Q10製品旧単価編集追加, データシート, 編集)

    If MsgBox("「" + [Forms]![F10製品旧単価編集]![図番] + "」の旧単価を追加しました。") Then
    If 文の最後

    マクロの実行 (M10製品編集.旧単価クリア)
    再クエリ ()
    マクロの中止

  Else

    メッセージボックス (中止しました, はい, 警告, 中止)
    マクロの中止

  If 文の最後
サブマクロの最後

マクロの概要

アクション 内容
IsNull チェック 単価・登録日の必須チェック
クエリを開く Q10製品旧単価編集追加でT10製品Mロット旧単価に追加
マクロの実行 M10製品編集.旧単価クリアで入力エリアをリセット
再クエリ サブフォームの表示を更新

マクロの設置場所

設置場所 ボタン名
F10製品旧単価編集 詳細セクション 旧単価へ追加

クリアボタンのマクロ

入力済みの単価・登録日・備考をNullにリセットします。

サブマクロ:旧単価クリア

サブマクロのテキスト表示
サブマクロ:旧単価クリア

  値の代入 ([単価], Null)
  値の代入 ([登録日], Null)
  値の代入 ([備考], Null)
  マクロの中止
サブマクロの最後

マクロの概要

アクション 内容
値の代入(単価・登録日・備考=Null) 入力欄をクリア

マクロの設置場所

設置場所 ボタン名
F10製品旧単価編集 詳細セクション クリア(M10製品編集.旧単価クリアから呼び出し)

登録クエリの構成

Q10製品旧単価編集追加はT10製品Mロット旧単価テーブルへの追加クエリです。図番ID・登録日・単価・備考・旧単価フラグ(True)を一括で追加します。

Q10製品旧単価編集追加クエリ

Q10製品旧単価編集追加の構成

項目 内容
クエリの種類 追加クエリ
追加先テーブル T10製品Mロット旧単価
追加フィールド 図番ID・登録日・単価・備考・旧単価(True)

ロット別単価と旧単価は性質が異なるデータですが、このシステムでは同じT10製品Mロット旧単価テーブルに保管しています。ロット別フラグと旧単価フラグの2つのフラグフィールドで種別を区別しており、サブフォームの表示クエリでそれぞれのフラグを抽出条件に指定することで、同じテーブルから用途に応じたデータを取り出しています。

テーブルを分けずにフラグで管理することで、単価関連データの検索・集計・バックアップをひとまとめに扱えます。将来的に「ロット別かつ旧単価でもある」といった複合条件への対応も、フラグの組み合わせで柔軟に拡張できます。

まとめ

製品マスタの編集フォームは新規登録フォームと同じ非連結の設計思想を踏襲し、図番IDをキーにしたDLookupでの転記、更新クエリでの一括反映という流れで構成されています。テーブルに直結させない設計により、複数ユーザーが同じ図番を同時に開いても排他モードによるブロックが発生しません。作業工程・工程担当・仕入先マスタ登録まで含めて1つの編集フォームに集約することで、図番ごとの情報を漏れなく見直せる構成になっています。

 

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

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