Accessフォームをデータシートビューで開く方法と設定の使い分け

概要

この記事の結論
フォームをデータシートビューで使うには、フォーム全体の[データシートビューの表示]を[はい]に設定します。毎回一覧で開くなら[既定のビュー]も[データシート]に変更します。ボタンやVBAで開く場合は、開く処理のビュー指定を確認してください。表示を許可する設定、最初に開くビュー、編集できるかどうかは、それぞれ別の設定です。
データシートビューとは、レコードを行、項目を列として一覧表示するビューです。

この記事でわかること

  • フォームを選んで表示設定を変更する
  • ボタンやVBAから一覧として開く
  • 列の見せ方と編集範囲を整える
  • 開けないときと空欄になるときを切り分ける

この記事の主な内容

  1. 表示許可と既定のビューを分けて考える
  2. フォームを選んで表示設定を変更する
  3. ボタンやVBAから一覧として開く
  4. 列の見せ方と編集範囲を整える
  5. 開けないときと空欄になるときを切り分ける
  6. 一覧と詳細を組み合わせて業務で使う
  7. よくある質問

想定読了時間:約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を明示すると意図が伝わります。ボタン以外に起動マクロや別画面から開く経路があれば、同様に確認します。

マクロとVBAでデータシートビューを指定する方法

列の見せ方と編集範囲を整える

一覧が表示できたら、利用者が比較しやすい順序と幅に整えます。商品コードのような短い項目に幅を取りすぎず、名称や備考は必要な範囲が読めるよう調整します。列の非表示は画面整理であり、アクセス権を制限する仕組みではありません。

閲覧専用にする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

TOP