テンプレート(サブフォーム編)
一覧表示フォームの土台。単票・ポップアップと違い、クエリを挟む設計が前提になる。ウィザードで素早く形を作り、プロパティで仕上げるのが基本の流れ。
テンプレート(サブフォーム)の完成形
テンプレート(サブフォーム)を実装したフォーム例
検索・絞り込み・カレント行の色付けまで備えた一覧フォームの完成例。サブフォームは親フォームに埋め込んで使う。
フォームの構成
| エリア | 内容 |
|---|---|
| フォームヘッダー | 列見出しラベル(背景色はテーマカラー) |
| 詳細 | データ行(代替背景色・カレント行色付け) |
| フォームフッター | 使用しない |
テンプレート(サブフォーム)の作り方の全体像
サブフォームの作成は3ステップで完結する。
ステップ
| ステップ | 作業 | ポイント |
|---|---|---|
| ① | クエリを作る | 表示項目の絞り込みと並び順をここで決める |
| ② | ウィザードで出力する | ラベルとコントロールのセットを自動生成 |
| ③ | プロパティで仕上げる | 操作性・視認性・データ保護を整える |
① クエリを作る
サブフォームのクエリーデザインビュー
テーブルを直接フォームに流し込まず、必ずクエリを1枚挟む。これには3つの理由がある。
クエリの設計思想
| 理由 | 内容 |
|---|---|
| 動的な絞り込み | 親フォームの動きに連動して表示内容を変える検索の土台になる |
| 計算と加工 | クエリ内で計算フィールドを作ったり関連テーブルから情報を引いたりできる |
| 初期表示の整理 | 登録順・名前順など、最初に見るべき順番で並び替えを済ませておける |
ネーミングルール
管理を楽にするため命名規則を統一する。
| 対象 | ルール | 例 |
|---|---|---|
| クエリ | 親フォーム名+「サブ」 | Q05取引先リストサブ |
| フォーム | 頭文字をQからFに変えるだけ | F05取引先リストサブ |
フォーム一覧で親フォームのすぐ下にサブフォームが並び、テーブル・クエリ・フォームの連動が一目でわかる。
クエリ側で確認すること
- オートナンバー型の「ID」フィールドを必ず含める(カレント行の色付けに必要)
- システム内部用のコードなど表示不要なフィールドはチェックを外す
- 並び替えをあらかじめ設定しておく
「あのクエリ、どのフォームで使ってたっけ?」「テーブルの名前がバラバラで探しにくい……」 Access開発が楽しくなればなるほど、オブジェクトの数は増えていきます。 販売・生産管理システム内で使用している フォーム・テーブル・クエリ・マ[…]
② ウィザードで出力する
ウィザードで出力された表形式フォーム
ウィザードを使うことでラベルと連携した整然としたフォームが自動生成される。表形式フォームはコピペで使い回しができないため、ウィザードを「ひな形作成の自動化ツール」として活用するのがポイント。
詳しい作成手順はこちら: [リンクカード:サブフォームの作成手順ページ URL未定]
③ プロパティでウィザード出力フォームを仕上げる
完成したサブフォーム
ウィザード直後はあくまで素の状態。ここからプロパティを整えることで、どの画面でも同じ使い勝手の標準スタイルが完成する。
サブフォームのプロパティ設定
テンプレート(サブフォーム)のプロパティシート
フォーム全体のプロパティ
プロパティのデフォルトからの変更
| プロパティ | 設定値 | 理由 |
|---|---|---|
| レコードソース | 使用したクエリ名 | データの出所を確定させる |
| 標題 | F+クエリ名 | クエリとフォームの紐付けを一目で判別できる |
| 移動ボタン | いいえ | フォーム下部の標準ナビゲーションを非表示にする |
| コントロールボックス | いいえ | 最小化・最大化を制限する |
| 閉じるボタン | いいえ | 意図しない画面終了を防ぐ |
| 追加の許可 | いいえ | サブフォーム上での直接操作を禁止する |
| 削除の許可 | いいえ | サブフォーム上での直接操作を禁止する |
| タイトルラベル | 削除 | 親フォーム側にタイトルがあるため重複を避ける |
| レコード移動時 | M99共通.行色 | カレント行の色付けマクロを設定する |
フォームヘッダーのプロパティ
プロパティのデフォルトからの変更
| プロパティ | 設定値 | 理由 |
|---|---|---|
| 背景色 | 親フォームのテーマカラー | 画面全体の統一感を出す |
| 高さ | 0.8cm | 収まりのよい標準的な高さ |
| ラベル:フォントサイズ | 9pt | 視認性と情報量を両立する標準サイズ |
| ラベル:高さ | 0.6cm | 上下に余白を持たせる |
| ラベル:上位置 | 0.1cm | ヘッダー枠内の上下バランスを整える |
| ラベル:背景スタイル | 透明 | ヘッダーの背景色をそのまま活かす |
| ラベル:立体表示 | なし | フラットデザインに仕上げる |
| ラベル:上余白 | 0.05cm | メイリオ9ptが上下中央に収まる |
詳細エリアのプロパティ
プロパティのデフォルトからの変更
| プロパティ | 設定値 | 理由 |
|---|---|---|
| 背景色 | 一番薄いグレー | 真っ白は目に負担がかかるためトーンを落とす |
| 代替背景色 | 白 | 1行おきに色を変えて視線が横に流れやすくする |
代替背景色
白とグレーを1行おきに交互にするだけで、列数が多くても視線が迷わなくなる。設定は詳細エリアのプロパティ1か所を変えるだけ。
テキストボックスのプロパティ
プロパティのデフォルトからの変更
| プロパティ | 設定値 | 理由 |
|---|---|---|
| 背景色 | 一番薄いグレー | 詳細エリアの背景色と揃えて統一感を出す |
| 立体表示 | なし | フラットにしてデータそのものに集中させる |
| スクロールバー | なし | 自動付与される不要なバーを消して誤操作を防ぐ |
| 編集ロック | はい | サブフォーム上での直接編集を禁止する(後述) |
| タブストップ | いいえ(左端の項目のみはい) | Enterで次行の先頭へ移動できるようにする(後述) |
| 上余白 | 0.05cm | テキストがボックス内で上下中央に収まる |
| 右余白 | 0.1cm | 文字が溢れても隣の列とくっつかず一覧性が上がる |
右余白0.1cm デフォルトは0cmのため、長い文字列が隣の列に食い込んで見づらくなる。0.1cm追加するだけで一覧の読みやすさが別物になる。
排他的エラーの防止とEnterで行移動を高速化する
編集ロックでデータを守る
一覧画面で怖いのは2つ。キーボードの誤操作でデータが書き換わること、そして複数ユーザーが同じレコードを同時に触って発生する「排他的エラー」。
対処はシンプルで、すべてのテキストボックスの「編集ロック」を「はい」にするだけ。これでサブフォームは閲覧専用として保たれる。データの修正は行内の編集ボタンから専用の単票フォームへ誘導する動線を強制することで、データの整合性とシステムの堅牢性が一気に上がる。
ただし「使用可能」はあえてデフォルトの「はい」のまま残す。編集ロックがかかっていてもテキストの選択とコピーは可能なので、「このコードだけ別のシステムに貼り付けたい」といった場面でマウス操作によるコピーが使える。制限しながら利便性は損なわない、現場向けのバランス設定。
「編集ロック:はい」+「使用可能:はい」にすることで、書き換えは防ぎつつコピーだけ許容できる。どちらか一方では実現できない組み合わせ技。
タブストップでEnter移動を高速化する
一覧確認中にEnterを叩くたびカーソルが横に流れていくのは、視線が定まらず地味にストレスになる。
解決策は左端の項目だけ「タブストップ:はい」、残りは全部「いいえ」にすること。これだけでEnterキーを押すたびにカーソルが「次の行の先頭」へ直接ジャンプする。視線が常に左端に固定されるので、マウスなしでリズムよく下へデータを確認していける。
サブフォームのカレント行の色付け
色付け行の実装サブフォーム例
「今どの行を操作しているか」を色で示す設定。条件付き書式とM99共通.行色マクロを組み合わせて実現する。表形式のサブフォームでは必須の設定としています。
Accessのフォームにおける「色」は、単なるデザイン要素ではありません。オペレーターが今どこにいて何をすべきかを直感的に伝えるための「重要なナビゲーション」だと考えています。 画面を開いた瞬間に「新規登録」か「編集」かを色で感じ取り、無[…]
まとめ
テンプレサブフォームは、クエリ・ウィザード・プロパティの3段階で作る一覧表示の土台。コピーではなくウィザードで毎回生成し、決まったプロパティ設定を施すだけで、操作性・視認性・データ保護が揃った標準スタイルが完成する。設計を手順としてルーティーン化することで、どの画面でも同じ使い勝手を提供できる。
本サイトではマクロを用いた構築手順を中心に紹介していますが、決してマクロを唯一の正解として推奨しているわけではありません。VBAが扱える環境であれば、より多彩で柔軟なプログラムが組めるVBAでの構築をむしろ推奨したいと考えています。
ここでマクロという選択肢を提示しているのは、VBAにハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。