取引先マスタの新規登録フォームの設計と実装を解説します。取引先コードの空き番号選択・住所コピーボタンによる請求先・配送先への転記・未入力チェックから2つの追加クエリによるテーブル登録までの一連のマクロをまとめています。
新規登録画面の構成
非連結フォームで構成されています。登録ボタン押下時に入力チェックを行い、2つの追加クエリでT05取引先MとT05取引先M配送先にデータを書き込む設計です。
新規登録フォーム
薄黄色のコントロールは未入力チェックが入るので未登録禁止
画面の概要
| 項目 | 内容 |
|---|---|
| 取引区分 | オプショングループで法人顧客・仕入先・顧客/仕入先・個人顧客・その他を選択 |
| 取引先コード | 空きコードボタンでポップアップフォームを開き未使用番号を選択して転記 |
| 取引先名(正式名) | 取引先の正式名称 |
| 略称 | 社内通称。マクロで半角統一 |
| フリガナ | 自動入力後にマクロで半角カタカナに統一 |
| 郵便番号 | 住所入力支援ウィザードで都道府県・住所1を自動入力 |
| 電話番号・FAX | マクロで半角統一 |
| URL・メモ | テキスト入力 |
| 締め日 | オプショングループで5日・10日・15日・20日・25日・末日を選択 |
| 端数金額区分・端数金額区分仕入 | オプショングループで四捨五入・切り捨て・切り上げを選択 |
| 登録日 | 起動時に本日日付を自動セット |
| 請求書先エリア | 住所コピーボタンで本社住所を一括転記。個別入力も可 |
| 配送先エリア | 住所コピーボタンで本社住所を一括転記。個別入力も可 |
| 振込先エリア | 銀行コード・銀行名・支店コード・支店名・口座種別・口座番号・口座名義 |
| 登録ボタン | 未入力チェック→確認メッセージ→2つの追加クエリ実行 |
| キャンセルボタン | 全コントロールを初期値に戻す |
| このページを閉じるボタン | 新規登録フォームを閉じる |
| 取引先マスタを閉じるボタン | リストフォームごと閉じる |
新規登録をデザインビューで見る仕組み
フォームの構造とプロパティ設定を確認します。
新規登録フォーム デザインビュー
デザインビューの概要
| 項目 | 設定内容 |
|---|---|
| フォームのレコードソース | 空欄(非連結フォーム) |
| 取引区分 | オプショングループ。詳細部に配置 |
| 取引先コード | テキストボックス。編集ロック:いいえ(空きコードボタンで転記) |
| 請求書先エリア | 住所コピーボタンを右上に配置 |
| 配送先エリア | 住所コピーボタンを右上に配置 |
| 振込先エリア | 銀行検索ボタンを配置 |
| 登録日 | コントロールソース:Date()で本日日付を自動表示 |
空きコードフォームの構成
取引先コードの未使用番号を一覧表示するポップアップフォームです。あらかじめ1〜30,000の連番を格納した”連番”テーブル(命名ルール対象外)を用意しておき、取引先MとクエリでJOINすることで取引先マスタに存在しない連番だけを抽出して表示します。管理者が番号帯の運用ルールに従って番号を選び「適用」ボタンで新規登録フォームに転記します。
新規登録空き番号フォーム
新規登録空き番号デザイン
Q05取引先コード空き番号 クエリの構成
連番テーブルと取引先Mを外部結合し、取引先コードがNullの連番(未使用番号)だけを抽出するクエリです。
新規登録空コードクエリ
Q05取引先コード空き番号 フィールド構成
| フィールド | テーブル | 並べ替え | 抽出条件 | 内容 |
|---|---|---|---|---|
| 連番:Format([連番数値],”0000″) | Q連番数値 | 連番数値を4桁ゼロ埋めで表示 | ||
| ID | Q連番数値 | 昇順 | ||
| 取引先コード | T05取引先M | Is Null | 取引先マスタに存在しない連番のみ抽出 |
空きコード・空きコード適用マクロ
サブマクロ:空コード・空きコード適用マクロ
- サブマクロのテキスト表示
-
サブマクロ:空きコード フォームを開く (F05取引先コード空き番号, フォームビュー, , , , 標準) マクロの中止 サブマクロの最後 サブマクロ:空きコード適用 値の代入 アイテム =[Forms]![F05取引先新規]![取引先コード] 式 =[Forms]![F05取引先コード空き番号]![連番] ウィンドウを閉じる オブジェクトの種類 フォーム オブジェクト名 F05取引先コード空き番号 オブジェクトの保存 確認 コントロールの移動 コントロール名 取引先名 マクロの中止 サブマクロの最後
マクロの概要
| サブマクロ | 処理 | 内容 |
|---|---|---|
| 空きコード | フォームを開く | F05取引先コード空き番号をポップアップで開く |
| 空きコード適用 | 値の代入 | 空き番号フォームで選択した連番を新規登録フォームの取引先コードに転記 |
| 空きコード適用 | ウィンドウを閉じる | 空き番号フォームを閉じる |
| 空きコード適用 | コントロールの移動 | 取引先名にフォーカスを移動 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先新規 / F05取引先コード空き番号 |
| コントロール | 空きコードボタン / 適用ボタン |
| イベント | クリック時 |
| 呼び出し元 | M05取引先 > サブマクロ:空きコード / 空きコード適用 |
各コントロールの設定
フリガナ
ふりがな支援ウィザードで自動入力後、マクロで半角カタカナに統一します。StrConv(,16)でカタカナ化した後にStrConv(,8)で半角に統一する2段階構成です。従業員マスタと同じ設計のため詳細は以下を参照してください。
従業員マスタの新規登録フォームの設計と実装を解説します。フリガナの自動変換・郵便番号からの住所入力支援・生年月日からの年齢自動計算など操作性を高める工夫と、未入力チェックから追加クエリによるテーブル登録までの一連のマクロをまとめています。 […]
半角・全角統一マクロ
各フィールドの入力値を用途に合わせて半角または全角に統一します。同じ構造のサブマクロをコントロール名だけ変えて使い回しています。
新規登録半角全角マクロ 半角全角統一マクロ
- サブマクロのテキスト表示
-
サブマクロ:住所1 値の代入 アイテム =[住所1] 式 =StrConv([住所1],8) マクロの中止 サブマクロの最後 サブマクロ:住所2 (同構造・アイテムと式を住所2に変更) サブマクロ:略称 (同構造・アイテムと式を略称に変更) サブマクロ:取引先名 (同構造・アイテムと式を取引先名に変更) サブマクロ:フリガナ (同構造・アイテムと式をフリガナに変更) サブマクロ:電話番号 (同構造・アイテムと式を電話番号に変更) サブマクロ:FAX (同構造・アイテムと式をFAXに変更) サブマクロ:URL (同構造・アイテムと式をURLに変更) サブマクロ:メモ (同構造・アイテムと式をメモに変更)
各フィールドの変換方向
各フィールドの用途に合わせて変換方向が異なります。
| フィールド | 変換方向 | 目的 |
|---|---|---|
| 取引先名 | 全角統一 | 正式名称のため全角に揃える |
| 略称 | 半角統一 | 記号・カタカナを半角に揃える |
| フリガナ | 半角統一 | 半角カタカナに統一 |
| 住所1・住所2 | 半角統一 | 数字・記号を半角に揃える |
| 電話番号・FAX | 半角統一 | 数字・ハイフンを半角に揃える |
| URL | 半角統一 | 半角英数字に揃える |
| メモ | 全角統一 | 文章系フィールドのため全角に揃える |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先新規 |
| コントロール | 各フィールド |
| イベント | 更新後処理 |
| 呼び出し元 | M05取引先 > 各サブマクロ |
住所1のカーソル末尾移動
郵便番号から住所が自動入力された後、住所1にフォーカスが移動した際にカーソルを末尾で待機させます。番地の追記がそのまま末尾から始まるため入力の流れが途切れません。
サブマクロ:住所1セル
- サブマクロのテキスト表示
-
サブマクロ:住所1セル If IsNull([住所1]) Then マクロの中止 Else 値の代入 アイテム =[住所1].[SelStart] 式 =Len([住所1]) マクロの中止 If文の最後 サブマクロの最後
マクロの概要
| 処理 | 内容 |
|---|---|
| IsNullチェック | 住所1が空の場合はカーソル移動をスキップ |
| SelStart = Len | カーソルをテキスト末尾に移動 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先新規 |
| コントロール | 住所1 |
| イベント | フォーカス取得時 |
| 呼び出し元 | M05取引先 > サブマクロ:住所1セル |
請求書先住所コピーボタン
本社住所を請求書先エリアに1クリックで転記します。郵便番号・都道府県・住所1・住所2・取引先名・電話番号を一括コピーし、フォーカスを請求書部署に移動します。
サブマクロ:請求書コピー
マクロの概要
| ステップ | 処理 | 内容 |
|---|---|---|
| 1〜6 | 値の代入 | 本社住所6項目を請求書先エリアに一括転記 |
| 7 | コントロールの移動 | 請求書部署にフォーカスを移動 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先新規 |
| コントロール | 請求書先エリアの住所コピーボタン |
| イベント | クリック時 |
| 呼び出し元 | M05取引先 > サブマクロ:請求先コピー |
住所コピーボタンで3エリアの入力を一瞬で完了
新規登録時は本社住所・請求書先・配送先の3エリアにそれぞれ住所を入力する必要があります。多くの場合、初回登録時は3エリアとも同じ住所になります。請求書先エリアと配送先エリアそれぞれに住所コピーボタンを設置することで、郵便番号・都道府県・住所1・住所2・取引先名・電話番号の6項目を1クリックで転記できます。コピー後に異なる部分だけ上書きすればよいため、入力工数の削減と転記ミスの防止を同時に解決します。
配送先住所コピーボタン
本社住所を配送先エリアに1クリックで転記します。新規登録時の配送先は未入力禁止のため、本社住所と同じ場合はこのボタンで素早く入力を完了できます。
サブマクロ:配送先コピー
マクロの概要
| ステップ | 処理 | 内容 |
|---|---|---|
| 1〜6 | 値の代入 | 本社住所6項目を配送先エリアに一括転記 |
| 7 | コントロールの移動 | 配送先部署にフォーカスを移動 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先新規 |
| コントロール | 配送先エリアの住所コピーボタン |
| イベント | クリック時 |
| 呼び出し元 | M05取引先 > サブマクロ:配送先コピー |
追加クエリの構成
登録ボタン押下時にT05取引先MとT05取引先M配送先の2テーブルに同時書き込みします。
クエリ:Q05取引先新規追加
フォームの各コントロールの値をT05取引先Mに追加する追加クエリです。
Q05取引先新規追加 クエリデザインビュー
クエリ:Q05取引先新規追加 フィールド構成
[Forms]![F05取引先新規]![フィールド名]の形式でフォーム上の値を参照し、T05取引先Mに1レコードを追加します。全41フィールドを追加します。
| 式No. | フィールド式 | 追加先フィールド |
|---|---|---|
| 式1 | [Forms]![F05取引先新規]![取引先コード] | 取引先コード |
| 式2 | [Forms]![F05取引先新規]![取引先名] | 取引先名 |
| 式3 | [Forms]![F05取引先新規]![略称] | 略称 |
| 式4 | [Forms]![F05取引先新規]![フリガナ] | フリガナ |
| 式5 | [Forms]![F05取引先新規]![郵便番号] | 郵便番号 |
| 式6 | [Forms]![F05取引先新規]![都道府県] | 都道府県 |
| 式7 | [Forms]![F05取引先新規]![住所1] | 住所1 |
| 式8 | [Forms]![F05取引先新規]![住所2] | 住所2 |
| 式9 | [Forms]![F05取引先新規]![電話番号] | 電話番号 |
| 式10 | [Forms]![F05取引先新規]![FAX] | FAX |
| 式11〜 | 以降同形式で全フィールドを追加 |
クエリ:Q05取引先新規配送先追加
フォームの配送先エリアの値をT05取引先M配送先に追加する追加クエリです。登録ボタン押下時にQ05取引先新規追加と同時に実行されます。
Q05取引先新規配送先追加 クエリデザインビュー
クエリ:Q05取引先新規配送先追加 フィールド構成
[Forms]![F05取引先新規]![フィールド名]の形式でフォーム上の値を参照し、T05取引先M配送先に1レコードを追加します。式28〜式33はQ05取引先新規追加クエリからコピペしたため式の数字が整列していません。
| 式No. | フィールド式 | 追加先フィールド |
|---|---|---|
| 式28 | [Forms]![F05取引先新規]![配送先郵便番号] | 配送先郵便番号 |
| 式29 | [Forms]![F05取引先新規]![配送先都道府県] | 配送先都道府県 |
| 式30 | [Forms]![F05取引先新規]![配送先住所1] | 配送先住所1 |
| 式31 | [Forms]![F05取引先新規]![配送先住所2] | 配送先住所2 |
| 式32 | [Forms]![F05取引先新規]![配送先部署] | 配送先部署 |
| 式33 | [Forms]![F05取引先新規]![配送先電話番号] | 配送先電話番号 |
| 式1 | [Forms]![F05取引先新規]![取引先コード] | 取引先コード |
| 式2 | [Forms]![F05取引先新規]![配送先取引先名] | 配送先取引先名 |
| 式3 | -1 | デフォルト(True固定。新規登録時は1件目がデフォルト) |
| 式4 | Date() | 登録日 |
登録・キャンセルボタンのマクロ
登録ボタン
未入力チェック・確認メッセージ・2つの追加クエリ実行・登録後の初期化を順番に処理します。処理は2フェーズに分かれています。
サブマクロ:新規登録
サブマクロのフェーズ1:入力検証
未入力のフィールドがある場合は警告メッセージを表示して該当フィールドにフォーカスを移動し、マクロを中止します。
マクロの解説
| 検証フィールド | 未入力時メッセージ | フォーカス移動先 |
|---|---|---|
| 取引区分 | 取引区分が選択されていません | 取引区分 |
| 取引先コード | 未記入 | 取引先コード |
| 取引先名 | 未記入 | 取引先名 |
| 略称 | 未記入 | 略称 |
| フリガナ | 未記入 | フリガナ |
| 郵便番号 | 未記入 | 郵便番号 |
| 都道府県 | 未記入 | 都道府県 |
| 住所1 | 未記入 | 住所1 |
| 電話番号 | 未記入 | 電話番号 |
| FAX | 未記入 | FAX |
| 登録日 | 未記入 | 登録日 |
| 請求書郵便番号 | 未記入 | 請求書郵便番号 |
| 請求書取引先名 | 未記入 | 請求書取引先名 |
| 配送先郵便番号 | 未記入 | 配送先郵便番号 |
| 配送先取引先名 | 未記入 | 配送先取引先名 |
サブマクロのフェーズ2:確認ダイアログ
全チェックを通過後に確認メッセージを表示します。
マクロの解説
| 条件 | 処理 |
|---|---|
| MsgBoxで「はい」(戻り値=6) | Q05取引先新規追加を実行 → Q05取引先新規配送先追加を実行 → 完了メッセージ → 新規キャンセルマクロでフォームリセット → 取引区分にフォーカス移動 → 再クエリ |
| 「いいえ」(Else) | 入力内容を保持したままマクロ中止 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先新規 |
| コントロール | 登録ボタン |
| イベント | クリック時 |
| 呼び出し元 | M05取引先 > サブマクロ:新規登録 |
登録と同時に配送先テーブルにも書き込む2クエリ設計
登録ボタンを1回押すだけでT05取引先MとT05取引先M配送先の2テーブルに同時書き込みします。配送先は新規登録時に未入力禁止の設計のため、登録と同時に必ず1件目の配送先レコードが生成されます。デフォルトフラグは-1(True)固定で書き込まれるため、登録直後から受注入力フォームでデフォルト配送先として機能します。フォームを1回操作するだけで2テーブルの整合性が保たれる設計です。
キャンセルボタン
入力途中でやり直す場合に全コントロールを初期値に戻します。登録完了後もこのサブマクロが呼び出されフォームをリセットします。
サブマクロ:新規キャンセル
- サブマクロのテキスト表示
-
サブマクロ:新規キャンセル 値の代入 ([取引区分], Null) 値の代入 ([取引先コード], 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) 値の代入 ([配送先住所1], Null) 値の代入 ([配送先住所2], Null) 値の代入 ([配送先部署], Null) 値の代入 ([配送先電話番号], Null) 値の代入 ([銀行コード], Null) 値の代入 ([銀行名], Null) 値の代入 ([支店コード], Null) 値の代入 ([支店名], Null) 値の代入 ([口座種別], Null) 値の代入 ([口座番号], Null) 値の代入 ([口座名義], Null) 値の代入 ([請求書取引先名], Null) 値の代入 ([配送先取引先名], Null) マクロの中止 サブマクロの最後
マクロの概要
| 処理 | 内容 |
|---|---|
| 各コントロール = Null | 全入力欄を空欄に戻す |
| 締め日 = 6 | 規定値(末日)に戻す |
| 端数金額区分 = 1 | 規定値(四捨五入)に戻す |
| 端数金額区分仕入 = 1 | 規定値(四捨五入)に戻す |
| 登録日 = Date() | 本日日付を再セット |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先新規 |
| コントロール | キャンセルボタン |
| イベント | クリック時 |
| 呼び出し元 | M05取引先 > サブマクロ:新規キャンセル |
このページを閉じるボタン・取引先マスタを閉じるボタン
新規登録フォームには2種類の閉じるボタンを設置しています。このページを閉じるボタンは新規登録フォームのみを閉じてリスト画面に戻ります。取引先マスタを閉じるボタンは取引先関連フォームをすべて閉じてメインメニューに戻ります。編集フォームなど他のフォームでも同じマクロを流用しているため、どの画面が開いた状態でも一括で閉じられる設計です。
サブマクロ:取引先全て閉じる
マクロの概要
| ボタン | 処理 | 内容 |
|---|---|---|
| このページを閉じる | ウィンドウを閉じる | 新規登録フォームのみ閉じてリストに戻る |
| 取引先マスタを閉じる | ウィンドウを閉じる×4 | 取引先関連フォームを全て順番に閉じる |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先新規 |
| コントロール | このページを閉じるボタン |
| イベント | クリック時 |
| 呼び出し元 | M99共通 > サブマクロ:閉じる |
| 項目 | 内容 |
|---|---|
| フォーム | F05取引先新規 |
| コントロール | 取引先マスタを閉じるボタン |
| イベント | クリック時 |
| 呼び出し元 | M05取引先 > サブマクロ:取引先全て閉じる |
まとめ
取引先マスタ新規登録フォームは空きコード選択・住所コピー・半角全角統一など入力を補助する仕組みを随所に組み込んでいます。登録処理は未入力チェックから2つの追加クエリの同時実行・登録後の初期化まで一連の流れがマクロで自動完結します。各マクロはM05取引先にサブマクロとしてまとめているため、後から見ても構造が把握しやすい設計になっています。
本サイトではマクロを用いた構築手順を中心に紹介していますが、決してマクロを唯一の正解として推奨しているわけではありません。VBAが扱える環境であれば、より多彩で柔軟なプログラムが組めるVBAでの構築をむしろ推奨したいと考えています。
ここでマクロという選択肢を提示しているのは、VBAにハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。