Accessフォームがスクロールできない原因と対処法

概要

この記事の結論
Accessフォームがスクロールできないときは、画面の下へ移動したいのか、次のレコードへ移動したいのかを先に分けます。表示領域の問題ならフォーム全体のスクロールバー設定、レコード移動ならフォームの種類と移動ボタンを確認します。さらにサブフォーム側の設定、抽出条件、データ入力モード、マウスホイール、画面サイズの順に切り分けます。この記事では症状別の確認表と再現テストを用意し、設定変更後も直らない場合まで説明します。

この記事でわかること

  • フォームのスクロールは表示領域を動かす操作であり、単票フォームで次のレコードへ移る操作とは区別します。
  • フォーム全体のスクロールバーを設定する
  • ホイールだけ反応しない場合を調べる
  • 画面サイズとフォームの配置を見直す

この記事の主な内容

  1. 動かしたいものを先に確認する
  2. フォーム全体のスクロールバーを設定する
  3. 単票フォームのレコード移動を確認する
  4. サブフォームだけ動かない場合を調べる
  5. ホイールだけ反応しない場合を調べる
  6. 画面サイズとフォームの配置を見直す
  7. 症状別の確認と再発防止
  8. よくある質問

想定読了時間:約15分~20分


1 動かしたいものを先に確認する

フォームが動かないときは、「画面の下にある項目を見たい」「次の顧客へ移りたい」「リストの候補を送りたい」のどれかを先に決めます。いずれもスクロールできないように感じますが、確認する設定は異なります。目的を分けるだけでも、関係のないプロパティを変更する手間を減らせます。

スクロールバーは、表示領域に収まらないフォームなどを見るためのものです。単票フォームで次の顧客に移る操作はレコード移動であり、別の機能です。MicrosoftのScrollBarsの説明でも、レコード移動はNavigationButtonsで扱うよう区別されています。

症状最初に見るところ確かめる操作
画面の下にある入力欄が見えないフォームのScrollBarsと大きさ縦バーをドラッグ
次の顧客に移れない移動ボタンと表示中の件数次のレコードへ移動
子の一覧だけ動かない子フォーム本体の設定子の領域内で操作
ホイールだけ効かない操作対象、イベント、端末バー操作と比較
コンボの候補だけ動かないコントロール側の状態候補一覧を開いて操作

変更前に残しておく情報

対象のフォーム名、単票か帳票か、親か子か、どの操作で止まるかを記録します。さらに、別のPCでは動くのか、マウスホイール以外なら動くのかも調べます。画面写真を残すなら顧客名などを隠し、設定変更前後を比較できるようにします。

画面スクロール、レコード移動、コントロール内部の移動の違い

2  フォーム全体のスクロールバーを設定する

フォームの下にある項目が見えず、スクロールバーもない場合は、まずフォーム全体の[スクロールバー]を確認します。テキストボックスやセクションを選んでいると別のプロパティが表示されるため、プロパティシート上部の選択対象が「フォーム」であることを確かめるのがポイントです。

基本の設定手順

1. 元ファイルを複製し、作業用コピーのナビゲーションウィンドウで対象フォームを右クリックします。

2. [デザインビュー]を選び、F4キーでプロパティシートを表示します。

3. プロパティシートの選択欄から[フォーム]を選択します。フォーム左上の選択部分から全体を選ぶ方法もあります。

4. [書式]タブの[スクロールバー]を確認します。縦方向なら[垂直のみ]、両方向なら[水平/垂直]などの値を選びます。

5. 保存してフォームビューへ戻り、バーを直接ドラッグして下端の項目を確認します。

6. 一度閉じて開き直し、同じ設定と動作が保たれるか確認します。

設定VBAの値目的
なし0バーを表示しない
水平のみ1横方向の移動を許可
垂直のみ2縦方向の移動を許可
水平/垂直3両方向の移動を許可

設定値だけで原因を決めない

バーを有効にしても、移動するだけの内容が表示領域の外にない、違うフォームを変更している、フォーム内部の部品が見切れている、といった場合は期待と異なる動作になります。「3にすればすべて直る」と考えず、実際に動かしたい領域と設定対象を照合してください。

VBAから設定する場合は、対象フォームのモジュール内でMe.ScrollBars = 3と記述できます。既存の読み込み時イベントなどで別の値を代入していると、デザインビューで保存した設定が実行時に上書きされる可能性があります。まず既存コードを確認し、重複した設定を増やさないようにします。

