従業員マスタの新規登録フォームの設計と実装を解説します。フリガナの自動変換・郵便番号からの住所入力支援・生年月日からの年齢自動計算など操作性を高める工夫と、未入力チェックから追加クエリによるテーブル登録までの一連のマクロをまとめています。
新規登録画面の構成
非連結フォームで構成されています。登録ボタン押下時に入力チェックを行い、追加クエリでテーブルにデータを書き込む設計です。
フォームビュー
概要
| 項目 | 内容 |
|---|---|
| 氏名 | 名字・名前を分けて入力。登録時に半角スペースで結合してテーブルに追加 |
| フリガナ | 自動入力後にマクロで半角カタカナに統一 |
| 略称 | マクロで半角カタカナ・記号に統一 |
| 郵便番号 | 住所入力支援ウィザードで都道府県・住所1を自動入力 |
| 生年月日 | 入力後に年齢を自動計算して表示 |
| 性別 | オプショングループで選択(1:男性・2:女性) |
| 雇用区分・所属部署・役職・血液型 | コンボボックスで選択。フォーカス時に自動で開く |
| 従業員コード | DMax関数で自動採番。編集不可・テキスト型で表示 |
| 権限 | オプショングループで選択。規定値は「なし」 |
| 登録ボタン | 未入力チェック→確認メッセージ→追加クエリ実行 |
| キャンセルボタン | 全コントロールを初期値に戻す |
| 閉じるボタン | フォームを閉じる(M99共通) |
新規登録をデザインビューで見る仕組み
デザインビュー
概要
| 項目 | 設定内容 |
|---|---|
| フォームのレコードソース | 空欄(非連結フォーム) |
| 氏名 | 名字・名前の2コントロール。登録時に結合してテーブルに追加 |
| フリガナ | ミョウジ・ナマエの2コントロール。ふりがな支援+半角変換マクロ |
| 年齢 | コントロールソースに計算式。生年月日から自動計算 |
| 従業員コード | DMax関数で自動採番。編集ロック・テキスト型で表示 |
| ID | 可視:いいえ(画面上は非表示) |
各コントロールの設定
氏名・フリガナ
氏名は名字と名前を別コントロールで入力します。ふりがな支援ウィザードでフリガナを自動入力した後、マクロで半角カタカナに統一します。
サブマクロ
- サブマクロのテキスト表示
-
サブマクロ:フリガナ名字 値の代入 アイテム = [ミョウジ] 式 = StrConv([ミョウジ],16) ← カタカナに変換 値の代入 アイテム = [ミョウジ] 式 = StrConv([ミョウジ],8) ← 半角に変換 マクロの中止 サブマクロの最後
マクロの解説
| 処理 | 内容 |
|---|---|
| StrConv( ,16) | 入力文字をカタカナに変換 |
| StrConv( ,8) | カタカナを半角に変換 |
※ナマエも同じサブマクロをコピーしてアイテムを [ナマエ] に変更するだけです。
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員新規 |
| コントロール | ミョウジ・ナマエ |
| イベント | 更新後処理 |
| 呼び出し元 | M01従業員 > サブマクロ:フリガナ名字 / フリガナ名前 |
略称・住所・電話番号
略称と住所・電話番号系のコントロールは、同じマクロをコピーしてコントロール名だけ変えて使用します。フィールドの用途に合わせて変換方向が異なります。
サブマクロ
- サブマクロのテキスト表示
-
サブマクロ:略称(住所1・住所2・各TELも同じ構成) 値の代入 アイテム = [略称] ← 各コントロール名に変更 式 = StrConv([略称],8) ← 半角に変換 マクロの中止 サブマクロの最後
マクロの解説
| 処理 | 内容 |
|---|---|
| StrConv( ,8) | 全角カタカナ・記号を半角に変換 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員新規 |
| コントロール | 略称・住所1・住所2・自宅TEL・携帯TEL・緊急連絡先・緊急時連絡TEL |
| イベント | 更新後処理 |
| 呼び出し元 | M01従業員 > サブマクロ:略称 / 住所1 など各コントロール名 |
各フィールドの変換方向
全角・半角の入力が統一されない場合を想定して全角・半角を統一するマクロを設置しています。
想定されるフォールド
| フィールド | 変換方向 | 目的 |
|---|---|---|
| 略称 | 半角統一 | 鈴木(健) → 鈴木(健) のように括弧などの記号を半角に揃える |
| 住所2 | 全角統一 | 住所1と表記を揃える |
| 自宅TEL | 半角統一 | 数字・ハイフンを半角に揃える |
| 携帯TEL | 半角統一 | 同上 |
| 緊急時連絡TEL | 半角統一 | 同上 |
| 緊急連絡先 | 全角統一 | 氏名系フィールドのため全角に揃える |
郵便番号の定型入力について
郵便番号フィールドには住所入力支援ウィザードを使用しています。数字を連続入力すると xxx-xxxx の形式でハイフンが自動付与され、入力確定後に都道府県・住所1が自動補完されます。ウィザードの設定方法は各自でご確認ください。
住所1のカーソル位置
郵便番号から住所が自動入力された後、住所1にカーソルが移動した際に末尾で待機させます。追加入力がそのまま末尾から始まるため、番地の入力がスムーズになります。
住所1には2つのイベントが設定されています。
① 更新後処理(全角統一)
サブマクロ
- サブマクロのテキスト表示
-
サブマクロ:住所1 値の代入 アイテム = [住所1] 式 = StrConv([住所1],8) マクロの中止 サブマクロの最後
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員新規 |
| コントロール | 住所1 |
| イベント | 更新後処理 |
| 呼び出し元 | M01従業員 > サブマクロ:住所1 |
② フォーカス取得時(カーソル末尾移動)
サブマクロ
- サブマクロのテキスト表示
-
サブマクロ:住所1セル If IsNull([住所1]) Then マクロの中止 Else 値の代入 アイテム = [住所1].[SelStart] 式 = Len([住所1]) マクロの中止 If文の最後 サブマクロの最後
マクロの解説
| 処理 | 内容 |
|---|---|
| IsNull チェック | 住所1が空の場合はカーソル移動の命令をスキップ |
| SelStart = Len | カーソルをテキスト末尾に移動 |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員新規 |
| コントロール | 住所1 |
| イベント | フォーカス取得時 |
| 呼び出し元 | M01従業員 > サブマクロ:住所1セル |
年齢の自動計算
生年月日から現在の年齢を自動計算します。誕生日前後で正確な年齢を返すようにIIf文で制御しています。
| 設定 | 内容 |
|---|---|
| コントロールソース | =IIf(Format(Date(),"mmdd")<Format([生年月日],"mmdd"), DateDiff("yyyy",[生年月日],Date())-1, DateDiff("yyyy",[生年月日],Date())) |
| 使用可能 | いいえ(編集不可) |
| 処理 | 内容 |
|---|---|
| Format比較 | 本日と生年月日の月日を比較 |
| 誕生日前 | DateDiffの結果から1を引く |
| 誕生日後 | DateDiffの結果をそのまま表示 |
従業員コードの自動採番
IDは数値型・従業員コードはテキスト型で管理します。DMax関数で現在の最大IDに1を加算して次の番号を自動採番します。
| コントロール | 設定内容 |
|---|---|
| ID | コントロールソース:=DMax("ID","T01従業員M")+1(最大IDに1加算) |
| ID | 可視:いいえ(画面上は非表示) |
| 従業員コード | コントロールソース:=Format([ID],"000")(IDを3桁テキストに変換) |
| 従業員コード | 編集ロック:はい(編集不可) |
自動でコンボボックスが開く設定
雇用区分・所属部署・役職・血液型はコンボボックスで選択します。フォーカス時に自動で開くよう設定しています。
マクロビルダーの新しいアクションリストから「プロシージャの実行」を選択して [コントロール名].Dropdown を記入[埋め込みマクロ]として設置されます。
| 項目 | 内容 |
|---|---|
| プロパティ | フォーカス取得時 |
| フォーカス取得時 | [コントロール名].Dropdown をマクロで実行 |
追加クエリの構成(Q01従業員新規追加)
フォームの各コントロールの値を T01従業員Mテーブル に追加する追加クエリです。
追加クエリ
概要
| 項目 | 内容 |
|---|---|
| クエリ名 | Q01従業員新規追加 |
| 種別 | 追加クエリ |
| 追加先テーブル | T01従業員M |
| 呼び出し元 | M01従業員 > サブマクロ:登録 |
追加クエリのフィールド式
| 式No. | フィールド式 | 追加先フィールド |
|---|---|---|
| 式1 | [Forms]![F01従業員新規]![従業員コード] |
従業員コード |
| 式2 | [Forms]![F01従業員新規]![名字] & " " & [Forms]![F01従業員新規]![名前] |
氏名 |
| 式3 | [Forms]![F01従業員新規]![ミョウジ] & " " & [Forms]![F01従業員新規]![ナマエ] |
フリガナ |
| 式4 | [Forms]![F01従業員新規]![略称] |
略称 |
| 式5 | [Forms]![F01従業員新規]![役職] |
役職 |
| 式6 | [Forms]![F01従業員新規]![携帯TEL] |
携帯TEL |
| 式7 | [Forms]![F01従業員新規]![自宅TEL] |
自宅TEL |
| 式8 | [Forms]![F01従業員新規]![性別] |
性別 |
| 式9 | [Forms]![F01従業員新規]![緊急連絡先] |
緊急連絡先 |
| 式10 | [Forms]![F01従業員新規]![緊急時連絡TEL] |
緊急時連絡TEL |
| 式11 | [Forms]![F01従業員新規]![郵便番号] |
郵便番号 |
| 式12 | [Forms]![F01従業員新規]![都道府県] |
都道府県 |
| 式13 | [Forms]![F01従業員新規]![住所1] |
住所1 |
| 式14 | [Forms]![F01従業員新規]![住所2] |
住所2 |
| 式15 | [Forms]![F01従業員新規]![保険証番号] |
保険証番号 |
| 式16 | [Forms]![F01従業員新規]![備考] |
備考 |
| 式17 | [Forms]![F01従業員新規]![入社日] |
入社日 |
| 式18 | [Forms]![F01従業員新規]![所属部署] |
所属部署 |
| 式19 | [Forms]![F01従業員新規]![メールアドレス] |
メールアドレス |
| 式20 | [Forms]![F01従業員新規]![生年月日] |
生年月日 |
| 式21 | [Forms]![F01従業員新規]![ログインパスワード] |
ログインパスワード |
| 式22 | [Forms]![F01従業員新規]![権限] |
権限 |
| 式23 | [Forms]![F01従業員新規]![血液型] |
血液型 |
| 式24 | [Forms]![F01従業員新規]![雇用区分] |
雇用区分 |
| 式25 | [Forms]![F01従業員新規]![退職日] |
退職日 |
| 式26 | [Forms]![F01従業員新規]![年間有休日数] |
年間有休日数 |
[Forms]![F01従業員新規]![フィールド名] の形式でフォーム上の値を参照し、T01従業員Mテーブルに1レコードを追加します。式2の氏名・式3のフリガナは名字と名前をスペースで結合してから1フィールドに格納します。フォーム上では分割入力・分割表示しつつ、テーブルには結合した状態で保存する設計です。
※フィールド名は重要ではないのでフィールド式に自動で割り当てられる 式1~ をそのまま使っています。
登録・キャンセルボタンのマクロ
登録ボタン
未入力チェック・確認メッセージ・追加クエリ実行・登録後の初期化を順番に処理します。
サブマクロ全体
- サブマクロのテキスト表示
-
サブマクロ:登録 If IsNull([名字]) Then メッセージボックス メッセージ 氏名が記入されていません 警告音 はい メッセージの種類 警告 メッセージタイトル 未記入 コントロールの移動(名字) マクロの中止 If文の最後 ※以降、必須コントロール全てに同じチェックを設定 If IsNull([携帯TEL]) Then メッセージボックス メッセージ 携帯TELが記入されていません。無い場合はハイフン(-)を登録してください。 警告音 はい メッセージの種類 警告 メッセージタイトル 未記入 コントロールの移動(携帯TEL) マクロの中止 If文の最後 ※全フィールドのチェック完了後↓ 警告音 If MsgBox("新規登録してもよろしいですか?",4+32,"確認")=6 Then メッセージの設定(いいえ) クエリを開く(Q01従業員新規追加, データシート, 編集) メッセージボックス(新規従業員を登録しました。, はい, なし, 登録) マクロの実行(01従業員.キャンセル,,) コントロールの移動(名字) 再クエリ() マクロの中止 Else メッセージボックス(登録を中止します, はい, なし, 中止) マクロの中止 If文の最後 サブマクロの最後
処理は2フェーズに分かれています。
サブマクロのフェーズ1:入力検証
マクロの解説
| 検証フィールド | 未入力時メッセージ | フォーカス移動先 |
|---|---|---|
| 名字・名前・ミョウジ・ナマエ | 氏名が記入されていません | 各フィールド |
| 略称 | 同上 | 略称 |
| 郵便番号・都道府県・住所1 | 同上 | 各フィールド |
| 自宅TEL | 同上 | 自宅TEL |
| 携帯TEL | 携帯TELが記入されていません。無い場合はハイフン(-)を登録してください。 | 携帯TEL |
| 生年月日・メールアドレス・性別 | 同上 | 各フィールド |
| 雇用区分・所属部署・役職 | 同上 | 各フィールド |
| 緊急連絡先・緊急時連絡TEL | 同上 | 各フィールド |
| 保険証番号・血液型・入社日 | 同上 | 各フィールド |
| 年間有休日数 | 同上 | 年間有休日数 |
サブマクロのフェーズ2:確認ダイアログ
マクロの解説
| 条件 | 処理 |
|---|---|
| MsgBoxで「はい」(戻り値=6) | クエリ実行→完了メッセージ→キャンセルマクロでフォームリセット→名字にフォーカス移動→再クエリ |
| 「いいえ」(Else) | 「登録を中止します」メッセージ→マクロ中止(入力内容は保持) |
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員新規 |
| コントロール | 登録ボタン |
| イベント | クリック時 |
| 呼び出し元 | M01従業員 > サブマクロ:登録 |
キャンセルボタン
入力途中でやり直す場合に全コントロールを初期値に戻します。登録完了後もこのサブマクロが呼び出され、フォームをリセットします。
サブマクロ全体
- サブマクロのテキスト表示
-
サブマクロ:キャンセル 値の代入([名字], Null) 値の代入([名前], Null) 値の代入([ミョウジ], Null) 値の代入([ナマエ], Null) 値の代入([略称], Null) 値の代入([郵便番号], Null) 値の代入([都道府県], Null) 値の代入([住所1], Null) 値の代入([住所2], Null) 値の代入([自宅TEL], Null) 値の代入([携帯TEL], Null) 値の代入([生年月日], Null) 値の代入([メールアドレス], Null) 値の代入([性別], Null) 値の代入([所属部署], Null) 値の代入([役職], Null) 値の代入([緊急連絡先], Null) 値の代入([緊急時連絡TEL], Null) 値の代入([保険証番号], Null) 値の代入([血液型], Null) 値の代入([入社日], Null) 値の代入([退職日], Null) 値の代入([備考], Null) 値の代入([ログインパスワード], Null) 値の代入([権限], 1) ← 規定値の1を返す 値の代入([雇用区分], Null) 値の代入([年間有休日数], Null) サブマクロの最後
マクロの解説
| 処理 | 内容 |
|---|---|
| 各コントロール = Null | 全入力欄を空欄に戻す |
| 権限 = 1 | 権限のみ規定値(なし)に戻す |
権限フィールドのみNullではなく 1 をセットします。権限は必須項目かつデフォルト値が決まっているため、空白にせず初期値を維持する設計です。
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員新規 |
| コントロール | キャンセルボタン |
| イベント | クリック時 |
| 呼び出し元 | M01従業員 > サブマクロ:キャンセル |
まとめ
新規登録フォームはフリガナ変換・住所自動入力・年齢計算など入力を補助する仕組みを随所に組み込んでいます。登録処理はすべてマクロで制御しており、未入力チェックから追加クエリの実行・登録後の初期化まで一連の流れが自動で完結します。各マクロはサブマクロとしてM01従業員マクロにまとめているため、後から見ても構造が把握しやすい設計にしています。
本サイトではマクロを用いた構築手順を中心に紹介していますが、決してマクロを唯一の正解として推奨しているわけではありません。VBAが扱える環境であれば、より多彩で柔軟なプログラムが組めるVBAでの構築をむしろ推奨したいと考えています。
ここでマクロという選択肢を提示しているのは、VBAにハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。