概要
| この記事の結論 フォームをデータシートビューで使うには、フォーム全体の[データシートビューの表示]を[はい]に設定します。毎回一覧で開くなら[既定のビュー]も[データシート]に変更します。ボタンやVBAで開く場合は、開く処理のビュー指定を確認してください。表示を許可する設定、最初に開くビュー、編集できるかどうかは、それぞれ別の設定です。 データシートビューとは、レコードを行、項目を列として一覧表示するビューです。 |
この記事でわかること
- フォームを選んで表示設定を変更する
- ボタンやVBAから一覧として開く
- 列の見せ方と編集範囲を整える
- 開けないときと空欄になるときを切り分ける
この記事の主な内容
- 表示許可と既定のビューを分けて考える
- フォームを選んで表示設定を変更する
- ボタンやVBAから一覧として開く
- 列の見せ方と編集範囲を整える
- 開けないときと空欄になるときを切り分ける
- 一覧と詳細を組み合わせて業務で使う
- よくある質問
想定読了時間:約15分~18分
表示許可と既定のビューを分けて考える
一覧を使えるようにする設定と、最初から一覧で開く設定は異なります。[データシートビューの表示]はビューへの切り替えを許可する項目、[既定のビュー]は通常開くときの表示方法です。ボタンから開く場合は、そのボタンのマクロやVBAも確認します。
どの設定を変えるべきか
| やりたいこと | 主に確認する設定 | 変更する対象 |
|---|---|---|
| 表示メニューから一覧へ切り替えたい | データシートビューの表示=はい | フォーム全体 |
| 毎回一覧で開きたい | 既定のビュー=データシート | フォーム全体 |
| 特定のボタンから一覧を開きたい | OpenFormのビュー=データシート | ボタンの開く処理 |
| 一覧を見せるが編集は禁止したい | 更新・追加・削除の許可 | フォーム全体と開く処理 |
| 子画面だけ一覧にしたい | 子フォームの既定のビュー | 埋め込まれたフォーム |
データシートビューは、テーブルだけの機能ではありません。フォームを一覧で表示した場合でも、画面のデータ元はフォームに設定されたレコードソースです。見た目が同じ表形式でも、開いているオブジェクトの種類を確認してください。

単票と一覧を使い分ける
1件ずつ入力する作業には単票フォーム、複数件の比較にはデータシートが向きます。一覧上に各行のボタンや画像を自由に置きたい場合は、連続フォームも候補です。データシートは表の操作に向く一方、元のフォームと同じレイアウトを再現するものではありません。
フォームを選んで表示設定を変更する
変更するのはテキストボックスや詳細セクションではなく、フォーム全体のプロパティです。設定項目が見つからないときは、Accessの版の違いを疑う前に、プロパティシート上部の選択対象を確認しましょう。作業前にはフォームのコピーまたは原本のバックアップを用意します。
手順1 フォーム全体を選択する
1. ナビゲーションウィンドウで対象フォームを右クリックし、[デザインビュー]を開きます。
2. F4を押してプロパティシートを表示します。
3. シート上部のドロップダウンで[フォーム]を選択します。
4. [書式]タブ、または[すべて]タブで表示に関する項目を探します。
5. 現在の設定を控えてから変更します。

手順2 表示を許可する
[データシートビューの表示]を[はい]に設定し、設計を保存します。フォームビューで開き、[表示]からデータシートビューへ切り替えられるか確認します。英語のプロパティ名はAllowDatasheetViewです。表示名は利用するAccessの版やUI言語により異なる場合があります。
この許可を[はい]にしても、常に一覧から開くとは限りません。必要なのが「切り替え可能にする」だけなら、ここまでで目的を満たします。入力担当者が使う単票フォームの起動方法まで変える必要はありません。
手順3 最初から一覧で開く
毎回一覧を使う場合は、[既定のビュー]を[データシート]にします。設計を保存してフォームを閉じ、ナビゲーションウィンドウから開き直します。すでに開いていたフォームの表示だけで判断せず、閉じた状態から起動する確認が重要です。

