概要
| この記事の結論 Accessフォームのコントロールを常に隠すには、デザインビューで対象を選び、「可視」を「いいえ」に設定します。条件に応じて切り替える場合はVBAのVisibleを使い、選択値の更新後とレコード移動時の両方で判定します。非表示にしても保存データは消えず、閲覧権限の制限にもならない点に注意しましょう。 Visibleとは、フォームなどのコントロールを表示するかどうかを指定するプロパティです。 |
この記事でわかること
- 常時非表示は可視をいいえにする
- 条件変更とレコード移動で再判定する
- フォーカスとラベルも確認する
- 画面の非表示と権限制御を区別する
この記事の主な内容
- 非表示と使用不可と編集ロックの違い
- プロパティで常に非表示にする
- 条件に応じてVBAで表示を切り替える
- 切替漏れと実行時エラーを防ぐ
- 帳票フォームとデータシートでの注意点
- 隠した値の扱いと公開前の確認
- よくある質問
想定読了時間:約12分~15分
非表示と使用不可と編集ロックの違い
フォームの項目を見せたくない場合はVisibleを使います。表示を残して編集だけを禁止する場合はLocked、操作対象から外す場合はEnabledが候補です。どの操作を止めたいかによって設定を選びます。[1][3][4]
| 設定 | 主な役割 | 利用例 |
|---|---|---|
| 可視 Visible | 画面に表示するか | 条件に該当しない入力欄を隠す |
| 使用可能 Enabled | 利用者が操作できるか | 現時点で使わない操作を無効にする |
| 編集ロック Locked | 内容の編集を許可するか | 内容を見せて変更だけを防ぐ |
見せたままコピーさせたい場合
テキストボックスの内容を選択・コピーできるようにするなら、通常は使用可能を[はい]、編集ロックを[はい]にします。使用可能を[いいえ]にすると、同じ操作感にはなりません。非表示にすると、当然ながら画面から値を読むこともできなくなります。

非表示はデータの削除や権限制御ではない
VisibleをFalseにしても、テキストボックスの値や連結先の保存データが自動的に削除されることはありません。計算や他の処理で参照する部品を、画面だけ隠す用途もあります。常に隠す項目だからといって、参照関係を調べず削除しないでください。
また、フォームで項目を隠しても、元テーブルや別フォームから読める可能性があります。機密データを利用者に見せない要件では、データソースやファイルの権限を含めて設計します。画面を簡潔にする設定としての非表示と、アクセス制限を区別しましょう。
プロパティで常に非表示にする
常に表示しない欄は、デザインビューで[可視]を[いいえ]に設定します。変更前にテキストボックスの名前を控え、どの部品を変更したか記録します。以下は「txtその他」という欄を隠す例です。[1][2]
| 手順 | 操作 | 確認すること |
|---|---|---|
| 1 | フォームをデザインビューで開く | 業務用原本ではなくコピーで試す |
| 2 | txtその他を選択する | ラベルではなく入力欄を選ぶ |
| 3 | F4でプロパティシートを開く | 名前がtxtその他である |
| 4 | [書式]の[可視]を[いいえ]にする | 非表示の設定になる |
| 5 | 保存しフォームビューに切り替える | 対象欄が見えなくなる |

デザインビューで見えるのは異常ではない
非表示にしたコントロールも、設計を編集するためにデザインビューでは確認できます。利用者の操作画面でどう見えるかはフォームビューで判断してください。設定対象がフォーム全体やセクションになっていると、意図しない範囲を隠す原因になります。
ラベルや関連ボタンも確認する
入力欄と一緒に隠れる付属ラベルがある一方、独立して配置したラベルや説明文は別のコントロールです。入力欄だけ消えて見出しが残った場合は、その名前と可視設定を確認します。関連する参照ボタンなども、画面の意味が通る状態にそろえます。
非表示にしても、周囲の部品が自動で詰まるとは限りません。空白が大きく残る場合は、入力欄の配置やセクション構成を見直します。多数の項目を条件で切り替える画面では、タブや別画面へ分ける方が分かりやすい場合もあります。
条件に応じてVBAで表示を切り替える
「区分がその他のときだけ補足欄を出す」場合は、選択値に応じてVisibleを変更します。選択した直後だけでなく、フォームを開いたときやレコードを移動したときにも表示を合わせる必要があります。[1][6][7]
サンプルの前提をそろえる
単票の連結フォームに、次の部品を用意します。cbo区分の値は数値IDとし、「その他」のIDを4にします。画面に表示される「その他」という文字と、実際に保存される4を混同しないでください。実際の区分マスターが異なる場合は条件を変更します。
| コントロール名 | 種類と役割 | 設定の前提 |
|---|---|---|
| cbo区分 | 区分を選ぶコンボボックス | 常に表示・使用可能。保存値4がその他 |
| txtその他 | 補足を入力するテキストボックス | 必要に応じて表示する |
| lblその他 | 独立した説明ラベル | txtその他と同じ条件で表示 |

