
Microsoft Accessの帳票フォームで選択中のレコードの背景色を変更(ハイライト表示)する方法
Microsoft Accessの帳票フォームで複数のレコードを表示している際に、選択中のレコードの背景色を自動的に変更して視認性を向上させる方法を解説します。

対象OS Windows 10、Windows 11
帳票フォームにおける選択レコードの視認性の課題
Microsoft Accessの帳票フォームは、複数のレコードを一覧表示するのに便利な機能です。しかし、標準の設定では選択中のレコードが分かりづらく、特にレコード数が多い場合は、現在どのレコードを選択しているのか見失いがちです。
この記事では、条件付き書式とVBAを組み合わせて、選択中のレコードの背景色を動的に変更する仕組みを実装します。ヘッダーセクションと詳細セクションにそれぞれテキストボックスを配置し、その値の一致を条件に背景色を変更することで、直感的で使いやすいフォームを作成できます。
1. ヘッダーセクションにテキストボックスを配置する
選択中のレコードのIDを保持するためのテキストボックスをフォームヘッダーに配置します。フォームヘッダーセクションが表示されていない場合は、フォームを右クリックして「フォームヘッダー/フッター」を選択して表示させてください。
-
「フォーム デザイン」タブから「テキストボックス」を選択し、フォームヘッダーセクションに配置します。
-
配置したテキストボックスのプロパティシートを開き、「その他」タブの「名前」プロパティを(例として)「txtSelectedID」に設定します。
-
「データ」タブの「既定値」プロパティに「0」を設定して、初期値を設定します。
テキストボックスの名前と既定値を設定します。 -
必要に応じて、ラベルを削除するか、「選択中のID」などの分かりやすい名前に変更します。
ラベルを編集または削除します。
ヒント:
このテキストボックスは実際の運用時には非表示にすることも可能です。「書式」タブの「可視」プロパティを「いいえ」に設定してください。
2. 詳細セクションにテキストボックスを配置する
各レコードのIDを表示するためのテキストボックスを詳細セクションに配置し、コントロールソースを設定します。
-
「デザイン」タブから「テキストボックス」を選択し、詳細セクションに配置します。(ラベルは削除してください)
-
配置したテキストボックスのプロパティシートを開き、「データ」タブの「コントロールソース」に「=[ID]」と設定します。
=[ID]
コマンドをコピー
-
「その他」タブの「名前」プロパティを「txtDetailID」に設定します。
コントロールソースと名前を設定します。 -
「書式」タブで、テキストボックスの位置とサイズを調整し、「配置」タブで「最背面へ移動」をクリックします。
適切な位置に配置します。
ヒント:
実際の運用では、このテキストボックスの「背景色」や「境界線」を透明に設定すると、よりデザイン性が高まります。また、フォントサイズや色も必要に応じて調整してください。詳細セクション全体の背景色を変更したい場合は、テキストボックスで詳細セクションを全て囲うように設置し、最背面へ移動させてください。
3. 条件付き書式を設定する
詳細セクションに設置したテキストボックスに条件付き書式を設定し、選択されたレコードの背景色を変更する仕組みを作ります。
-
先ほど設置したテキストボックス(txtDetailID)を選択します。
-
「書式」タブから「条件付き書式」をクリックします。
-
「新しいルール」をクリックし、「現在のレコード値を確認するか、式を利用する」を選択します。
新しい条件付き書式ルールを作成します。 -
「次のセルのみ書式設定」のプルダウンメニューで「式」を選択し、ボックスに「[txtDetailID]=[txtSelectedID]」と入力します。
条件式を入力します。[txtDetailID]=[txtSelectedID]
コマンドをコピー
-
「書式」ボタンをクリックし、「塗りつぶし」タブで背景色を選択します。薄い青やグレー、黄色など、視認しやすい色を選びます。
ハイライト用の背景色を選択します。 -
「OK」をクリックして条件付き書式を保存し、ダイアログを閉じます。
設定を保存します。
ヒント:
式の中のテキストボックス名は、実際に配置したコントロールの名前に合わせて変更してください。
5. クリックイベントのVBAコードを実装する
レコードをクリックしたときに、ヘッダーのテキストボックスの値を更新するVBAコードを実装します。
-
詳細セクションのいずれかのコントロールを選択し、プロパティシートを開きます。
-
「イベント」タブの「クリック時」プロパティの横にある「...」ボタンをクリックします。
-
「コードビルダー」を選択し、「OK」をクリックしてVBEを開きます。
コードビルダーを選択します。 -
以下のVBAコードを入力します。
クリックイベントのコードを入力します。Private Sub コントロール名_Click() Me.txtSelectedID = Me.txtDetailID Me.Refresh End Sub
コマンドをコピー
ヒント:
複数のコントロールに同じイベントを設定する場合は、それぞれに同じイベントを割り当ててください。また、詳細セクション全体を覆うように最前面に透明のボタンを配置してイベントを割り当てることで、詳細セクションのどの箇所をクリックしても統一的にハイライト表示させることができます。
6. 動作確認と最終調整を行う
設定が完了したら、フォームビューで動作を確認し、必要に応じて調整を行います。
-
フォームを保存し、フォームビューに切り替えます。
-
任意のレコードをクリックして、背景色が変更されることを確認します。
-
別のレコードをクリックして、ハイライトが移動することを確認します。
ハイライトが正しく移動することを確認します。 -
必要に応じて、境界線や条件付き書式の適用範囲を調整します。(境界線を「なし」にするとよりスタイリッシュになります)
最終的な表示を確認します。
ヒント:
背景色が変わらない場合は、条件付き書式の式が正しく入力されているか、テキストボックスの名前が一致しているかを確認してください。
応用:複数の条件でハイライトを使い分ける
基本的なハイライト機能に加えて、レコードの状態に応じて異なる色でハイライトすることも可能です。例えば、選択中のレコードは青、編集中のレコードは黄色、エラーがあるレコードは赤といった具合に使い分けることができます。
複数の条件を設定する場合は、条件付き書式ダイアログで「新しいルール」を追加し、それぞれに異なる条件式と書式を設定します。条件の優先順位は、リスト内の順序で決まるため、適切に並べ替えることが重要です。
パフォーマンスを考慮した実装のポイント
大量のレコードを扱う場合のパフォーマンス最適化のポイントをご紹介します。
- ❶ 条件式はシンプルに保ち、複雑な計算は避ける。(複雑な条件式はパフォーマンスに影響を与える可能性があります)
- ❷ Me.Refreshの代わりにMe.Repaintを使用してパフォーマンスを向上(画面表示のみを更新。詳細は下表を参照)
- ❸ 条件付き書式は必要最小限のコントロールにのみ適用。(適用範囲を絞ることでパフォーマンスを向上させることができます)
メソッド | 更新範囲 | パフォーマンス |
---|---|---|
Me.Refresh | データとフォーム全体 | 低速 |
Me.Repaint | 画面表示のみ(レコードの再読み込みはしません) | 高速 |
Me.Recalc | 計算式のみ | 中速 |
関連サイト(外部)