従業員マスタ 「従業員リスト」

データベースと聞くと、つい「検索窓に文字を打ち込んで1件ずつ呼び出す」という手間を想像しがちですが、実務で本当に欲しいのは全体をふわっと見渡せる「一覧の安心感」です。誰がどこにいるかをスクロールで直感的に探し、在籍者と退職者をワンタッチで切り替える。さらに画面の隅で従業員数・男女比・平均年齢がそっと教えてくれる。単票フォームにはない「一覧から始まる利便性」を大切にした設計のヒントをシンプルに整理しています。


従業員マスタリスト画面の構成

パスワード認証を経てメインメニューから起動します。在籍者と退職者の切り替え・従業員検索・詳細表示・新規登録・編集をこの画面から一括して操作できます。

フォームビュー

画面の概要

項目 内容
人数・男性・女性・平均年齢 フォームヘッダーに常時表示。選択切り替えと連動して自動更新
選択 オプショングループで既存従業員・退職者を切り替え。リストと検索コンボボックスが連動して切り替わる
従業員検索 コンボボックスで対象者を絞り込み。再検索ボタンで初期状態に戻す
リスト(サブフォーム) 従業員コード・氏名・フリガナ・住所・各種連絡先など主要情報を2段組みで表示
詳細ボタン 選択行の全情報を編集フォームにポップアップ表示
新規登録ボタン 新規登録フォームを開く
編集ボタン 編集フォームを開く。検索で絞り込んだ状態なら該当者を直接表示
閉じるボタン フォームを閉じる

メインメニューからの起動

従業員マスタには氏名・住所・給与単価などの機密情報が含まれるため、ログイン権限による制御に加えてフォームを開く直前にパスワードを要求する設計にしています。パスワード認証の詳細な実装方法は以下の記事をご参照ください。

関連記事
従業員マスタを開くための2重のログインパスワードで閲覧管理

従業員マスタには氏名や住所、給与単価などの機密情報が含まれます。Accessで運用する場合、ログイン権限による制御はもちろんですが、実務では「管理者がログインしたまま離席した瞬間」の物理的なリスクも無視できません。

パスワード入力窓の表示にInputBox関数を使っているため、専用のフォームを作成する必要がありません。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にハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。