Accessでナビゲーションメニュー付きフォームを作る方法【VBA】

更新日:2026/7/25Office

Microsoft Accessでメインフォームの左側にナビゲーションメニューを配置し、メイン領域にサブフォームを表示する使いやすいインターフェースを作成する手順を詳しく解説します。

Accessでナビゲーションメニュー付きフォームを作成した完成画面

対象OS Windows 10、Windows 11

ナビゲーションメニューの必要性と効果

Accessで複数のフォームや機能を持つデータベースアプリケーションを作成する際、ユーザーが直感的に操作できるナビゲーションメニューは重要な要素です。従来の方法では、各フォームを個別に開く必要があり、ユーザビリティの面で課題がありました。

この記事では、メインフォームの左にナビゲーションメニューを配置し、右側のメイン領域にサブフォームを動的に表示する手法を紹介します。これにより、一つの画面で複数の機能にアクセスできる、モダンなアプリケーションライクなインターフェースを実現できます。

この記事で作る画面と、始める前の準備

この記事の手順を最後まで進めると、左側に「受注管理」「顧客管理」などのボタンが縦に並び、ボタンを押すと右側の表示だけが切り替わる画面が完成します。業務システムでよく見かける、いわゆるメインメニュー画面です。

仕組みはシンプルで、右側に「サブフォーム」という枠を1つ置き、ボタンを押すたびにその枠の中身を差し替えているだけです。画面全体を開き直しているわけではないため、切り替えても左側のメニューは表示されたままになります。

始める前に、次の2点を準備してください。

  • 右側に表示したいフォーム(「受注管理」「顧客管理」など)を、あらかじめ作成しておくこと
  • 最後にVBAを1行だけ記述するため、Accessでマクロ・VBAが実行できる状態になっていること

Accessには標準機能として「ナビゲーションフォーム」も用意されていますが、こちらはタブ形式のメニューが自動生成されるため、配置やデザインの自由度が限られます。この記事の方法はボタンを自分で配置するので、メニューの位置・色・大きさを自由に設計できます。

メインフォームの作成とレイアウト設定

まず、ナビゲーションメニューとサブフォームを配置するためのメインフォームを作成し、適切なレイアウトを設定します。

  1. Accessを起動し、[作成]タブから[フォーム デザイン]を選択してデザインビューでフォームを作成します。
  2. フォームのプロパティを開き、[書式]タブで「既定のビュー」を「単票フォーム」に設定します。
  3. フォームのサイズは、想定する画面解像度に合わせて適切に設定してください。

  4. フォームの背景色を設定し、全体のサイズを調整します。メニュー領域とメイン領域を分けるため、適切な幅を確保します。
    Accessのデザインビューでフォーム全体のレイアウトを設定する画面
    フォーム全体のレイアウトを設計します。
  5. 左側にナビゲーションメニュー用の領域、右側にサブフォーム表示用のメイン領域を確保できるように調整します。
    フォームを左のメニュー領域と右のメイン領域に分割した状態
    メニュー領域とメイン領域を明確に分けます。
  6. ナビゲーションメニュー領域に背景色付きのボックス(四角形)を設置すると、メニューの視認性やデザイン性が向上します。(ボックスは最背面に設定してください)

    フォーム全体の見た目をさらに作り込みたい場合は、Microsoft Accessでフォームデザインをスタイリッシュにカスタマイズする方法もあわせてご覧ください。背景画像やコントロールの透明化でモダンな画面に仕上げる手順を解説しています。

ナビゲーションメニューボタンの作成

左側のメニュー領域にナビゲーション用のボタンを配置し、各ボタンに適切なスタイルを設定します。

  1. [フォーム デザイン]タブから[ボタン]コントロールを選択し、左側のメニュー領域に最初のナビゲーションボタンを配置します。
  2. ボタンのプロパティを開き、「標題」に「受注管理」などの適切な名前を入力し、「名前」プロパティも設定します。
  3. ボタンのスタイルを統一するには、最初のボタンの書式をコピーして他のボタンに適用すると効率的です。また、[配置]タブの[サイズ/間隔]や[配置]を使って、ボタンの位置や間隔を揃えるとよいでしょう。

    「名前」プロパティは、この段階で確定させておくことをおすすめします。あとで記述するVBAのプロシージャ名は「名前_Click」という形でボタン名と結び付いているため、名前を変更するとボタンを押しても反応しなくなります。

  4. 同様にして、必要な数のナビゲーションボタンを縦に配置します。ボタン間の間隔を統一して見た目を整えます。
    メニュー領域に複数のナビゲーションボタンを縦に並べた画面
    複数のナビゲーションボタンを配置します。
  5. 各ボタンのスタイルを統一するため、背景色、フォント、サイズなどのプロパティを調整します。
    ボタンの背景色とフォントを設定してスタイルを統一した画面
    ボタンの外観を統一します。
  6. ボタンの見た目にこだわりたい場合は、Microsoft Accessでボタンデザインをスタイリッシュにカスタマイズする方法で、画像を使ったボタンの作り方を解説しています。

サブフォームの設置とVBAによる画面切り替え