変更後は、名前、日付、金額などが想定する列に出ているか確認します。見せなくてよい内部IDも、検索や詳細画面への遷移に必要な場合はデータ元に残します。利用者に見せる列と、内部処理で使う列は同じとは限りません。
ボタンやVBAから一覧として開く
フォームの設定が正しくても、メニューボタン側がフォームビューを指定すると期待どおりにならない場合があります。ナビゲーションウィンドウからは一覧で開くのにボタンでは違う場合、フォームをさらに変更する前に起動処理を調べましょう。
マクロで開く場合
メニューのボタンをデザインビューで選び、[イベント]の[クリック時]に登録された埋め込みマクロなどを確認します。[フォームを開く]アクションで、フォーム名を対象名、ビューを[データシート]にします。必要なフィルター条件やデータモードを消さないよう、変更前の引数を控えてください。
VBAで開く場合
次は、F_受注一覧をデータシートビューで開く最小例です。フォーム名は実際の名前に置き換えます。対象がまだ開かれていない状態でテストしてください。すでに開いているフォームの扱いは、既存の画面遷移と併せて決めます。
Private Sub cmd一覧_Click()
On Error GoTo ErrHandler
DoCmd.OpenForm FormName:=”F_受注一覧”, View:=acFormDS
Exit Sub
ErrHandler:
MsgBox “一覧を開けません。” & vbCrLf & _
Err.Number & “:” & Err.Description, vbExclamation
End Sub
閲覧専用として開くなら、次のようにデータモードを指定する方法があります。OpenFormのデータモードは編集動作に影響するため、フォーム側の許可設定だけでなく、すべての起動経路の引数を確認します。
DoCmd.OpenForm FormName:=”F_受注一覧”, _
View:=acFormDS, DataMode:=acFormReadOnly
ビュー引数を省略した場合の動作を、既定のビューを必ず引き継ぐものと決めつけないでください。一覧として開くことが要件なら、acFormDSを明示すると意図が伝わります。ボタン以外に起動マクロや別画面から開く経路があれば、同様に確認します。

列の見せ方と編集範囲を整える
一覧が表示できたら、利用者が比較しやすい順序と幅に整えます。商品コードのような短い項目に幅を取りすぎず、名称や備考は必要な範囲が読めるよう調整します。列の非表示は画面整理であり、アクセス権を制限する仕組みではありません。
閲覧専用にする3つの設定
閲覧だけの一覧では、既存データの変更、新しい行の追加、行の削除をそれぞれ制限します。更新許可だけを[いいえ]にして、追加や削除が残っていないか注意してください。必要に応じてレコードセットをスナップショットにする方法もあります。
| 設定 | 閲覧専用の例 | 制限する操作 |
|---|---|---|
| 更新の許可/AllowEdits | いいえ | 既存レコードの編集 |
| 追加の許可/AllowAdditions | いいえ | 新規レコードの追加 |
| 削除の許可/AllowDeletions | いいえ | レコードの削除 |
| レコードセット/RecordsetType | 必要に応じスナップショット | 更新しないデータ集合として表示 |