フォーム全体の書式タブでスクロールバーを設定する手順

3  単票フォームのレコード移動を確認する

単票フォームは、基本的に1レコードずつ表示する画面です。顧客Aの下へスクロールした先に顧客Bが続くとは限りません。次の顧客へ移る目的なら、フォーム下部の移動ボタンや、独自に配置された前へ・次へボタンを使います。複数の顧客を縦に一覧表示したいなら、帳票フォームなど別の表示方式を検討します。

表示方式主な見え方移動の考え方
単票フォーム1件を大きく表示レコード移動で次の1件へ
帳票フォーム複数件を繰り返して表示一覧のスクロールと行選択
データシート行と列の表形式表の縦横スクロール
分割フォームフォームと表を併用操作する側を区別

移動ボタンがない場合

フォーム全体の[書式]タブで[移動ボタン]を確認します。ただし、業務システムによっては独自の検索や選択ボタンを使うため、意図的に非表示にしています。入力順や承認手順を制御している画面で、確認せず移動ボタンを追加すると想定外の操作経路が生まれることがあります。

データがあるのに次のレコードがない場合

元クエリの条件、フォームのフィルター、開くときのWhereCondition、親子フォームのリンク条件を確認します。DataEntryがTrueの場合は、既存レコードを表示しない入力用モードになることがあります。追加の許可も含めて設計意図を調べ、既存一覧が必要な画面かどうかを判断してください。

入力中のレコードを保存できず、次へ移れない場合もあります。必須項目や入力規則、更新前イベントの検証が止めていないか、エラーメッセージを確認します。この場合はスクロールバーを変えても保存条件は解決しません。入力を直すか、必要に応じて未保存の変更を取り消します。

単票、帳票、データシートの表示方式と移動操作の違い

4  サブフォームだけ動かない場合を調べる

親フォームの中に一覧が埋め込まれている場合、その一覧はサブフォームかもしれません。親のスクロールバーと子のスクロールバーは別に確認します。親側の設定を変えても子の一覧が動かない場合は、子フォーム本体の設定へ進みましょう。

枠と中身を区別する

サブフォームコントロールは子フォームを載せる枠です。中に表示するフォーム本体とは別のオブジェクトなので、枠のプロパティだけを見ても、子のScrollBarsを変更できているとは限りません。枠の[ソースオブジェクト]などで子フォーム名を確認し、その子を単独でデザインビューに開くと対象を分けやすくなります。

1. 親フォームをデザインビューで開き、一覧を載せるサブフォームコントロールを選びます。

2. ソースオブジェクトと、親側・子側のリンクフィールドを控えます。

3. 対象の子フォームを単独で開き、フォーム全体のスクロールバーと表示方式を確認します。

4. 子が単独では動くか、親の中に戻したときだけ動かないかを比較します。

子が単独では動くなら、親の枠の大きさ、重なったコントロール、表示件数、リンク条件を確認します。親の受注IDに対応した明細だけ表示するのは正常な動作なので、件数を増やすためにリンク条件を外さないでください。別の受注の明細まで見えると、かえってデータの誤認につながります。

VBAで親から子の設定を参照する場合は、Me!subDetails.Form.ScrollBarsのようにFormを介します。このsubDetailsは枠の名前の例で、子フォームの保存名と同じとは限りません。修正箇所を特定する際は、両方の名前を記録してください。

親フォーム、サブフォームコントロール、子フォーム本体の区別

フォームのスクロール対処の設定や運用で困っている場合は

まずはコピー環境で本記事の手順を確認してください。子フォームやVBAを含む原因調査、端末ごとの表示崩れなど、影響範囲の判断が難しい場合は、Accessの教科書のお問い合わせフォームから状況をご相談いただけます。使用中の版、対象の画面やテーブル、再現手順を整理すると、相談内容が伝わりやすくなります。


5  ホイールだけ反応しない場合を調べる

スクロールバーをドラッグすると動くのにホイールだけ反応しない場合、バーの表示設定以外に原因があります。まずマウスポインターをフォームの余白、テキストボックス、子フォームの一覧上へ移し、反応が変わるか確認します。入力先のフォーカスがどこにあるかも合わせて調べます。

操作と環境を一つずつ比較する

  • スクロールバーのドラッグでは、同じ領域を最後まで移動できるか確認します。
  • リストやコンボの上だけで反応が変わるなら、部品内部の操作と切り分けます。
  • 別のマウスや別のPCで比較し、端末固有かフォーム固有かを判断します。
  • フォームの[マウスホイール時]イベントと、独自の移動処理があるかを確認します。