表示処理を1か所にまとめる
フォームの[レコード移動時]とcbo区分の[更新後処理]を[イベント プロシージャ]に設定し、フォームのモジュールへ以下を記述します。すでに同名イベントがある場合は、新しいイベントを重ねて作らず、既存処理へ共通処理の呼び出しを組み込みます。
Private Sub UpdateOtherVisibility()
Dim showOther As Boolean
Dim activeCtl As Control
showOther = (Nz(Me!cbo区分.Value, 0) = 4)
If Not showOther Then
‘ 初期表示時はActiveControlを取得できない場合がある
On Error Resume Next
Set activeCtl = Me.ActiveControl
On Error GoTo 0
If Not activeCtl Is Nothing Then
If activeCtl.Name = “txtその他” Then
Me!cbo区分.SetFocus
End If
End If
End If
Me!txtその他.Visible = showOther
Me!lblその他.Visible = showOther
End Sub
Private Sub Form_Current()
UpdateOtherVisibility
End Sub
Private Sub cbo区分_AfterUpdate()
UpdateOtherVisibility
End Sub
Nzは未選択のNullを0として判定するために使っています。この例では0を「その他以外」と扱います。On Error Resume Nextの範囲は、初期表示時のActiveControl取得だけに限定しました。非表示処理全体のエラーを無視するコードにはしていません。

プログラムから選択値を変える場合
VBAでcbo区分の値を代入しても、そのコントロールのAfterUpdateが自動実行されるとは限りません。プログラムで値を変更する経路がある場合は、代入後にUpdateOtherVisibilityを明示的に呼びます。クリックで変える経路だけをテストしないことが重要です。[7]
切替漏れと実行時エラーを防ぐ
表示が前のレコードのまま残る場合は、Currentで再判定しているかを確認します。選択肢を変更した直後は正しくても、フォームを開き直すと違う状態になる場合は、初期表示やデータ読込の順序も見直します。
入力中のコントロールを先に非表示にしない
フォーカスとは、キーボード入力を受け取る位置です。フォーカスがあるコントロールに対してVisibleをFalseにすると、エラーになります。先に表示中かつ使用可能な別コントロールへSetFocusで移動し、その後で隠します。[8]
先ほどの例では、txtその他にフォーカスがある場合だけcbo区分へ移しています。移動先まで非表示・使用不可にすると、この回避策は機能しません。別の部品名へ置き換える場合は、移動先を常に操作可能にする前提も引き継いでください。

| 症状 | 確認する点 | 対応の方向性 |
|---|---|---|
| 変更後は正しいが移動後は違う | Form_Current | 移動時にも共通処理を呼ぶ |
| 未選択時に判定が合わない | Nullの扱い | 未選択時の表示仕様を決める |
| 非表示にする行でエラー | フォーカス | 先に別の使用可能な欄へ移す |
| ラベルだけが残る | 独立ラベルのVisible | 名前を確認して同じ条件で同期 |
| VBAで値を変えると更新されない | 処理の呼出経路 | 代入後に表示更新を呼ぶ |
| 他の操作後に再表示される | 別イベントの設定 | Visibleを書き換える箇所を調査 |
コードが実行されないときは設定を確認する
イベント欄が空のままでは、コードを書いただけで期待するタイミングに呼ばれないことがあります。また、信頼されていないファイルではコードの実行が制限される場合があります。出所を確認できるファイルについて、組織の運用に沿って信頼設定を確認します。
表示条件が複雑なAccessフォームの改修が必要な場合は
まずは本記事の手順をコピー上で試し、設定と保存先を確認してください。既存VBAや複数の画面、外部データへの影響が分からない場合は、変更範囲を調査してから改修する方法が適しています。
Accessの教科書ではAccessの開発・保守・改修やSQL Serverとの連携を扱っています。ご相談時には、発生する画面、操作手順、エラー内容、利用環境を整理すると状況を共有しやすくなります。
帳票フォームとデータシートでの注意点
単票フォームで動くコードを、そのまま一覧画面へ適用すると意図が変わることがあります。帳票フォームは同じコントロールを複数レコード分繰り返して表示します。Visibleを変更すると、同じ欄の全行へ影響し、特定行だけの非表示にはなりません。
行ごとの表示は画面の設計を見直す
「その他の行だけ補足を見せたい」場合は、一覧では結果を演算式で空欄にし、詳細入力は単票フォームで行うなどの構成が考えられます。演算式で表示を空欄にしても、元データの削除や権限制御にはなりません。編集可能な入力欄を行ごとに隠す要件とは区別します。
条件付き書式は、条件に応じて色などを変える用途で検討できます。ただし、Visibleによる完全な非表示と同じ機能ではありません。文字と背景を同じ色にして見えなくする方法は、コピーや別表示で読める可能性があり、秘密情報の保護には使えません。