これらは主にフォーム経由の操作を制御します。利用者がテーブルを直接開ける場合や、別の更新処理を実行できる場合まで禁止するものではありません。機密情報や権限の制御が必要なら、DB側の権限と画面設計を併せて検討します。
列幅と並び順を決めるときの注意
列を隠す、列幅を変える、並べ替えるといった操作の後は、閉じて開き直したときの表示も確認します。設定が利用者ごとに変わってよいのか、全員で同じ列構成にするのかを決めておくと、問い合わせ時に画面の違いを説明しやすくなります。
日付順に見せたい場合は、一覧の初期並び順を設計します。主キーの数値が大きい行ほど最新だとは限らないため、業務の日付と同日内の識別キーなど、順序が決まる条件を選びます。
開けないときと空欄になるときを切り分ける
「一覧へ切り替えられない」と「一覧は開くがデータがない」では確認箇所が違います。前者はビューと起動経路、後者はデータ元と抽出条件を調べます。見た目だけでデータが消えたと判断しないでください。
| 症状 | 最初に確認すること | 次の対応 |
|---|---|---|
| ビューの選択肢がない | フォーム全体の表示許可 | 許可後に保存して開き直す |
| ボタンからだけ単票になる | OpenFormのビュー指定 | データシートを明示する |
| 既存行がなく新規行だけ出る | データ入力/DataEntry | 既存行を表示するなら[いいえ]を確認 |
| 列は出るが行がない | フィルター・Where条件・元クエリ | 条件を控えてテスト用コピーで切り分け |
| 項目を編集できない | 編集許可・ロック・更新不可クエリ | 閲覧専用の意図とデータ構造を確認 |
| 親画面は変わるが子画面は変わらない | 設定したフォームの対象 | 子フォーム自身の設定を確認 |

フォームヘッダーのボタンが見えない
通常のフォームで配置したヘッダーやフッター、操作ボタンが、データシートビューで同じように表示されるとは限りません。データシート化すると操作導線が足りなくなる場合は、検索ボタンや新規登録ボタンを親フォームに置き、一覧を子フォームとして配置する構成を検討します。
既存データが表示されない
[データ入力]が[はい]の場合、新規データの入力を目的とする表示になります。既存行も参照したいなら、その設定を確認します。ただし、一覧が空の原因は抽出条件や接続失敗のこともあるため、元クエリを開いて対象行が取得できるか調べてから変更します。
Accessの設定や運用で解決が難しい場合は
設定変更だけで改善しない場合や、複数人での利用・外部DB・既存のVBAが関わる場合は、原因と影響範囲を整理してから改修を進めましょう。Accessの教科書では、既存Accessの修正や運用の見直しについて相談できます。対象画面、症状、再現手順をまとめると、調査の相談がしやすくなります。
一覧と詳細を組み合わせて業務で使う
比較する画面と、1件を詳しく入力する画面を分けると、一覧に項目を詰め込みすぎずに済みます。例えば、親フォームに検索条件と操作ボタン、子フォームに受注一覧を置き、選択した受注IDで詳細画面を開く構成です。
サブフォームの設定対象
サブフォームには、親に置く「サブフォームコントロール」と、その中に表示する「フォーム本体」があります。子画面の既定のビューを変えたい場合はフォーム本体を編集します。親子で絞り込む項目は、サブフォームコントロールのリンク親フィールド・リンク子フィールドなどで別途設定します。
この区別をせずに親フォームだけ変更すると、一覧にしたい部分が変わらないことがあります。選択対象の名前、ソースオブジェクト、表示しているフォーム名を順番に確認してください。

変更後は実際の起動経路で確認する
| テスト | 確認する結果 |
|---|---|
| ナビゲーションから開く | 指定した既定のビューになる |
| メニューボタンから開く | ビューと抽出条件が正しい |
| 閲覧専用で開く | 変更・追加・削除ができない |
| 既存・新規データを表示 | DataEntryの意図どおりになる |
| 一覧から詳細へ移動 | 同じ主キーのレコードを開く |
| 閉じて再度開く | 列と並び順が想定どおりになる |

