取引先マスタの編集フォームの設計と実装を解説します。フリガナ検索で対象取引先を呼び出し、DLookUpで全フィールドを表示した上で編集・更新する設計です。住所変更時の旧住所保存・配送先の追加登録・更新クエリによるテーブル更新までの一連のマクロをまとめています。
編集画面の構成
非連結フォームで構成されています。フリガナ検索コンボボックスで対象取引先を呼び出し、編集表示マクロでDLookUpにより全フィールドを表示します。訂正更新ボタン押下時に確認メッセージを経て更新クエリを実行します。
取引先マスタ編集フォームビュー
画面の概要
| 項目 | 内容 |
|---|---|
| フリガナ検索 | コンボボックスでフリガナを選択。取引先コードで対象者を特定して全フィールドを表示 |
| 取引区分 | オプショングループで選択(法人顧客・仕入先・顧客/仕入先・個人顧客・その他) |
| 取引先コード | 編集不可。検索で呼び出した取引先コードを表示 |
| 取引先名〜適格事業者番号 | 各フィールドを直接編集 |
| 旧住所として保存ボタン | 現在の住所を旧住所フィールドに追記保存 |
| 請求書先エリア | 住所コピーボタンで本社住所を一括転記。個別編集も可 |
| 配送先サブフォーム | F05取引先編集配送先サブ。配送先一覧を表示 |
| 配送先追加ボタン | 配送先新規登録フォームをポップアップで開く |
| 振込先エリア | 銀行コード〜口座名義を編集 |
| 旧住所 | 過去の住所履歴を表示・編集 |
| 訂正更新ボタン | 未表示チェック→確認メッセージ→更新クエリ実行 |
| キャンセルボタン | 全コントロールを初期値に戻す |
| このページを閉じるボタン | 編集フォームのみ閉じる |
| 取引先マスタを閉じるボタン | 取引先関連フォームを全て閉じる |
黒系の画面は編集中のサイン
このシステムでは編集フォームを黒系の配色で統一しています。画面を開いた瞬間に「既存データを編集している」と視覚で判断できる設計です。新規登録の青系と明確に異なる配色にすることで、誤操作の抑止にも働きます。配色ルールはシステム全体で共通のため、どのフォームを開いても同じ視覚的感覚で操作できます。
編集をデザインビューで見る仕組み
フォームの構造とプロパティ設定を確認します。
取引先マスタ編集フォームデザインビュー
デザインビューの概要
| 項目 | 設定内容 |
|---|---|
| フォーム名 | F05取引先編集 |
| レコードソース | 空欄(非連結フォーム) |
| フリガナ検索 | フォームヘッダーに配置。値集合ソースはT05取引先Mのフリガナ・略称・取引先コードを昇順で取得 |
| 配送先サブフォーム | F05取引先編集配送先サブを埋め込み |
| フォームフッター | 訂正更新・キャンセル・このページを閉じる・取引先マスタを閉じるボタンを配置 |
フリガナ検索コンボボックス
フリガナの一覧からフリガナを選択すると取引先コードを特定して編集表示マクロを呼び出し、全フィールドをDLookUpで表示します。同名取引先があっても取引先コードで一意に特定できる設計です。
取引先マスタ編集フリガナボックスクエリ フリガナ検索 値集合ソース
フリガナ検索 値集合ソースの構成
| フィールド | テーブル | 並べ替え | 内容 |
|---|---|---|---|
| フリガナ | T05取引先M | 昇順 | 検索コンボボックスに表示 |
| 略称 | T05取引先M | 取引先の識別用に併記 | |
| 取引先コード | T05取引先M | 編集表示マクロで取引先コードの特定に使用 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先編集 |
| コントロール | フリガナ検索(コンボボックス) |
| イベント | 更新後処理 |
| 呼び出し元 | M05取引先 > サブマクロ:編集表示 |
取引先コードで一意特定するフリガナ検索
フリガナ検索のコンボボックスはフリガナを表示しますが、裏側では取引先コードで対象レコードを特定しています。同名・同読みの取引先が複数存在しても取引先コードは一意のため、検索結果がブレることがありません。コンボボックスの値集合ソースにフリガナ・略称・取引先コードの3フィールドを持たせ、編集表示マクロでは取引先コードをキーにDLookUpを実行する設計です。
各コントロールの設定
編集表示マクロ
フリガナ検索で選択した取引先コードを起点にDLookUpで全フィールドを表示します。詳細フォームのリスト適用マクロと同じ構造で、編集フォーム用に参照先をF05取引先編集に変えたものです。
サブマクロ:編集表示
- サブマクロのテキスト表示
-
サブマクロ:編集表示 値の代入 ([Forms]![F05取引先編集]![取引先コード], [Forms]![F05取引先編集]![検索]) 値の代入 ([Forms]![F05取引先編集]![取引区分], DLookUp("取引区分","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![取引先名], DLookUp("取引先名","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![略称], DLookUp("略称","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![フリガナ], DLookUp("フリガナ","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![郵便番号], DLookUp("郵便番号","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![都道府県], DLookUp("都道府県","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![住所1], DLookUp("住所1","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![住所2], DLookUp("住所2","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![電話番号], DLookUp("電話番号","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![FAX], DLookUp("FAX","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![URL], DLookUp("URL","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![代表者], DLookUp("代表者","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![担当者], DLookUp("担当者","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![メモ], DLookUp("メモ","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![登録日], DLookUp("登録日","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![営業担当者], DLookUp("営業担当者","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![締め日], DLookUp("締め日","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![端数金額区分], DLookUp("端数金額区分","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![端数金額区分仕入], DLookUp("端数金額区分仕入","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![請求書郵便番号], DLookUp("請求書郵便番号","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![請求書都道府県], DLookUp("請求書都道府県","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![請求書住所1], DLookUp("請求書住所1","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![請求書住所2], DLookUp("請求書住所2","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![請求書部署], DLookUp("請求書部署","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![請求書電話番号], DLookUp("請求書電話番号","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![銀行コード], DLookUp("銀行コード","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![銀行名], DLookUp("銀行名","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![支店コード], DLookUp("支店コード","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![支店名], DLookUp("支店名","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![口座種別], DLookUp("口座種別","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![口座番号], DLookUp("口座番号","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![口座名義], DLookUp("口座名義","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![旧住所], DLookUp("旧住所","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![加工購入先表示], DLookUp("加工購入先表示","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![加工加工先表示], DLookUp("加工加工先表示","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 値の代入 ([Forms]![F05取引先編集]![金型メーカー表示], DLookUp("金型メーカー表示","T05取引先M","[取引先コード]=[Forms]![F05取引先編集]![取引先コード] ")) 再クエリ () マクロの中止 サブマクロの最後
マクロの概要
| ステップ | 処理 | 内容 |
|---|---|---|
| 1 | 値の代入(取引先コード) | 検索コンボボックスの取引先コードを取引先コードコントロールに転記 |
| 2〜 | 値の代入(全フィールド) | 取引先コードを条件にDLookUpで全フィールドを参照して表示 |
| 最終 | 再クエリ | 配送先サブフォームを最新状態に更新 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先編集 |
| コントロール | フリガナ検索(コンボボックス) |
| イベント | 更新後処理 |
| 呼び出し元 | M05取引先 > サブマクロ:編集表示 |
旧住所として保存ボタン
住所変更時に現在の住所を旧住所フィールドに追記保存します。旧住所が空欄の場合は新規追記、既に旧住所がある場合は既存の履歴に追記する2段階の設計です。
サブマクロ:編集旧住所マクロ
マクロの概要
| 条件 | 処理 | 内容 |
|---|---|---|
| 旧住所がNull(空欄) | 値の代入 | 現住所+日付を旧住所フィールドに新規書き込み |
| 旧住所に値あり | 値の代入 | 既存の旧住所に現住所+日付を追記 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先編集 |
| コントロール | 旧住所として保存ボタン |
| イベント | クリック時 |
| 呼び出し元 | M05取引先 > サブマクロ:編集旧住所 |
旧住所の自動追記設計
住所変更のたびに手動で旧住所フィールドに入力する必要がありません。旧住所として保存ボタンを押すと現在の住所と変更日(Date())が自動で旧住所フィールドに追記されます。旧住所が空欄の場合は新規書き込み、既に履歴がある場合は末尾に追記する2段階の設計のため、複数回の引っ越し履歴を1フィールドに蓄積していけます。
配送先追加ボタン
配送先新規登録フォームをポップアップで開き、現在表示中の取引先コードと取引先名を転記した状態で起動します。
サブマクロ:配送先開くマクロ
マクロの概要
| ステップ | 処理 | 内容 |
|---|---|---|
| 1 | フォームを開く | F05取引先配送先新規をポップアップで開く |
| 2 | 値の代入(取引先コード) | 編集フォームの取引先コードを配送先新規フォームに転記 |
| 3 | 値の代入(配送先取引先名) | 編集フォームの取引先名を配送先新規フォームに転記 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先編集 |
| コントロール | 配送先追加ボタン |
| イベント | クリック時 |
| 呼び出し元 | M05取引先 > サブマクロ:配送先開く |
訂正更新ボタンのマクロ
未表示チェック・確認メッセージ・更新クエリ実行・更新後の初期化を順番に処理します。
サブマクロ:編集更新マクロ
- サブマクロのテキスト表示
-
サブマクロ:編集更新 警告音 If IsNull([取引先コード]) Then メッセージボックス (訂正する取引先が表示されていません, はい, 警告, エラー) コントロールの移動 (検索) マクロの中止 If文の最後 If MsgBox("訂正・編集したデータを更新してもよろしいですか?",4+32,"確認")=6 Then メッセージの設定 (いいえ) クエリを開く クエリ名 Q05取引先編集更新 ビュー データシート データモード 編集 メッセージボックス (訂正・編集したデータを更新しました。, はい, なし, 完了) マクロの実行 マクロ名 M05取引先.編集キャンセル マクロの中止 Else メッセージボックス メッセージ 中止しました。 警告音 はい メッセージの種類 なし メッセージタイトル 中止 マクロの中止 If文の最後 サブマクロの最後
マクロの概要
処理は2フェーズに分かれています。
| フェーズ | 条件 | 処理 |
|---|---|---|
| フェーズ1 | 取引先コードがNull | エラーメッセージ→検索にフォーカス移動→中止 |
| フェーズ2 | MsgBoxで「はい」(戻り値=6) | Q05取引先編集更新を実行→完了メッセージ→編集キャンセルマクロでリセット |
| フェーズ2 | 「いいえ」(Else) | 中止メッセージ→入力内容を保持したままマクロ中止 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先編集 |
| コントロール | 訂正更新ボタン |
| イベント | クリック時 |
| 呼び出し元 | M05取引先 > サブマクロ:編集更新 |
Q05取引先編集更新の構成
編集フォームの各コントロールの値でT05取引先Mを更新する更新クエリです。抽出条件に取引先コードを指定することで対象レコードのみを更新します。
Q05取引先編集更新クエリデザインビュー(一部)
Q05取引先編集更新 クエリの概要
| 項目 | 内容 |
|---|---|
| クエリ名 | Q05取引先編集更新 |
| 種別 | 更新クエリ |
| 更新対象テーブル | T05取引先M |
| 抽出条件 | [Forms]![F05取引先編集]![取引先コード] |
Q05取引先編集更新 フィールド構成
| フィールド | レコードの更新 |
|---|---|
| 取引先名 | [Forms]![F05取引先編集]![取引先名] |
| 略称 | [Forms]![F05取引先編集]![略称] |
| フリガナ | [Forms]![F05取引先編集]![フリガナ] |
| 郵便番号 | [Forms]![F05取引先編集]![郵便番号] |
| 都道府県 | [Forms]![F05取引先編集]![都道府県] |
| 住所1 | [Forms]![F05取引先編集]![住所1] |
| 住所2 | [Forms]![F05取引先編集]![住所2] |
| 電話番号 | [Forms]![F05取引先編集]![電話番号] |
| FAX | [Forms]![F05取引先編集]![FAX] |
| URL | [Forms]![F05取引先編集]![URL] |
| 代表者 | [Forms]![F05取引先編集]![代表者] |
| 担当者 | [Forms]![F05取引先編集]![担当者] |
| 締め日 | [Forms]![F05取引先編集]![締め日] |
| 端数金額区分 | [Forms]![F05取引先編集]![端数金額区分] |
| 取引区分 | [Forms]![F05取引先編集]![取引区分] |
| 端数金額区分仕入 | [Forms]![F05取引先編集]![端数金額区分仕入] |
| 営業担当者 | [Forms]![F05取引先編集]![営業担当者] |
| メモ | [Forms]![F05取引先編集]![メモ] |
| 登録日 | [Forms]![F05取引先編集]![登録日] |
| 旧住所 | [Forms]![F05取引先編集]![旧住所] |
| 請求書郵便番号 | [Forms]![F05取引先編集]![請求書郵便番号] |
| 請求書都道府県 | [Forms]![F05取引先編集]![請求書都道府県] |
| 請求書住所1 | [Forms]![F05取引先編集]![請求書住所1] |
| 請求書住所2 | [Forms]![F05取引先編集]![請求書住所2] |
| 請求書部署 | [Forms]![F05取引先編集]![請求書部署] |
| 請求書電話番号 | [Forms]![F05取引先編集]![請求書電話番号] |
| 適格事業者番号 | [Forms]![F05取引先編集]![適格事業者番号] |
| 銀行コード | [Forms]![F05取引先編集]![銀行コード] |
| 銀行名 | [Forms]![F05取引先編集]![銀行名] |
| 支店コード | [Forms]![F05取引先編集]![支店コード] |
| 支店名 | [Forms]![F05取引先編集]![支店名] |
| 口座種別 | [Forms]![F05取引先編集]![口座種別] |
| 口座番号 | [Forms]![F05取引先編集]![口座番号] |
| 口座名義 | [Forms]![F05取引先編集]![口座名義] |
| 加工購入先表示 | [Forms]![F05取引先編集]![加工購入先表示] |
| 加工加工先表示 | [Forms]![F05取引先編集]![加工加工先表示] |
| 金型メーカー表示 | [Forms]![F05取引先編集]![金型メーカー表示] |
| 抽出条件(取引先コード) | [Forms]![F05取引先編集]![取引先コード] |
キャンセルボタンのマクロ
編集途中でやり直す場合に全コントロールを初期値に戻します。更新完了後もこのサブマクロが呼び出されフォームをリセットします。
サブマクロ:編集キャンセルマクロ
- サブマクロのテキスト表示
-
サブマクロ:編集キャンセル 値の代入 ([取引区分], 1) 値の代入 ([取引先コード], Null) 値の代入 ([取引先名], Null) 値の代入 ([略称], Null) 値の代入 ([フリガナ], Null) 値の代入 ([郵便番号], Null) 値の代入 ([都道府県], Null) 値の代入 ([住所1], Null) 値の代入 ([住所2], Null) 値の代入 ([電話番号], Null) 値の代入 ([FAX], Null) 値の代入 ([URL], Null) 値の代入 ([代表者], Null) 値の代入 ([担当者], Null) 値の代入 ([締め日], 6) 値の代入 ([端数金額区分], 1) 値の代入 ([端数金額区分仕入], 1) 値の代入 ([メモ], Null) 値の代入 ([営業担当者], Null) 値の代入 ([登録日], Date()) 値の代入 ([適格事業者番号], Null) 値の代入 ([請求書郵便番号], Null) 値の代入 ([請求書都道府県], Null) 値の代入 ([請求書住所1], Null) 値の代入 ([請求書住所2], Null) 値の代入 ([請求書部署], Null) 値の代入 ([請求書電話番号], Null) 値の代入 ([銀行コード], Null) 値の代入 ([銀行名], Null) 値の代入 ([支店コード], Null) 値の代入 ([支店名], Null) 値の代入 ([口座種別], Null) 値の代入 ([口座番号], Null) 値の代入 ([口座名義], Null) 値の代入 ([旧住所], Null) 値の代入 ([検索], Null) 値の代入 ([加工購入先表示], False) 値の代入 ([加工加工先表示], False) 値の代入 ([金型メーカー表示], False) 再クエリ () マクロの中止 サブマクロの最後
マクロの概要
| 処理 | 内容 |
|---|---|
| 各コントロール = Null | 全入力欄を空欄に戻す |
| 取引区分 = 1 | 規定値(法人顧客)に戻す |
| 締め日 = 6 | 規定値(末日)に戻す |
| 端数金額区分 = 1 | 規定値(四捨五入)に戻す |
| 端数金額区分仕入 = 1 | 規定値(四捨五入)に戻す |
| 加工購入先表示〜金型メーカー表示 = False | チェックボックスをオフに戻す |
| 検索 = Null | フリガナ検索コンボボックスをクリア |
| 再クエリ | 配送先サブフォームを更新 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先編集 |
| コントロール | キャンセルボタン |
| イベント | クリック時 |
| 呼び出し元 | M05取引先 > サブマクロ:編集キャンセル |
このページを閉じるボタン・取引先マスタを閉じるボタン
新規登録ページと同じマクロを流用しています。
取引先マスタの新規登録フォームの設計と実装を解説します。取引先コードの空き番号選択・住所コピーボタンによる請求先・配送先への転記・未入力チェックから2つの追加クエリによるテーブル登録までの一連のマクロをまとめています。 新[…]
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先編集 |
| コントロール | このページを閉じるボタン |
| イベント | クリック時 |
| 呼び出し元 | M99共通 > サブマクロ:閉じる |
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先編集 |
| コントロール | 取引先マスタを閉じるボタン |
| イベント | クリック時 |
| 呼び出し元 | M05取引先 > サブマクロ:取引先全て閉じる |
まとめ
取引先編集フォームはフリガナ検索による呼び出し・DLookUpによる全フィールド表示・更新クエリによるテーブル更新を一連の流れで処理します。旧住所の自動追記・配送先の追加登録・住所コピーなど編集作業を補助する仕組みも随所に組み込んでいます。各マクロはM05取引先にサブマクロとしてまとめているため、後から見ても構造が把握しやすい設計になっています。
本サイトではマクロを用いた構築手順を中心に紹介していますが、決してマクロを唯一の正解として推奨しているわけではありません。VBAが扱える環境であれば、より多彩で柔軟なプログラムが組めるVBAでの構築をむしろ推奨したいと考えています。
ここでマクロという選択肢を提示しているのは、VBAにハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。