サブフォーム×条件表示:カスタムUIの極意

Access

こんにちは、なかぜんです。
Accessでのフォーム設計、使いやすさにこだわってますか?
「データが多くて表示がごちゃごちゃ」「状況に応じて見せたい項目が違う」――そんな悩み、実は多くの現場で聞きます。

今回はそんな悩みを解決する「サブフォーム×条件表示」というカスタムUIテクニックを紹介します。

上手に使えば、画面がスッキリ!ユーザーの迷いも減って、業務効率がグッとアップしますよ。


1. サブフォーム×条件表示って何?

条件によってサブフォームを切り替える

Accessでは、サブフォームを使って関連データを一覧表示できます。でも、条件に応じて「表示・非表示」や「中身を切り替える」といった動きは、ちょっと工夫が必要です。

用途の一例

  • 顧客区分によって、表示する項目が変わる
  • ステータスによって、入力可能な欄を制限する
  • 特定の処理モードでのみサブフォームを表示

つまり、「見せたいときだけ見せる」――これがUIの基本でもあり、業務の使い勝手を左右するポイントなのです。


2. 基本の実装パターン

① コントロールのVisibleプロパティで制御

最もシンプルな方法は、Me.サブフォーム名.Visible = True/Falseで制御することです。

' 顧客区分によってサブフォームを切り替え
Private Sub 顧客区分_AfterUpdate()
    Select Case Me.顧客区分
        Case "法人"
            Me.sfrm_法人情報.Visible = True
            Me.sfrm_個人情報.Visible = False
        Case "個人"
            Me.sfrm_法人情報.Visible = False
            Me.sfrm_個人情報.Visible = True
        Case Else
            Me.sfrm_法人情報.Visible = False
            Me.sfrm_個人情報.Visible = False
    End Select
End Sub

ポイント:AfterUpdateイベントで実行することで、フォーム変更後に即時反映されます。

② SourceObjectで動的に差し替え

より柔軟に表示内容を変えたい場合は、SourceObjectプロパティを使って差し替える方法が便利です。

' 処理区分に応じて、サブフォームの中身を差し替え
Private Sub 処理区分_AfterUpdate()
    Select Case Me.処理区分
        Case "受注"
            Me.sfrm_表示用.SourceObject = "F_受注一覧"
        Case "出荷"
            Me.sfrm_表示用.SourceObject = "F_出荷一覧"
        Case "請求"
            Me.sfrm_表示用.SourceObject = "F_請求一覧"
        Case Else
            Me.sfrm_表示用.SourceObject = ""
    End Select
End Sub

ひとつのサブフォーム枠を使い回すことで、画面がシンプルになります。


3. UI設計上の工夫と注意点

① レイアウトで混乱を避ける

サブフォームのサイズや位置は、表示のたびに変わらないように設計しておきましょう。非表示にする代わりに空白を残すなどの工夫も有効です。

② 初期状態をしっかり制御する

フォームのLoadイベント内で初期表示の設定を必ず行っておきましょう。

Private Sub Form_Load()
    Call 顧客区分_AfterUpdate
End Sub

③ コントロールの名前間違い

VisibleやSourceObjectを操作する対象は、コントロール名(=サブフォームを貼り付けた枠の名前)であることに注意。

例:フォーム「F_受注一覧」をサブフォームにした場合でも、

  • Me.F_受注一覧.Visible → ×
  • Me.sfrm_表示用.Visible → ○

4. 応用編:ナビゲーションUIと組み合わせる

たとえば、以下のような「カテゴリ別ナビゲーションボタン」と組み合わせると、疑似的なメニューUIが構築できます。

Private Sub btn_売上_Click()
    Me.sfrm_表示用.SourceObject = "F_売上"
End Sub

Private Sub btn_在庫_Click()
    Me.sfrm_表示用.SourceObject = "F_在庫"
End Sub

タブ制御やナビゲーションフォームでは制限の多い場合、この方式なら柔軟に構成可能です。


5. よくあるトラブルと対処法

  • SourceObjectのフォームが開かない → 「F_売上」など、名前のスペルミスをチェック
  • レコードソースが空 → 元フォームのレコードソースが正しく設定されているか確認
  • フォーム間のリンクが失敗する → リンクマスターフィールド/リンクチャイルドフィールドを見直す

これらをチェックするだけで、かなりの不具合を未然に防げます。


6. まとめ:業務効率をUIから支える

今回は「サブフォーム×条件表示」というテーマで、実務に役立つUIの設計術をご紹介しました。

  • サブフォームのVisibleプロパティで表示・非表示を切り替える
  • SourceObjectで動的に表示内容を変える
  • ナビゲーションとの組み合わせで、カスタムメニューも可能

こういった工夫を積み重ねることで、業務に本当にフィットするUIを作れるようになります。

それでは、またお会いしましょう!
Access業務効率化の味方、なかぜんでした。

¥2,420 (2025/05/28 21:29時点 | Amazon調べ)
\楽天ポイント4倍セール!/
楽天市場
\商品券4%還元!/
Yahooショッピング