データシートの列はColumnHiddenで制御する
フォームビューでVisibleをFalseにしても、対応するデータシートの列が同じように隠れるわけではありません。データシートではColumnHiddenを使います。次の例は、データシート表示の対象フォームにあるtxtその他の列を隠す場合です。[5]
Me!txtその他.ColumnHidden = True
表示形式によって使う設定が違うため、単票・帳票・データシートのどの画面で見せないのかを仕様に書きます。利用者がビューを切り替えられる場合は、切替後の状態も確認してください。
隠した値の扱いと公開前の確認
その他欄へ文字を入力した後に区分を変更しても、VisibleをFalseにしただけでは値は残ります。再びその他へ戻したときに復元したいなら保持が適しています。一方、区分変更後に不要な補足を集計や帳票へ出したくないなら、保存・表示条件を別途決めます。
| 扱い | 向いている場合 | 注意点 |
|---|---|---|
| 値を保持する | 選択を戻したとき再入力を減らしたい | 帳票や集計で対象条件を適用 |
| 確認して消去する | 非該当の値を残してはいけない | 保存データの更新として設計 |
| 入力を止めて修正を促す | 区分と補足の整合が必須 | 利用者が直せる案内を用意 |

必須条件と矛盾しないようにする
その他の場合だけ入力必須なら、補足欄を常時必須にする設定では整合しません。区分に応じて入力条件を確認する必要があります。下の例はフォームの更新前処理に追加する条件です。既存のForm_BeforeUpdateがある場合は、その中へ統合します。[9]
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Nz(Me!cbo区分.Value, 0) = 4 Then
If Len(Trim(Nz(Me!txtその他.Value, “”))) = 0 Then
Cancel = True
UpdateOtherVisibility
MsgBox “その他の内容を入力してください。”, vbExclamation
Me!txtその他.SetFocus
End If
End If
End Sub
このチェックは当該フォームから保存する経路を対象にしています。他の画面やインポートも含めて守るべき条件なら、テーブルや接続先DB側の制約も検討します。画面の表示条件だけでデータ整合性を保証しないことが大切です。
表示の往復とレコード移動を試す
未選択で開く、その他を選ぶ、文字を入力する、別の区分へ戻す、再びその他へ戻す、別レコードへ移動する、開き直す、という順で確認します。表示状態と値の保持が仕様どおりかをそれぞれ見ます。条件を片方向へ変えるテストだけでは、切替漏れを見落とします。

非表示にする項目が増えた場合は、Visibleを書き換える処理を分散させず、表示条件を共通処理へまとめます。どの条件で何を表示するかが追える状態を保つと、将来の区分追加や画面変更にも対応しやすくなります。
よくある質問
削除されません。Visibleは表示の設定です。値を消す必要がある場合は、利用者確認や保存処理を含めて別に設計します。
入力欄と独立したラベルなど、別コントロールになっている可能性があります。対象の名前を確認し、同じ表示条件で切り替えます。
選択肢のAfterUpdateだけで判定し、Form_Currentで再判定していない可能性があります。共通処理を両方から呼ぶ設計を確認してください。
Visibleの変更は同じコントロールの全行へ作用します。行ごとの表示が必要なら、一覧と詳細を分けるなど別の構成を検討します。
対象にフォーカスがあることが代表的な原因です。表示中で使用可能な別のコントロールへ移動してから非表示にします。
十分ではありません。別の画面やデータソースへ直接アクセスできる可能性があります。データベースやファイルの権限も設計してください。
表示条件が複雑なAccessフォームの改修が必要な場合は
まずは本記事の手順をコピー上で試し、設定と保存先を確認してください。既存VBAや複数の画面、外部データへの影響が分からない場合は、変更範囲を調査してから改修する方法が適しています。
Accessの教科書ではAccessの開発・保守・改修やSQL Serverとの連携を扱っています。ご相談時には、発生する画面、操作手順、エラー内容、利用環境を整理すると状況を共有しやすくなります。
参考情報
[1] Visible
https://learn.microsoft.com/en-us/office/vba/api/access.textbox.visible
[2] 可視プロパティ
https://support.microsoft.com/en-us/access/visible-property
[3] Locked
https://learn.microsoft.com/en-us/office/vba/api/access.textbox.locked
[4] Enabled
https://learn.microsoft.com/en-us/office/vba/api/access.textbox.enabled
[5] ColumnHidden
https://learn.microsoft.com/en-us/office/vba/api/access.textbox.columnhidden
[6] Current
https://learn.microsoft.com/en-us/office/vba/api/access.form.current
[7] AfterUpdate
https://learn.microsoft.com/en-us/office/vba/api/access.combobox.afterupdate-event
[8] SetFocus
https://learn.microsoft.com/en-us/office/vba/api/access.textbox.setfocus
[9] BeforeUpdate
https://learn.microsoft.com/en-us/office/vba/api/access.form.beforeupdate-event
[12] 条件付き書式
https://support.microsoft.com/en-us/access/copy-the-conditional-formatting-of-a-control