「ボタンを押すだけで別のフォームを開きたい」「一覧フォームで選択した行の詳細を自動表示したい」——Accessのマクロ機能を使えば、こうした処理をコードを1行も書かずに実現できます。マクロビルダーは、アクション(操作命令)をリストから選んでパラメータを入力していくビジュアルな自動化ツールです。VBAよりも敷居が低く、フォームやレポートの基本操作を素早く自動化するのに適しています。
AccessのマクロはVBAと似ていますが異なります。VBAはプログラミング言語で記述する汎用的な自動化手段であり、マクロはAccessが用意したアクション一覧から選択するノーコードの自動化手段です。コードを書けない方でも業務フローの自動化ができ、MOS Access試験でも独立したスキル領域として出題されます。
本記事では、Accessマクロとは何か・VBAとの違い・マクロビルダーの起動方法、よく使うアクション(OpenForm・ApplyFilter・MessageBox・GoToControl・CloseWindow)の設定手順、If条件分岐を使った動的なフロー制御、実務別マクロパターン5選、よくあるつまずきと対処法、MOS試験の出題ポイントまでを解説します。
Accessのマクロとは何か
Accessのマクロとは、アクション(OpenForm・MessageBoxなど)を順番に並べて「このとき→この処理をする」という手順書を作るノーコードの自動化機能です。ナビゲーションウィンドウの「マクロ」オブジェクトとして独立して作成でき、ボタンクリック・フォームを開いたとき・フォームを閉じるときなど各種イベントに割り当てられます。
| 比較項目 | マクロ | VBA |
|---|---|---|
| 作成方法 | マクロビルダー(ビジュアル選択) | VBEでコード記述 |
| プログラミング知識 | 不要 | 必要 |
| 条件分岐 | Ifブロックで対応可 | If~ElseIf~Endで柔軟に制御 |
| 繰り返し処理 | ForEachRecord・WhileループなどMacroアクション一部対応 | For~Next・Do~Loopで完全制御 |
| エラーハンドリング | OnErrorアクションで一部対応 | On Error GoTo等で詳細制御 |
| デバッグ | シングルステップ実行が可能 | ブレークポイント・イミディエイトウィンドウ |
| MOS試験での位置付け | 出題あり(マクロ作成・割り当て・実行) | エキスパートで一部出題 |
マクロはAccessデータベースに専用のオブジェクトとして保存されます。ナビゲーションウィンドウの「マクロ」グループに表示され、ダブルクリックで直接実行できます。また、フォームやレポートのイベントプロパティ(OnClick・OnLoadなど)にマクロ名を指定することでイベント駆動の自動化が実現します。
マクロビルダーの起動方法
新しいマクロオブジェクトとして作成する
- リボン「作成」タブ→「マクロとコード」グループにある「マクロ」ボタンをクリックする
- マクロビルダーウィンドウが開く
- 「新しいアクションの追加」ドロップダウンから実行したいアクションを選択する
- 必要なパラメータを入力してアクションを設定する
- 上書き保存(Ctrl+S)でマクロに名前を付けて保存する
フォームのイベントにマクロを埋め込む
- フォームをデザインビューで開く
- コントロールまたはフォーム自体を選択し、プロパティシートの「イベント」タブを開く
- イベント(例:「クリック時」)の欄にある「…」ボタンをクリックする
- 「選択したビルダー」ダイアログで「マクロビルダー」を選択して「OK」を押す
- マクロビルダーが開き、そのイベント専用の埋め込みマクロが作成される
埋め込みマクロはフォームやレポートのオブジェクト内部に保存されるため、ナビゲーションウィンドウのマクロ一覧には表示されません。フォームを別のデータベースにインポートすると埋め込みマクロも一緒に移動する利点があります。一方、独立したマクロオブジェクトは複数のコントロールから共通利用できます。
よく使うマクロアクション一覧
| アクション名 | 機能 | 主な用途 |
|---|---|---|
| OpenForm | フォームを開く | 詳細フォームを開く・データ入力フォームの起動 |
| CloseWindow | フォーム・レポートを閉じる | 「閉じる」ボタンへの割り当て |
| ApplyFilter | フォームにフィルタを適用する | 選択条件に合わせてレコードを絞り込む |
| RemoveAllFilters | フィルタを解除する | 「すべて表示」ボタンへの割り当て |
| MessageBox | メッセージダイアログを表示する | 削除確認・完了通知・警告の表示 |
| GoToControl | 指定コントロールにフォーカスを移す | 入力完了後に次のフィールドへカーソルを移動 |
| GoToRecord | 特定のレコードに移動する | 先頭・末尾・前後・新しいレコードへの移動 |
| FindRecord | 条件に一致するレコードを検索する | 検索フォームからの絞り込み |
| SetValue | コントロールの値を設定する | フォームの値を自動入力・初期値の設定 |
| OpenReport | レポートを開く・印刷する | 「印刷」ボタンへの割り当て・プレビュー表示 |
| RunSQL | SQLを実行する | アクションクエリをマクロから実行する |
| StopMacro | マクロの実行を終了する | 条件分岐でマクロを途中終了する |
| OnError | エラー発生時の処理先を指定する | エラー時に別のアクションへ制御を移す |
主要アクションの設定手順
OpenForm(フォームを開く)
最も使用頻度の高いアクションです。「フォーム名」「ビュー」「フィルタ条件」「データモード」の4つのパラメータで動作を制御します。
| パラメータ | 内容 | よく使う値 |
|---|---|---|
| フォーム名 | 開くフォームの名前 | ナビゲーションウィンドウのフォーム名と完全一致させる |
| ビュー | 開くビュー種類 | フォームビュー / データシートビュー / デザインビュー |
| フィルタ名 | 適用するクエリ名 | 既存のクエリ名(省略可) |
| Where条件式 | レコードを絞り込む条件 | 例:[顧客ID]=[Forms]![顧客一覧]![顧客ID] |
| データモード | フォームの編集可否 | 追加のみ / 編集 / 読み取り専用 |
| ウィンドウモード | フォームの表示方法 | 標準 / 非表示 / アイコン / ダイアログ |
Where条件式に別フォームの値を参照する式を入力することで、一覧フォームで選択中のレコードに対応する詳細フォームだけを開くことができます。参照構文は [Forms]![フォーム名]![コントロール名] です。
MessageBox(メッセージダイアログを表示する)
- マクロビルダーで「新しいアクションの追加」から「MessageBox」を選択する
- 「メッセージ」欄に表示したいテキストを入力する(例:「保存しました。」)
- 「ビープ音」欄でビープ音の有無を選択する(はい / いいえ)
- 「種類」欄でアイコンを選択する(なし / 情報 / 警告! / 重要)
- 「タイトル」欄にダイアログのウィンドウタイトルを入力する(省略時はMicrosoft Access)
MessageBoxは「OK」ボタンのみのシンプルなダイアログです。「はい/いいえ」の選択を必要とする場合はVBAのMsgBox関数を使う必要があります。マクロで削除確認を実装したい場合は、If条件分岐と組み合わせた設計が必要です。
ApplyFilter(フィルタを適用する)
- 「ApplyFilter」アクションを追加する
- 「フィルタ名」欄:既存のクエリを使う場合はクエリ名を入力する(省略可)
- 「Where条件式」欄:絞り込み条件式を入力する(例:
[担当者ID]=[Forms]![メニュー]![担当者ID]) - 「コントロール名」欄:複数値フィールドの場合のみ使用する(通常は省略)
ApplyFilterはフォームが既に開いている状態でないと動作しません。新しくフォームを開いて同時にフィルタをかけたい場合は、OpenFormのWhere条件式パラメータを使う方が適切です。
If条件分岐を使ったフロー制御
マクロビルダーの「Ifブロック」を使うと、条件によって実行するアクションを切り替えられます。Excelの条件分岐と同じ考え方で、「If~Else If~Else~End If」の構造で記述します。
Ifブロックの追加手順
- マクロビルダーで「新しいアクションの追加」ドロップダウンから「If」を選択する(またはリボンの「If」ボタンをクリックする)
- 「If」行の右側に条件式を入力する(例:
[Forms]![受注フォーム]![数量] > 0) - Ifブロック内に「新しいアクションの追加」が表示されるので、条件が真のときのアクションを追加する
- 「Else を追加」リンクをクリックして偽のときのアクションを追加する(省略可)
- 「Else If を追加」で条件を増やすこともできる
条件式の書き方
Ifの条件式はAccessの式構文と同じで、True(-1)を返す式を記述します。よく使う条件式の書き方を示します。
[Forms]![フォーム名]![コントロール名] = ""→ テキストボックスが空のときIsNull([Forms]![フォーム名]![コントロール名])→ 値が未入力のとき[Forms]![フォーム名]![ステータス] = "完了"→ ステータスが「完了」のときMsgBox("削除してよいですか?", vbYesNo) = vbYes→ VBA関数を利用した確認(埋め込みマクロでのみ推奨)
純粋なマクロでMsgBoxの戻り値を条件にするには、VBAを呼び出す必要があります。このため「削除確認ダイアログ→はい/いいえで分岐」のパターンはVBAで実装する方が現実的です。マクロだけで実現したい場合はMessageBoxで警告を表示した後、ユーザーに判断を委ねる設計にする必要があります。
実務別マクロパターン5選
パターン1:「詳細を開く」ボタンで対応レコードの詳細フォームを表示する
一覧フォームで選択中の顧客IDに対応する詳細フォームを開くボタンのマクロです。
| アクション | パラメータ設定 |
|---|---|
| OpenForm | フォーム名:顧客詳細フォーム / ビュー:フォームビュー / Where条件式:[顧客ID]=[Forms]![顧客一覧]![顧客ID] |
Where条件式でリンクフィールドを指定することで、一覧で選択した行の顧客IDと一致する詳細フォームだけが表示されます。これはコマンドボタンウィザードの「フォームを開く」と同じ動作をマクロで実装したものです。
パターン2:「新規入力」ボタンで空のフォームを追加モードで開く
| アクション | パラメータ設定 |
|---|---|
| OpenForm | フォーム名:受注入力フォーム / ビュー:フォームビュー / データモード:追加のみ / ウィンドウモード:ダイアログ |
「データモード:追加のみ」にすると既存レコードは読み取り専用になり、新規入力専用の画面として開けます。「ウィンドウモード:ダイアログ」にすると元のフォームが背後でロックされ、入力フォームを閉じるまで一覧フォームを操作できない状態になります。
パターン3:「絞り込み」ボタンで担当者別にレコードを絞る
| アクション | パラメータ設定 |
|---|---|
| ApplyFilter | Where条件式:[担当者ID]=[Forms]![受注一覧]![コンボ担当者] |
同一フォーム内のコンボボックスで選択した担当者IDをWhere条件式に参照することで、一覧フォームのレコードをリアルタイムに絞り込む検索フォームを実装できます。隣に「全件表示」ボタンを配置してRemoveAllFiltersアクションを割り当てると、絞り込みを解除できます。
パターン4:保存確認ダイアログと自動クローズ
| 順序 | アクション | パラメータ設定 |
|---|---|---|
| 1 | MessageBox | メッセージ:保存しました。 / 種類:情報 / タイトル:完了 |
| 2 | CloseWindow | オブジェクトの種類:フォーム / オブジェクト名:(省略=アクティブウィンドウ) |
「保存」ボタンにこのマクロを割り当てることで、入力フォームで「保存」をクリックすると「保存しました。」のメッセージが表示され、OKを押すとフォームが閉じます。CloseWindowの「オブジェクト名」を省略するとアクティブなウィンドウを閉じます。閉じる前にレコードを保存したい場合は最初にRunCommandアクションでSaveRecordを実行します。
パターン5:起動時に必須フィールドの入力チェックを行う
| 順序 | アクション | パラメータ設定 |
|---|---|---|
| 1 | If | 条件式:IsNull([Forms]![受注フォーム]![顧客ID]) |
| 2(If内) | MessageBox | メッセージ:顧客IDを入力してください。 / 種類:警告! |
| 3(If内) | GoToControl | コントロール名:顧客ID |
| 4(If内) | StopMacro | (パラメータなし) |
「保存」ボタンをクリックしたとき、必須フィールドが未入力ならば警告を表示してカーソルを未入力フィールドに戻し、マクロを終了します。If条件が真(未入力)のときのみ警告→フォーカス移動→StopMacroの流れを実行し、偽(入力済み)のときはそのまま次のアクション(保存・クローズ)へ進む構造です。
マクロのテスト実行とデバッグ方法
シングルステップ実行
マクロビルダーのリボンに「シングルステップ」ボタンがあります。これを有効にした状態でマクロを実行すると、アクションを1つ実行するたびに「マクロのシングルステップ」ダイアログが開き、アクション名・パラメータ・エラーの有無を確認できます。処理が意図通り動かない場合に原因を特定するのに役立ちます。
マクロのデバッグ時によく見るエラー
| エラー・症状 | 原因 | 対処法 |
|---|---|---|
| 「〇〇というフォームが見つかりません」 | OpenFormの「フォーム名」がナビゲーションウィンドウのフォーム名と不一致 | スペルや全角半角を確認し、ナビゲーションウィンドウのフォーム名と完全一致させる |
| マクロを実行しても何も起きない | イベントプロパティへのマクロ割り当てが正しくない | プロパティシートの「イベント」タブを開き、対象イベントにマクロ名が入っているか確認する |
| 「〇〇というコントロールが見つかりません」 | GoToControlの「コントロール名」がフォーム上のコントロール名と不一致 | コントロールのプロパティシートの「名前」プロパティと完全一致させる |
| ApplyFilterでレコードが消える | Where条件式に誤りがあり、どのレコードも一致しない条件になっている | 条件式をイミディエイトウィンドウや式ビルダーで確認する |
| If条件が常にTrue/Falseになる | 参照するコントロール名が違う・フォーム名の参照構文が誤っている | [Forms]![フォーム名]![コントロール名]の構文を正確に確認する |
MOS Access試験でのマクロ出題ポイント
MOS Access 365試験では、マクロの作成・編集・割り当てに関する操作がスキル領域として含まれます。分野別の出題数・配点は公表されていませんが、マクロビルダーの操作手順とボタンへの割り当て方法が実践的な操作として問われます。
- マクロビルダーの起動:「作成」タブ→「マクロ」ボタン、またはフォームのイベントプロパティから「マクロビルダー」を選択して起動できる
- アクションの追加:ドロップダウンから目的のアクション(OpenForm・MessageBox・CloseWindowなど)を選択してパラメータを入力できる
- OpenFormのWhere条件式:他フォームのコントロール値を参照する式(
[Forms]![フォーム名]![コントロール名])を正しく入力できる - マクロをイベントに割り当てる:コマンドボタンのプロパティシート「イベント」タブ→「クリック時」にマクロ名を設定できる
- Ifブロックの追加:「Ifブロック」から条件式とアクションを設定して条件分岐を作成できる
- マクロの保存と名前付け:マクロを上書き保存(Ctrl+S)で名前を付けて保存できる
MOS試験 マクロ操作チェックリスト
| 確認ポイント | 操作内容 | 難易度 |
|---|---|---|
| マクロビルダーを開ける | 「作成」タブ→「マクロ」ボタンを押せる | ★☆☆ |
| アクションを追加できる | ドロップダウンからアクションを選択してパラメータを入力できる | ★☆☆ |
| OpenFormのパラメータを設定できる | フォーム名・ビュー・Where条件式を正確に入力できる | ★★☆ |
| フォームのイベントにマクロを割り当てられる | プロパティシートのイベントタブで「クリック時」にマクロ名を設定できる | ★★☆ |
| 埋め込みマクロを作成できる | ボタンのプロパティ→「…」→「マクロビルダー」から埋め込みマクロを作れる | ★★☆ |
| Ifブロックを追加できる | 「If」を追加して条件式と分岐アクションを設定できる | ★★★ |
| マクロを保存して名前を付けられる | Ctrl+Sで保存ダイアログに名前を入力できる | ★☆☆ |
| シングルステップ実行できる | リボンの「シングルステップ」を有効にしてアクションを1つずつ確認できる | ★★☆ |
まとめ:マクロビルダーでノーコードのAccessフォーム自動化を実現する
本記事のポイントをまとめます。
- マクロとは:アクションをビジュアルに並べるノーコードの自動化機能。VBAより手軽で、MOS試験でも独立した出題領域
- 起動方法は2つ:「作成」タブから独立したマクロを作成する方法と、フォームのイベントプロパティから埋め込みマクロを作成する方法
- 主要アクション:OpenForm(フォームを開く)・CloseWindow(閉じる)・ApplyFilter(絞り込み)・MessageBox(通知)・GoToControl(フォーカス移動)を組み合わせて業務フローを構築する
- Ifブロックで条件分岐:IsNull・比較演算子・フォームコントロール参照の式を使ってTrue/Falseに応じたアクションを実行できる
- MOS試験では:マクロビルダーの起動・アクション追加・パラメータ設定・イベントへの割り当て・シングルステップデバッグの操作手順を確実に把握しておく
マクロビルダーを習得することで、フォーム間のナビゲーション・入力チェック・フィルタ操作といった業務の定型作業を自動化できます。まずはパターン1(「詳細を開く」ボタン)から試してみると、OpenFormとWhere条件式の基本的な組み合わせを手を動かして理解できます。MOS試験の合格に向けても、マクロビルダーの操作を何度か繰り返し練習して操作手順を体で覚えておくことが合格への近道です。
PR
MOS試験シリーズの定番対策書。AccessのマクロやExcel・Wordを含むMicrosoft 365全科目の出題範囲を網羅した解説と模擬問題が一冊にまとまっています。マクロビルダーの操作手順を問題形式で繰り返し確認できるため、試験前の最終確認に最適です。
PR
たった1秒で仕事が片づくExcel自動化の教科書【改訂第3版】
Excelの自動化思想を体系的に解説した一冊。ボタン1つで処理を動かす発想・定型作業の手順化・繰り返し作業の仕組み化はAccessマクロ設計にも直結します。マクロのパターン設計を学ぶ前の素地として、自動化全般の考え方を整理するのに役立ちます。