MouseWheelイベントはホイール操作に応じた処理を行う入口です。ここにレコード移動やフォーカス変更を組み込んでいる場合、標準動作と違う結果になることがあります。既存処理を無条件に削除するのではなく、何を制御しているかを確認して、コピー環境で比較します。

以前は動いていた場合は、フォームの改修日、Office更新、マウス設定変更などの時期を記録します。64bit版WindowsかどうかだけでAccessのbit数を判断しないことも大切です。ただしホイールの不調だけで、直ちにbit数の不一致やファイル破損と決めつける必要はありません。

スクロールバーは動く場合にホイールの操作対象とイベントを確認する順序

6  画面サイズとフォームの配置を見直す

特定のPCだけ下のボタンが見えない場合は、解像度、Windowsの表示倍率、Accessウィンドウの大きさを比較します。同じフォームでも使える表示領域が違えば、見切れる場所は変わります。利用者に小さい文字を読ませるために倍率を下げるだけで済ませず、フォームの配置も検討します。

詳細領域とヘッダーやフッターを分ける

フォームには詳細、フォームヘッダー、フォームフッターなどの領域があります。どの領域にボタンや入力欄があるかによって見え方が変わるため、スクロールで動く部分の外に大きな見出しや余白がないか確認します。入力欄が少ないのに広い余白が残る場合は、離れた位置の部品も調べます。

横に長い入力画面では、重要な項目を左側へ寄せる、関連項目をタブで分ける、一覧と詳細を別画面へ分ける方法があります。配置変更は見た目だけでなくTabキーの移動順にも影響するので、マウスで操作できたことだけで完了とせず、キーボードで最後の項目まで進めるか確認します。

小さい画面での確認を残す

社内で使う最小の画面サイズと通常の表示倍率を決め、その条件で確認すると再発を防ぎやすくなります。ポップアップ表示や重なり合うウィンドウ形式の場合は、親子ウィンドウの大きさも記録します。画面全体の表示方式を変更すると他のフォームにも影響し得るため、必要な箇所から順に調整します。

フォームが見切れるときに画面とコントロールの配置を確認する項目

7  症状別の確認と再発防止

直ったかどうかは、元の操作と同じ条件で確認します。バーが出たことだけでなく、必要な項目が見えるか、正しいレコードへ移れるか、入力が保存できるかまで確かめます。表示件数を増やすために抽出条件や親子リンクを外していないかも確認してください。

確認対象行う確認
縦横スクロール先頭・末尾、左右端の項目を表示する
単票の移動前後のレコードと新規レコードを区別する
親子フォーム親の切替後も正しい子だけ表示する
未保存の入力保存エラーを見落とさず処理できる
操作方法バー、ホイール、Tabキーで比較する
画面環境通常PCと表示領域の小さいPCで確認する
再起動閉じて開いても設定が戻らない

Runtimeだけを使う端末やACCDEの配布版では、その場でフォームの設計を直せない場合があります。開発用ACCDBで設定を変更し、配布先と同じ条件で確認してから更新します。原因調査を依頼する際は、フォーム名、症状、Accessの版とbit数、再現操作を渡すと調査範囲を絞れます。

スクロールの不具合は、設定1つで直る場合もあれば、表示方式や抽出条件の違いが原因の場合もあります。画面移動、レコード移動、子フォーム、ホイール、画面サイズの順に切り分ければ、データ条件を不用意に変更せずに対処できます。

スクロール修正後に先頭と末尾、親子フォーム、キーボード操作を確認する項目

8  よくある質問

A. 設定対象がフォーム全体ではない、画面外へ移動する内容がない、別のコピーを開いている、VBAが実行時に上書きしているなどの可能性があります。まずデザインビューのプロパティシートで、選択対象がフォームになっているか確認します。次に保存して開き直し、必要な項目が表示領域の外にあるかを調べます。サブフォーム内部の問題なら、親ではなく子フォーム本体の設定が必要です。設定値だけで判断せず、どの領域を動かしたいかを合わせて確認します。

A. 単票フォームで次の人へ移る操作は、画面のスクロールとは別のレコード移動です。まずフォーム下部の移動ボタンや、用意された次へボタンで移動できるか確認してください。ホイールが常に次のレコードへ進むとは考えないようにします。移動ボタンでも進めない場合は、抽出結果が1件だけになっていないか、入力中のデータを保存する際にエラーが出ていないかを調べます。複数人を一覧で見たい場合は、帳票フォームなどの表示方式が適しています。