まとめ
一覧への切り替えには表示許可、通常の起動には既定のビュー、ボタン起動にはOpenFormの指定を確認します。編集可否は別に設計し、一覧に出ないボタンやヘッダーが必要なら親子フォームを使い分けましょう。変更後は、直接開く場合と業務メニューから開く場合の両方で確認してください。
よくある質問
対象フォームの[データシートビューの表示]が許可されているか確認します。デザインビューでF4を押し、プロパティシート上部を[フォーム]に切り替えてから[書式]を確認してください。テキストボックスや詳細セクションを選んでいると、目的の項目は見つかりません。設定を[はい]にして保存し、フォームを開き直します。独自メニューやRuntime環境で標準の切り替えが使えない場合は、ボタンなどに一覧を開く処理を用意します。
開く側のボタンやマクロが、フォームビューを指定している可能性があります。まず対象を閉じ、ナビゲーションウィンドウから開いた場合と、メニューボタンから開いた場合を比較してください。ボタン経由だけ違うなら、OpenFormのビュー引数を確認します。VBAでデータシートを指定する値はacFormDSです。すでに開いているフォームを再利用している処理もあるため、設定変更だけで直ると判断せず、実際に業務で使う起動経路を点検します。
見た目は似ていますが、開いているオブジェクトが異なります。フォームのデータシートでは、フォームに設定されたデータ元、イベント、編集許可などが関係します。一方、テーブルを直接開く操作では、そのフォームを経由しません。利用者に必要な項目だけ見せ、入力チェックや画面の導線を管理したい場合は、フォームを用意する意味があります。ただし、フォームで列を隠しただけでは、元データへのアクセス権を制限したことにはなりません。
フォーム全体の更新の許可、追加の許可、削除の許可をそれぞれ[いいえ]にする方法があります。必要に応じてレコードセットをスナップショットにするか、OpenFormでacFormReadOnlyを指定します。設定後は既存セルの変更、新規行の追加、行の削除を実際に試して確認してください。開く処理のデータモードが編集動作へ影響するため、ボタン経由でも点検します。これはフォーム上の制御なので、DB側の権限管理は別に考える必要があります。
データシートビューは、レコードを行と列で表示するためのビューです。フォームビューで配置したヘッダー、フッター、ボタンなどを同じ位置へ再現するものではありません。検索や登録のボタンが必要なら、親フォームに操作部品を置き、一覧をサブフォームとして表示すると役割を分けられます。各行に操作ボタンを置きたい場合は連続フォームも候補です。元の画面を無理に一覧へ変換する前に、必要な操作をどこに残すかを決めてください。
フォームの[データ入力]が[はい]になっている可能性があります。この設定は新規入力を目的とするもので、既存レコードも一覧表示する用途とは異なります。まずレコードソースのテーブルやクエリに既存データがあるか確認し、データ入力設定、フィルター、OpenFormの条件を順に調べます。表示が空でも、データ自体が削除されたとは限りません。業務用の抽出条件をいきなり消さず、条件を記録したうえでコピーを使って切り分けてください。
はい。親フォームに検索欄やボタンを残し、子フォームをデータシートで表示する構成が使えます。設定を変更するのは、親に置いた枠そのものではなく、中に表示するフォーム本体です。子フォームの表示許可と既定のビューを確認し、必要なら単独で開いて動作を確かめます。親の選択内容に応じて一覧を絞る場合は、親子のリンク項目も別に設定します。変更後は親画面から開き、表示対象と編集可否が想定どおりか確認してください。
Accessの設定や運用で解決が難しい場合は
設定変更だけで改善しない場合や、複数人での利用・外部DB・既存のVBAが関わる場合は、原因と影響範囲を整理してから改修を進めましょう。Accessの教科書では、既存Accessの修正や運用の見直しについて相談できます。対象画面、症状、再現手順をまとめると、調査の相談がしやすくなります。
関連記事
参考情報
[1] Microsoft|Form.AllowDatasheetView
https://learn.microsoft.com/en-us/office/vba/api/access.form.allowdatasheetview
[2] Microsoft|Form.DefaultView
https://learn.microsoft.com/en-us/office/vba/api/access.form.defaultview
[3] Microsoft|DoCmd.OpenForm
https://learn.microsoft.com/en-us/office/vba/api/access.docmd.openform
[4] Microsoft|Form.AllowEdits
https://learn.microsoft.com/en-us/office/vba/api/access.form.allowedits
[5] Microsoft|Form.RecordsetType
https://learn.microsoft.com/en-us/office/vba/api/access.form.recordsettype