メイン領域にサブフォームコントロールを配置し、ナビゲーションボタンと連携させる設定を行います。

  1. [デザイン]タブから[サブフォーム/サブレポート]コントロールを選択し、右側のメイン領域に配置します。
    メイン領域にサブフォームコントロールを配置する操作画面
    [サブフォーム]を配置します。
  2. サブフォームウィザードで「既存のフォームを使用する」を選択し、最初に表示したいフォームを選んで設定します。
    サブフォームウィザードで既存のフォームを選択する画面
    既定のフォームを選択します。
  3. サブフォームに表示するフォームは、事前に作成しておく必要があります。

  4. サブフォームのプロパティで「名前」を「subMain」などの識別しやすい名前に設定します。
    サブフォームコントロールの名前をsubMainに設定するプロパティ画面
    サブフォームをメイン領域に配置します。
  5. 各ナビゲーションボタンのクリックイベントにVBAコードを記述し、サブフォームの表示処理を設定すれば完了です。
    ボタンのクリックイベントにVBAコードを記述する画面
    ボタンクリック時の動作を設定します。

VBAコードの実装例

各ナビゲーションボタンのクリック時イベントに設定するVBAコードの例を紹介します。この方法により、動的にサブフォームの内容を切り替えることができます。

(コード例)ボタン「btn_受注管理」をクリックすると、サブフォームに「受注管理」フォームを表示する

Private Sub btn_受注管理_Click()
 Me.subMain.SourceObject = "受注管理"
End Sub

やっていることは1行だけで、「subMainという枠に、受注管理フォームを表示しなさい」という指示です。ボタンが増えても、この1行のフォーム名を変えるだけで対応できます。

(コード例)ボタンが増えても管理しやすいように、切り替え処理を1か所にまとめる書き方

Private Sub btn_受注管理_Click()
 Call SwitchForm("受注管理")
End Sub

Private Sub btn_顧客管理_Click()
 Call SwitchForm("顧客管理")
End Sub

' 共通の切り替え処理(フォームモジュールの末尾に追加します)
Private Sub SwitchForm(strFormName As String)
 If Me.subMain.SourceObject <> strFormName Then
  Me.subMain.SourceObject = strFormName
 End If
End Sub

各ボタンは共通処理を呼び出すだけになるため、あとから表示方法を変更したくなったときも、修正するのは共通処理の1か所だけで済みます。同じフォームが表示済みの場合は読み込みを行わないため、同じボタンを連続で押したときの再読み込みも防げます。

他にも、ナビゲーションメニュー内のボタンに「レコードソースの切り替え」や「クエリの実行」を割り当てることで、メイン領域に表示される情報を切り替えることもできます。

こんなときは:よくあるつまずきポイントと対処法

ナビゲーションメニューの作成でつまずきやすいのは、ほとんどが「名前の不一致」と「VBAが実行できない設定」の2つです。症状ごとの対処法をまとめます。

  • ボタンをクリックしても右側の表示が切り替わらない
    原因:ボタンの「名前」プロパティと、VBAのプロシージャ名(名前_Click)が一致していない可能性があります。ボタンを作成したあとに名前を変更すると、イベントが呼び出されなくなります。
    → プロパティシートでボタンの「名前」を確認し、VBAのプロシージャ名と一致しているか見比べてください。一致していない場合は、プロパティの[イベント]タブで「クリック時」に[イベント プロシージャ]が設定されているかもあわせて確認します。
  • 実行時エラーが表示され、サブフォームが切り替わらない
    原因:SourceObjectに指定したフォーム名が、実際のフォーム名と違っている可能性があります。全角と半角、スペースの有無は区別されます。
    → ナビゲーションウィンドウでフォーム名を確認し、コード内の文字列と完全に一致させてください。サブフォームコントロール側の名前(本記事では subMain)の綴りもあわせて確認します。
  • ボタンを押しても何も起こらず、エラーも出ない
    原因:Accessのセキュリティ設定によってVBAが無効化されている場合があります。ファイルを開いた際に画面上部へ黄色いメッセージバーが表示されていたら、この状態です。
    → メッセージバーの[コンテンツの有効化]をクリックします。毎回表示されるのを避けたい場合は、[ファイル]>[オプション]>[トラスト センター]>[トラスト センターの設定]>[信頼できる場所]で、データベースの保存先フォルダーを登録してください。
  • サブフォームに表示した画面の一部が切れる・スクロールバーが出る
    原因:サブフォームコントロールの枠より、表示するフォームのほうが大きくなっています。
    → 表示する側のフォームをデザインビューで開き、幅と高さをサブフォーム枠に収まるサイズに調整します。あわせて、そのフォームの「既定のビュー」が意図した形式(単票フォーム・帳票フォームなど)になっているかも確認してください。
  • 表示をいったん空にして、初期状態に戻したい
    原因:SourceObjectには常に直前のフォームが残るため、明示的に消す指示が必要です。
    Me.subMain.SourceObject = "" のように空の文字列を設定すると、サブフォームの表示をクリアできます。「ホーム」ボタンなどに割り当てておくと便利です。

実際に作ってみると、この方法の利点は「画面が切り替わってもメニューが消えない」ことにあると感じます。ユーザーは今どこにいるのかを見失わずに操作できます。なお、メニューを左側ではなく上部のタブとして並べたい場合は、AccessのタブコントロールをVBAでカスタマイズする方法で、標準のタブを非表示にしてボタンで切り替える手法を解説しています。目的に応じて使い分けてください。

関連サイト(外部)

サブフォームを含むフォーム (一対多のフォーム) を作成する

確認環境 Windows 11 / Microsoft 365版 Access(Access 2019・2021でも同様の手順で操作できます)

最終更新 2026年7月25日