データベースと聞くと、つい「検索窓に文字を打ち込んで1件ずつ呼び出す」という手間を想像しがちですが、実務で本当に欲しいのは全体をふわっと見渡せる「一覧の安心感」です。誰がどこにいるかをスクロールで直感的に探し、在籍者と退職者をワンタッチで切り替える。さらに画面の隅で従業員数・男女比・平均年齢がそっと教えてくれる。単票フォームにはない「一覧から始まる利便性」を大切にした設計のヒントをシンプルに整理しています。
従業員マスタリスト画面の構成
パスワード認証を経てメインメニューから起動します。在籍者と退職者の切り替え・従業員検索・詳細表示・新規登録・編集をこの画面から一括して操作できます。
フォームビュー
画面の概要
| 項目 | 内容 |
|---|---|
| 人数・男性・女性・平均年齢 | フォームヘッダーに常時表示。選択切り替えと連動して自動更新 |
| 選択 | オプショングループで既存従業員・退職者を切り替え。リストと検索コンボボックスが連動して切り替わる |
| 従業員検索 | コンボボックスで対象者を絞り込み。再検索ボタンで初期状態に戻す |
| リスト(サブフォーム) | 従業員コード・氏名・フリガナ・住所・各種連絡先など主要情報を2段組みで表示 |
| 詳細ボタン | 選択行の全情報を編集フォームにポップアップ表示 |
| 新規登録ボタン | 新規登録フォームを開く |
| 編集ボタン | 編集フォームを開く。検索で絞り込んだ状態なら該当者を直接表示 |
| 閉じるボタン | フォームを閉じる |
メインメニューからの起動
従業員マスタには氏名・住所・給与単価などの機密情報が含まれるため、ログイン権限による制御に加えてフォームを開く直前にパスワードを要求する設計にしています。パスワード認証の詳細な実装方法は以下の記事をご参照ください。
関連記事![]() |
従業員マスタを開くための2重のログインパスワードで閲覧管理
従業員マスタには氏名や住所、給与単価などの機密情報が含まれます。Accessで運用する場合、ログイン権限による制御はもちろんですが、実務では「管理者がログインしたまま離席した瞬間」の物理的なリスクも無視できません。 |
InputBox("メッセージ文")="パスワード" の1行を条件式に組み込むだけで入力窓が表示され、正誤判定まで完結します。フォームを1つ作る手間を関数1行で代替できる点が地味に効いています。デザインビューで見る仕組み
デザインビュー
デザインビューの概要
| 項目 | 設定内容 |
|---|---|
| レコードソース | 空欄(非連結フォーム) |
| 人数・男性・女性・平均年齢 | フォームヘッダーに配置。サブフォームのクエリを参照して集計 |
| 選択 | オプショングループ。規定値1(既存従業員) |
| 従業員検索 | コンボボックス。編集フォームの検索コンボボックスをコピー流用 |
| サブフォーム | F01従業員リストサブを埋め込み |
| フォームフッター | 新規登録・編集・閉じるボタンを配置 |
Q01従業員リストサブの構成
サブフォームのレコードソースになるクエリです。T01従業員MとT02従業員所属部署の2テーブルをリレーションして構成します。表示フィールドの加工・絞り込み条件・勤続年数の計算もすべてこのクエリで処理します。
クエリデザインビュー
クエリの概要
| 項目 | 内容 |
|---|---|
| クエリ名 | Q01従業員リストサブ |
| 種別 | 選択クエリ |
| テーブル | T01従業員M + T02従業員所属部署(リレーション) |
フィールド構成
| フィールド | テーブル | 並べ替え | 抽出条件 | 内容 |
|---|---|---|---|---|
| 従業員コード | T01従業員M | 昇順 | Like “” & [Forms]![F01従業員リスト]![検索] & ““ | 検索コンボボックスと連動。未入力時は全件表示 |
| 氏名 | T01従業員M | |||
| フリガナ | T01従業員M | |||
| 略称 | T01従業員M | |||
| 役職 | T01従業員M | |||
| 携帯TEL | T01従業員M | |||
| 自宅TEL | T01従業員M | |||
| 性別 | T01従業員M | |||
| 男女:IIf([性別]=1,”男”,”女”) | — | 性別コードを男・女のテキストに変換 | ||
| 緊急連絡先 | T01従業員M | |||
| 緊急時連絡TEL | T01従業員M | |||
| 郵便番号 | T01従業員M | |||
| 都道府県 | T01従業員M | |||
| 住所:[住所1] & ” ” & [住所2] | — | 住所1・住所2を結合して1フィールドに表示 | ||
| 保険証番号 | T01従業員M | |||
| 備考 | T01従業員M | |||
| 入社日 | T01従業員M | |||
| 退職日 | T01従業員M | |||
| 所属部署 | T01従業員M | |||
| 所属略称 | T02従業員所属部署 | 所属部署テーブルから社内通称を参照 | ||
| メールアドレス | T01従業員M | |||
| 生年月日 | T01従業員M | |||
| 年齢:IIf(Format(Date(),”mmdd”)<Format([生年月日],”mmdd”),DateDiff(“yyyy”,[生年月日],Date())-1,DateDiff(“yyyy”,[生年月日],Date())) | — | 誕生日前後で正確な年齢を計算 | ||
| ログインパスワード | T01従業員M | |||
| 権限 | T01従業員M | |||
| 血液型 | T01従業員M | |||
| 選択:IIf(IsNull([退職日]),1,2) | — | [Forms]![F01従業員リスト]![選択] | 退職日の有無で1・2を返し選択オプショングループと連動 | |
| ID | T01従業員M | カレント行色変えに使用 | ||
| 勤続月:IIf([入社日] Is Null,””,IIf([退職日] Is Null,DateDiff(“m”,[入社日],Date())+1,DateDiff(“m”,[入社日],[退職日])+1)) | — | 勤続年数計算の中間値 | ||
| 勤続年数:IIf([入社日] Is Null,””,[勤続月]\12 & “年” & [勤続月] Mod 12 & “カ月”) | — | 勤続月をもとに年・月で表示 |
各コントロールの設定
選択オプショングループ
既存従業員・退職者を切り替えるオプショングループです。切り替えと同時に再クエリが実行され、サブフォームと従業員検索コンボボックスの表示が連動して切り替わります。
サブマクロ:再クエリ
選択オプショングループの更新後処理に設定するマクロです。よく使うアクションのためM99共通マクロに納めています。
- サブマクロのテキスト表示
-
サブマクロ:再クエリ 再クエリ コントロール名 (指定なし) マクロの中止 サブマクロの最後
選択オプショングループの「更新後処理」にこのサブマクロが紐づいています。コントロール名を指定せずに再クエリを実行するため、フォーム内のすべてのクエリが一括で最新状態に更新されます。
マクロの解説
| 処理 | 内容 |
|---|---|
| 再クエリ(コントロール名なし) | フォーム内の全クエリを一括更新。従業員検索・サブフォーム両方が切り替わる |
マクロの設置場所
選択オプショングループの更新後処理にマクロを設置します。
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員リスト |
| コントロール | 選択(オプショングループ) |
| イベント | 更新後処理 |
| 呼び出し元 | M99共通 > サブマクロ:再クエリ |
従業員検索コンボボックス
既存従業員・退職者の選択からコンボボックスに表示される候補者が切り替わります。
コンボボックスのプロパティ
値集合ソース欄に埋め込みクエリを作成します
概要
| フィールド | 条件 | 機能 |
|---|---|---|
| フリガナ | 昇順の並び替え | フリガナ順 |
| 選択:IIf(IsNull([退職日]),1,2) | [Forms]![F01従業員リスト]![選択] | 選択フィールドを参照して既存者・退職者を抽出 |
マクロの設置場所
従業員検索コンボボックスの更新後処理に99共通の再クエリマクロを設置します。
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員リスト |
| コントロール | 従業員検索(コンボボックス) |
| イベント | 更新後処理 |
| 呼び出し元 | M99共通 > サブマクロ:再クエリ |
人数・男性・女性・平均年齢
フォームヘッダーに常時表示するカウント・集計コントロールです。サブフォームのレコードソース(Q01従業員リストサブ)を参照して計算します。選択オプショングループの切り替えと連動して自動更新されます。
コントロールソースの設定
| コントロール | コントロールソース | 書式設定 |
|---|---|---|
| 人数 | =DCount(“*”,”Q01従業員リストサブ”) | &” 人” |
| 男性 | =DCount("性別","Q01従業員リストサブ","性別=1") |
&”人” |
| 女性 | =DCount("性別","Q01従業員リストサブ","性別=2") |
&”人” |
| 平均年齢 | =DAvg("年齢","Q01従業員リストサブ") |
#,##0歳(小数点以下1桁) |
| 式 | 内容 |
|---|---|
| 人数 | サブフォームの件数コントロール(=Count([ID]))の値を参照 |
| 男性・女性 | DCount関数でQ01従業員リストサブの性別フィールドを条件付きカウント |
| 平均年齢 | DAvg関数でQ01従業員リストサブの年齢フィールドを平均計算 |
カレント行の色変え
選択中の行の背景色が変わり、どの行を操作しているかが一目でわかります。条件付き書式と行色マクロの組み合わせで実現しています。
設定の仕組み
| 要素 | 設定内容 |
|---|---|
| 行色コントロール | フォームヘッダーに非表示で設置。コントロールソース空欄・可視:いいえ |
| IDコントロール | 詳細部に非表示で設置。可視:いいえ |
| 条件付き書式① | フォーカスのあるフィールド → 背景色を指定色に設定 |
| 条件付き書式② | 式:[行色]=[ID] → 背景色を指定色に設定 |
サブマクロ:行色
レコード移動時に実行するマクロです。よく使うアクションのためM99共通マクロに納めています。
- サブマクロのテキスト表示
-
サブマクロ:行色 値の代入 アイテム = [行色] 式 = [ID] マクロの中止 サブマクロの最後
F01従業員リストフォームの「レコード移動時」にこのサブマクロが紐づいています。IDの値を行色コントロールにコピーすることで、条件付き書式②の [行色]=[ID] が成立し、カレント行の背景色が変わります。
| 処理 | 内容 |
|---|---|
| 値の代入 | IDの値を行色コントロールにコピー。条件付き書式の条件が成立してカレント行の色が変わる |
マクロの設置場所
F01従業員リストフォームのレコード移動時にマクロを設置します。
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員リスト |
| コントロール | フォーム全体 |
| イベント | レコード移動時 |
| 呼び出し元 | M99共通 > サブマクロ:行色 |
| 関連記事 |
一覧画面では、横一行のデータが多いため、視線が迷子になりがちです。
|
サブフォームの構成(F01従業員リストサブ)
Q01従業員リストサブを元にフォームウィザードで作成します。情報量が多いためコントロールを2段組みにしたレイアウトに仕上げています。
主なプロパティ設定
| プロパティ | 設定値 | 理由 |
|---|---|---|
| 標題 | 従業員リストサブ | |
| 移動ボタン | いいえ | |
| コントロールボックス | いいえ | |
| 閉じるボタン | いいえ | |
| 追加の許可 | いいえ | |
| レコード移動時 | M99共通.行色 | カレント行の色変えマクロ |
詳細部のプロパティ設定
| プロパティ | 設定値 | 理由 |
|---|---|---|
| 背景色 | 背景1, 暗め5% | データ未入力時の白色のまぶしさを軽減 |
| 代替背景色 | 背景1 | ゼブラ表示をなくして背景色を統一 |
各コントロールの共通プロパティ
| プロパティ | 設定値 |
|---|---|
| 高さ | 0.6cm |
| 背景色 | 背景1, 暗め5% |
| フォント名 | メイリオ |
| フォントサイズ | 9 |
| 編集ロック | はい |
件数コントロールの設定
サブフォームに非表示で設置し、メインフォームの人数コントロールから参照します。
| 項目 | 設定内容 |
|---|---|
| コントロール名 | 件数 |
| コントロールソース | =Count([ID]) |
| 可視 | いいえ |
各ボタンのマクロ
詳細ボタン
リストで選択中の行の全情報を編集フォームにポップアップ表示します。ボタン名は「詳細」ではなく「明細」としています。
コラム:ボタン名に「詳細」は使えない Accessのフォームには「詳細」セクションが存在するため、コントロール名に「詳細」を付けると予約語と衝突してはじかれます。同じ機能を持つボタン名として「明細」を採用しました。フォームを作り始めたときにハマりやすい落とし穴のひとつです。
サブマクロ:詳細開く
詳細(明細)ボタンのクリック時に実行するマクロです。
- サブマクロのテキスト表示
-
サブマクロ:詳細開く フォームを開く(F01従業員編集, フォームビュー, , , , 標準) 値の代入 アイテム = [Forms]![F01従業員編集]![選択] 式 = [Forms]![F01従業員リスト]![選択] 値の代入 アイテム = [Forms]![F01従業員編集]![検索] 式 = [Forms]![F01従業員リスト]![F01従業員リストサブ]![従業員コード] マクロの実行(M01従業員.編集表示) マクロの中止 サブマクロの最後
マクロの解説
| ステップ | 処理 | 内容 |
|---|---|---|
| 1 | フォームを開く | F01従業員編集をフォームビューで開く |
| 2 | 値の代入(選択) | リストの選択値を編集フォームの選択コントロールに転記 |
| 3 | 値の代入(検索) | サブフォームの従業員コードを編集フォームの検索コントロールに転記 |
| 4 | マクロの実行 | M01従業員.編集表示を呼び出して全フィールドを表示>>>編集表示マクロはこちら |
詳細ボタンの「クリック時」にこのサブマクロが紐づいています。編集フォームを開いた後、リストフォームの選択値と従業員コードを転記し、編集表示マクロ(M01従業員.編集表示)を呼び出して対象者の全情報を表示します。編集表示マクロは編集フォームで作成したものをそのまま流用しています。>>>編集表示マクロはこちら
マクロの設置場所
詳細(明細)ボタンのクリック時にマクロを設置します。
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員リストサブ |
| コントロール | 明細ボタン |
| イベント | クリック時 |
| 呼び出し元 | M01従業員 > サブマクロ:詳細開く |
新規登録ボタン
新規登録フォームをポップアップで開きます。
サブマクロ:新規登録開く
新規登録ボタンのクリック時に実行するマクロです。
- サブマクロのテキスト表示
-
サブマクロ:新規登録開く フォームを開く(F01従業員新規, フォームビュー, , , , 標準) マクロの中止 サブマクロの最後
新規登録ボタンの「クリック時」にこのサブマクロが紐づいています。F01従業員新規フォームをフォームビューで開くだけのシンプルな構成です。
マクロの解説
| 処理 | 内容 |
|---|---|
| フォームを開く | F01従業員新規をフォームビューで開く |
マクロの設置場所
新規登録ボタンのクリック時にマクロを設置します。
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員リスト |
| コントロール | 新規登録ボタン |
| イベント | クリック時 |
| 呼び出し元 | M01従業員 > サブマクロ:新規登録開く |
編集ボタン
編集フォームをポップアップで開きます。
サブマクロ:編集開く
編集ボタンのクリック時に実行するマクロです。
- サブマクロのテキスト表示
-
サブマクロ:編集開く If IsNull([Forms]![F01従業員リスト]![検索]) Then フォームを開く(F01従業員編集, フォームビュー, , , , 標準) マクロの中止 Else フォームを開く(F01従業員編集, フォームビュー, , , , 標準) 値の代入 アイテム = [Forms]![F01従業員編集]![検索] 式 = [Forms]![F01従業員リスト]![検索] マクロの実行(M01従業員.編集表示) マクロの中止 If文の最後 サブマクロの最後
編集ボタンの「クリック時」にこのサブマクロが紐づいています。検索コンボボックスがNullかどうかで処理が分岐します。
マクロの解説
| 条件 | 処理 |
|---|---|
| 検索がNull(空欄) | 空の編集フォームを開く。編集フォーム上で対象者を検索 |
| 検索に値あり | 編集フォームを開き検索値を転記→編集表示マクロで該当者を表示>>>編集表示マクロはこちら |
編集表示マクロは編集フォームで作成したものをそのまま流用しています。>>>編集表示マクロはこちら
マクロの設置場所
編集ボタンのクリック時にマクロを設置します。
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員リスト |
| コントロール | 編集ボタン |
| イベント | クリック時 |
| 呼び出し元 | M01従業員 > サブマクロ:編集開く |
再検索ボタン
従業員検索コンボボックスをクリアして初期状態に戻します。よく使うアクションのため99共通マクロに納めています。
サブマクロ:コンボ再検索
再検索ボタンのクリック時に実行するマクロです。
- サブマクロのテキスト表示
-
サブマクロ:コンボ再検索 値の代入 アイテム = [検索] 式 = Null コントロールの移動 コントロール名 検索 再クエリ コントロール名 (指定なし) マクロの中止 サブマクロの最後
再検索ボタンの「クリック時」にこのサブマクロが紐づいています。検索コンボボックスをNullにクリアしてからコントロールの移動で検索コンボボックスにフォーカスを戻し、再クエリで全件表示に戻します。
マクロの解説
| ステップ | 処理 | 内容 |
|---|---|---|
| 1 | 値の代入 | 検索コンボボックスをNullにクリア |
| 2 | コントロールの移動 | 検索コンボボックスにフォーカスを移動 |
| 3 | 再クエリ | フォーム内の全クエリを更新して全件表示に戻す |
マクロの設置場所
再検索ボタンのクリック時にマクロを設置します。
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員リスト |
| コントロール | 再検索ボタン |
| イベント | クリック時 |
| 呼び出し元 | M99共通 > サブマクロ:コンボ再検索 |
閉じるボタン
M99共通マクロの閉じるサブマクロを流用します。フォーム名を指定せずカレントフォームを閉じる設計のため、どのフォームからでも使い回せます。
マクロの設置場所
| 項目 | 内容 |
|---|---|
| フォーム | F01従業員リスト |
| コントロール | 閉じるボタン |
| イベント | クリック時 |
| 呼び出し元 | M99共通 > サブマクロ:閉じる |
フォームごとに同じ処理のマクロを個別に作ると、マクロの数が際限なく増えて管理が大変になります。M99共通マクロはどのフォームでも使い回せる処理をサブマクロとして一箇所に集約したものです。コントロール名を統一しておくことでフォームを問わず同じ[…]
まとめ
従業員リストは在籍者・退職者の切り替え・検索・詳細表示・新規登録・編集をひとつの画面に集約した設計です。人数・男女比・平均年齢をヘッダーに常時表示することで、一覧を見るだけで組織の状況をおおまかに把握できます。カレント行の色変えや2段組みのレイアウトなど、スクロールしながら使うことを前提にした細かな工夫が積み重なっています。各マクロはM99共通・M01従業員に整理しているため、他のフォームからの流用も容易な構造になっています。
本サイトではマクロを用いた構築手順を中心に紹介していますが、決してマクロを唯一の正解として推奨しているわけではありません。VBAが扱える環境であれば、より多彩で柔軟なプログラムが組めるVBAでの構築をむしろ推奨したいと考えています。
ここでマクロという選択肢を提示しているのは、VBAにハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。