A. 親フォームと子フォーム本体の設定を分けて確認します。サブフォームを載せる枠を選んだだけでは、子のスクロールバー設定を変更したことにならない場合があります。枠のソースオブジェクトで子の名前を確認し、その子を単独でデザインビューに開いてください。単独では動くなら、親の枠の大きさや重なり、親子リンクによる表示件数を調べます。件数を増やす目的でリンク条件を外すと別データまで表示されるため、業務上の関連は維持します。

A. バー操作で移動できるなら、まずホイールの操作対象を切り分けます。フォームの余白、入力欄、サブフォーム、リストの上で反応を比較し、フォーカスがどこにあるかも確認します。次に別マウスや別PCで試し、端末固有かフォーム固有かを判断します。マウスホイール時イベントに独自処理がある場合は、その内容を確認してください。バーの表示設定を何度も切り替えるだけでは解決しないので、1つの条件ずつ変えて比較することが有効です。

A. 元テーブルの全件が、必ずそのフォームへ表示されるわけではありません。レコードソースの条件、フォームのフィルター、開くときのWhereCondition、親子フォームのリンクで1件に絞られている可能性があります。また、単票フォームは1件ずつ表示する方式なので、次のレコードは移動ボタンで確認します。DataEntryが有効な入力専用画面では既存データを表示しない場合もあります。スクロールの設定より先に、表示方式と対象件数を確認してください。

A. PCごとの解像度、表示倍率、Accessウィンドウの大きさを比較します。次にフォームの詳細領域、ヘッダー、フッター、離れた位置に置かれた部品を確認してください。単に倍率を下げるだけでは文字が読みにくくなるため、重要な項目を寄せる、タブで分ける、一覧と詳細を分けるなどの改善も検討します。修正後は社内で使う小さい画面条件で開き、マウス操作だけでなくTabキーでも最後の入力項目や操作ボタンへ到達できるか確認します。

A. 変更できます。フォームのモジュール内でMe.ScrollBars = 3とすれば、水平と垂直の両方を許可する設定になります。0はなし、1は水平のみ、2は垂直のみです。ただし、どのイベントで設定するか、既存処理が別の値で上書きしていないかを確認する必要があります。サブフォームを親から操作するときは、枠の名前からFormを介して子を参照します。設定値を変えることと、単票フォームで次のレコードへ移動することは別の処理です。

A. Runtimeは利用者向けの実行環境なので、通常の製品版Accessと同じようにデザインビューで修正する前提にはできません。開発用の元ACCDBを製品版Accessで開き、フォームの設定やコードを修正してから配布版を作り直します。ACCDEだけが残っている場合は、まず開発原本の所在を確認してください。配布先と同じ表示倍率、画面サイズ、AccessまたはRuntimeの版で動作確認し、どのファイルを更新したかも記録すると再発調査がしやすくなります。

フォームのスクロール対処の設定や運用で困っている場合は

まずはコピー環境で本記事の手順を確認してください。子フォームやVBAを含む原因調査、端末ごとの表示崩れなど、影響範囲の判断が難しい場合は、Accessの教科書のお問い合わせフォームから状況をご相談いただけます。使用中の版、対象の画面やテーブル、再現手順を整理すると、相談内容が伝わりやすくなります。

関連記事

Accessのプロパティシート

Accessフォームの作成方法

Accessのフォームフィルター

Accessのデータ入力用フォーム


参考情報

1. Form.ScrollBars
https://learn.microsoft.com/en-us/office/vba/api/access.form.scrollbars

2. Form.NavigationButtons
https://learn.microsoft.com/en-us/office/vba/api/access.form.navigationbuttons

3. Form.DataEntry
https://learn.microsoft.com/en-us/office/vba/api/access.form.dataentry

4. SubForm.Form
https://learn.microsoft.com/en-us/office/vba/api/access.subform.form

5. Form.MouseWheelイベント
https://learn.microsoft.com/en-us/office/vba/api/access.form.mousewheel(even)

6. Form.MouseWheelプロパティ
https://learn.microsoft.com/en-us/office/vba/api/access.form.mousewheel(property)

7. Accessアプリケーションの配布
https://support.microsoft.com/en-us/access/deploy-an-access-application

TOP