「Accessでフォームに『登録』ボタンを作りたいが、コードを書かずに実装する方法がわからない」「ボタンを押すと別フォームが開くようにしたい」「MOS Access試験でマクロが出題されると聞いたが、何を覚えればいいのか」——こうした疑問を持つ方は多いです。
Accessのマクロ機能は、VBA(Visual Basic for Applications)を一切書かずに、ボタンクリックによる画面遷移・データ検索・入力値の検証・エラーメッセージ表示といった業務処理を自動化できるツールです。マクロビルダーと呼ばれるGUI画面でアクションを積み上げる直感的な操作体系のため、プログラミング経験がなくても短時間で習得できます。本記事では、マクロビルダーの基本操作から主要アクションの使い方・条件分岐・フォームイベントへの紐付け・よくあるエラー対処、MOS Access試験の頻出出題パターンまで体系的に解説します。
「Accessで使いやすいシステムを作りたい」「MOS Access試験でマクロを確実に得点したい」という方は、ぜひ最後までご覧ください。
AccessのマクロとVBAの違い:どちらを選ぶか
Accessで処理を自動化する手段は「マクロ」と「VBA」の2系統があります。どちらを使うかは目的によって判断します。
| 比較項目 | マクロ | VBA |
|---|---|---|
| 習得難易度 | 低い(GUIで操作) | 高い(コードを書く必要あり) |
| 実装スピード | 速い(アクションを選ぶだけ) | 遅い(コーディングが必要) |
| 処理の複雑さ | 中程度まで(条件分岐・基本ループ) | 無制限(外部システム連携・複雑なアルゴリズムも可) |
| セキュリティ | 高い(信頼できる場所以外でも動作) | 低い(マクロ有効化設定が必要) |
| デバッグ | やや難しい(ステップ実行が限定的) | 容易(ブレークポイント・イミディエイトウィンドウを使える) |
| MOS試験での出題 | あり(MOS Access試験の出題範囲) | なし(MOS試験はマクロまでが範囲) |
基本方針として、「ボタンクリックでフォームを開く」「入力値のチェックと警告メッセージ」「フォームを閉じてレポートを印刷」といった定型処理はマクロで実装するのが正解です。外部APIとの通信や複雑なロジックが必要になった段階でVBAへの移行を検討してください。MOS Access試験を受験する方はマクロの習得が必須です。
マクロビルダーの起動と基本操作
Accessのマクロはすべて「マクロビルダー」という専用画面で作成します。起動方法は2種類あります。
マクロビルダーの起動方法
方法1:独立したマクロとして作成する
- ナビゲーションウィンドウで「作成」タブをクリックする
- 「マクロとコード」グループの「マクロ」をクリックする
- マクロビルダーが新しいタブで開く
- 作成後に名前を付けて保存する(例:「受注登録」「顧客検索」など)
方法2:フォームやレポートのイベントからインラインで作成する
- フォームをデザインビューで開く
- ボタン等のコントロールを選択する
- プロパティシートの「イベント」タブを開く
- 対象イベント(例:「クリック時」)の「…」ボタンをクリックする
- 「マクロビルダー」を選択してOKをクリックする
フォームボタンに直接紐付けるインライン埋め込みマクロは、ナビゲーションウィンドウには表示されず、フォーム・レポートと一体化して保存されます。「このボタン専用の処理」を作る場合は埋め込みマクロ、「複数のオブジェクトから呼び出したい共通処理」を作る場合は独立したマクロとして作成します。
アクションカタログとアクションの追加方法
マクロビルダーの右側に「アクションカタログ」が表示されています。データベースオブジェクト・フォームの操作・ウィンドウ管理など、カテゴリ別にアクションが整理されています。アクションを追加するには以下の3つの方法があります。
- アクションカタログからドラッグ&ドロップでデザイン領域に追加する
- デザイン領域の「アクションの追加」ドロップダウンからアクション名を選択する
- アクション名の先頭文字を入力してフィルタリングしてから選択する
アクションを追加すると、そのアクションに固有の引数入力欄が展開されます。引数は「…」ボタンで式ビルダーを起動して入力することも、直接テキストで入力することもできます。
主なマクロアクション一覧と使い方
Accessには100種類以上のマクロアクションがありますが、業務でよく使うものは20種類程度です。以下に頻出アクションを用途別に整理します。
フォーム・レポート操作系アクション
| アクション名 | 主な用途 | 重要な引数 |
|---|---|---|
| OpenForm | フォームを開く | フォーム名・ビュー(フォーム/データシート/デザイン)・Where条件式・データモード(追加/編集/読み取り専用)・ウィンドウモード |
| CloseWindow | フォーム・レポートを閉じる | オブジェクトの種類・オブジェクト名・保存設定 |
| OpenReport | レポートを開く・印刷する | レポート名・ビュー(印刷プレビュー/印刷/デザイン)・Where条件式 |
| GoToControl | 指定コントロールにフォーカスを移す | コントロール名 |
| GoToRecord | レコードを移動する | オブジェクト・レコード(先頭/最後/次/前/指定) |
OpenFormはもっとも使用頻度の高いアクションです。Where条件式に「[受注ID]=[Forms]![受注一覧]![受注ID]」のような式を入力すると、一覧フォームで選択しているレコードに絞り込んだ詳細フォームを開けます。
データ操作・検索系アクション
| アクション名 | 主な用途 | 重要な引数 |
|---|---|---|
| FindRecord | 条件に一致するレコードを検索して移動する | 検索値・一致方法(フィールド全体/先頭/任意の部分)・大文字と小文字の区別・検索方向 |
| RunQuery | アクションクエリ(更新・削除・追加)を実行する | クエリ名 |
| SetValue | コントロールや変数に値をセットする | アイテム(コントロールの参照式)・式(セットする値) |
| SetTempVar | 一時変数に値を格納する | 名前・式 |
| RequeryUpdate | コントロールのデータを最新状態に更新する | コントロール名(省略でフォーム全体) |
SetValueは強力なアクションですが、「アイテム」欄には「[Forms]![顧客フォーム]![顧客名]」のように完全修飾した参照式を指定する必要があります。コントロール名だけでは機能しないため注意してください。
ユーザー通知・入力確認系アクション
| アクション名 | 主な用途 | 重要な引数 |
|---|---|---|
| MessageBox | メッセージダイアログを表示する | メッセージ・警告音・タイトル・種類(情報/警告/注意/クリティカル) |
| Beep | 警告音を鳴らす | なし |
| CancelEvent | 発生しているイベントをキャンセルする | なし(Before Updateイベントと組み合わせて入力を拒否する) |
MessageBoxとCancelEventの組み合わせは、必須項目が未入力のまま保存しようとした際に「○○を入力してください」と警告して保存を阻止するバリデーション処理に使います。MOS Access試験でも頻出のパターンです。
ボタンにマクロを割り当てる手順
フォームにボタンを配置し、クリックしたときにマクロが実行されるように設定する手順を解説します。
コマンドボタンウィザードを使う方法
フォームをデザインビューで開いた状態で「コントロール」グループからコマンドボタンをクリックすると、配置直後にウィザードが起動します。
- ウィザードの「種類」から「フォームの操作」「レコードの操作」等を選択する
- 「アクション」から実行したい処理を選択する(例:「フォームを開く」「レコードの保存」など)
- 対象フォーム名・レコードの絞り込み条件等を設定する
- ボタンに表示するテキストまたはアイコンを設定する
- ボタン名を設定して「完了」をクリックする
ウィザードが生成するのは埋め込みマクロです。生成後にプロパティシートの「クリック時」欄を確認し、「[埋め込みマクロ]」と表示されていれば設定成功です。「…」ボタンからマクロビルダーを開いて内容を編集できます。
独立マクロをボタンに手動で割り当てる方法
- フォームをデザインビューで開く
- ボタンを選択し、プロパティシートの「イベント」タブを開く
- 「クリック時」のドロップダウンをクリックし、作成済みの独立マクロ名を選択する
- フォームを保存してフォームビューに切り替えてテストする
独立マクロを割り当てると、同じ処理を複数のフォームから呼び出せる利点があります。例えば「帳票印刷」マクロを作っておけば、受注フォームと顧客フォームの両方からOpenReportで同じレポートを呼び出せます。
If条件分岐をマクロに組み込む
マクロビルダーでは「If」ブロックを使って条件分岐を実装できます。VBAのIf文と同等の機能をGUIで構築できます。
Ifブロックの追加方法
- マクロビルダーの「アクションの追加」ドロップダウンから「If」を選択する
- 条件式入力欄に式を記述する(例:
[Forms]![受注登録]![数量] > 100) - 条件が真(True)のときに実行するアクションをIfブロック内に追加する
- 「Else If」「Else」ブロックを追加して分岐を拡張する
条件式にはAccessの演算子と関数をすべて利用できます。よく使う条件式のパターンを以下に示します。
| 判定したい内容 | 条件式の例 |
|---|---|
| フォームの特定フィールドが空かどうか | IsNull([Forms]![顧客登録]![顧客名]) |
| 数値フィールドが0より大きいか | [Forms]![在庫管理]![在庫数] > 0 |
| テキストが特定の値と一致するか | [Forms]![受注入力]![ステータス] = “確定” |
| 日付が今日以降かどうか | [Forms]![イベント管理]![開催日] >= Date() |
| 一時変数が特定の値かどうか | [TempVars]![確認結果] = “OK” |
バリデーション処理の実装例(必須入力チェック)
「顧客名が未入力のまま保存しようとしたら警告して保存をキャンセルする」という典型的なバリデーション処理を実装する手順を示します。
- フォームをデザインビューで開き、フォーム全体を選択する(ルーラーの交差点をクリック)
- プロパティシートの「イベント」タブで「更新前処理」の「…」をクリックする
- 「マクロビルダー」を選択してマクロビルダーを開く
- 「If」ブロックを追加し、条件式に IsNull([顧客名]) と入力する
- Ifブロック内に「MessageBox」アクションを追加し、メッセージに「顧客名を入力してください」と設定する
- 続けて「CancelEvent」アクションを追加する
- マクロを保存してフォームに戻り、顧客名を空白のまま保存を試みてテストする
この「更新前処理イベント+If IsNull+MessageBox+CancelEvent」の4点セットは、MOS Access試験でも最頻出のマクロパターンです。必ず覚えておいてください。
フォームのイベントとマクロの紐付け
マクロはボタンのクリックだけでなく、フォームやコントロールのさまざまなイベントに紐付けられます。イベントとは「ユーザーが何かをした・何かが起きた瞬間」のことです。
| イベント名 | 発生タイミング | 代表的な用途 |
|---|---|---|
| クリック時(On Click) | コントロールをクリックしたとき | ボタン操作・フォーム画面遷移 |
| 読み込み時(On Load) | フォームが開いたとき | 初期値のセット・絞り込み条件の設定 |
| 更新前処理(Before Update) | レコードが保存される直前 | 必須入力チェック・入力値のバリデーション |
| 更新後処理(After Update) | レコードが保存された直後 | 関連テーブルの更新・集計の再表示 |
| 変更時(On Change) | テキストボックスの内容が変わったとき | 入力中のリアルタイム絞り込み・自動計算 |
| フォーカス取得時(On Got Focus) | コントロールにフォーカスが移ったとき | ガイドメッセージの表示 |
| 閉じる前(On Close) | フォームが閉じられる直前 | 変更確認・別フォームのリフレッシュ |
フォームのイベントはフォーム全体のプロパティシートから、コントロールのイベントはコントロールを選択した状態でプロパティシートの「イベント」タブから設定します。マクロは必ずイベントに紐付けて初めて動作することを意識してください。独立したマクロをナビゲーションウィンドウからダブルクリックして直接実行することも可能ですが、フォームが開いていないと参照式でエラーになります。
マクロのデバッグとよくあるエラー対処
マクロが期待通りに動かない場合の確認手順とよくあるエラーを解説します。
ステップ実行でアクションを1つずつ確認する
マクロビルダーのリボンにある「ステップ」ボタンをONにすると、マクロが実行されるたびに1アクションごとに「マクロのステップ実行」ダイアログが表示されます。
- 現在のアクション:今から実行しようとしているアクション名
- 引数:そのアクションに渡されている引数の内容
- エラー番号:前のアクションでエラーが発生した場合のエラーコード(0なら正常)
「ステップ実行」ボタンで1アクションずつ進め、どのアクションでエラーが出るかを特定します。エラー番号2950は「Accessのマクロが信頼できる場所でない」ことを示し、エラー番号2467は「フォームやコントロールの参照が見つからない」ことを示します。
よくあるエラーと対処法
| エラー内容 | 主な原因 | 対処法 |
|---|---|---|
| アクションが実行されない・何も起きない | イベントへの紐付け漏れ、または条件式が常にFalse | プロパティシートのイベント欄を確認する・ステップ実行で条件を確認する |
| 「参照が見つかりません」エラー(エラー2467) | フォーム参照式の誤記(フォームが開いていない・スペルミス) | フォーム名・コントロール名のスペルをプロパティシートで確認する |
| 「信頼できない場所」エラー(エラー2950) | ファイルが信頼できる場所に保存されていない | 「ファイル」→「オプション」→「セキュリティセンター」→「信頼できる場所」にフォルダを追加する |
| OpenFormで「フォーム名が見つかりません」 | OpenFormの「フォーム名」引数が違うフォーム名を指している | ナビゲーションウィンドウに表示されているフォーム名と完全一致で入力する |
| SetValueで値がセットされない | 「アイテム」欄の参照式が不完全(フォーム名の修飾が抜けている) | 「[Forms]![フォーム名]![コントロール名]」の形式で完全修飾する |
MOS Access試験でのマクロ出題パターンと攻略法
MOS Access(Microsoft Office Specialist Access)試験では、マクロ関連の問題が必ず出題されます。出題範囲と頻出パターンを整理します。
MOS Access試験のマクロ出題範囲
MOS Access 365・2019・2021のいずれも、「マクロとコード」カテゴリが出題範囲に含まれています。具体的な出題要素は以下のとおりです。
- マクロの作成・編集・保存
- フォームにコマンドボタンを追加してマクロを割り当てる
- コマンドボタンウィザードを使用したボタンとアクションの設定
- OpenForm・CloseWindow・OpenReport・MessageBoxアクションの使用
- 条件付きアクション(If/Else)の設定
- フォームのイベントプロパティへのマクロ割り当て
試験頻出の問題パターンと対策
| 頻出パターン | 問われる操作 | 攻略ポイント |
|---|---|---|
| ボタンウィザードでフォームを開くボタンを作成する | コマンドボタンウィザード→「フォームの操作」→「フォームを開く」 | ウィザードの流れを体で覚える。「Where条件式」でレコードを絞り込む設定も出題される |
| ボタンにOpenFormマクロを設定する | マクロビルダーでOpenFormアクション→フォーム名・ビュー・データモードを設定する | 引数の「ビュー」「データモード」の選択肢を覚える(フォームビュー・編集可能が既定) |
| MessageBoxで案内メッセージを表示する | MessageBoxアクション→メッセージ・タイトル・種類(情報/警告)を設定する | 「タイトル」は省略可だが試験では指定されることが多い |
| 入力チェックマクロを更新前処理イベントに設定する | フォームの「更新前処理」イベント→If IsNull→MessageBox→CancelEvent | 「Before Update(更新前処理)」と「After Update(更新後処理)」のタイミングの違いを理解する |
| OpenReportで印刷プレビューを開く | OpenReportアクション→レポート名・ビュー「印刷プレビュー」を設定する | 「印刷」モードと「印刷プレビュー」モードの違いを理解する |
試験対策の練習法
MOS Access試験のマクロ問題は、実際にAccessを操作して回答する実技試験形式です。以下の学習手順で確実に得点できます。
- コマンドボタンウィザードを10回以上操作する:種類・アクションの選択肢を体で覚えるまで繰り返す
- マクロビルダーで主要5アクション(OpenForm・CloseWindow・OpenReport・MessageBox・CancelEvent)を手動で作成する:各アクションの引数名と選択肢を覚える
- 更新前処理イベントにバリデーションマクロを実装する:IfブロックとCancelEventの組み合わせを確実に手を動かして覚える
- 独立マクロを作成してボタンのイベントに手動で割り当てる:ウィザードに頼らずにプロパティシートからの割り当てを練習する
マクロ問題はAccessのなかでも得点しやすい領域です。手順が定型化されているため、繰り返し操作練習をすれば確実に得点できます。
サブマクロでマクロを整理する:複数処理を1ファイルにまとめる
1つのマクロファイルに複数の処理をまとめる「サブマクロ」を活用すると、ナビゲーションウィンドウのマクロ数を抑えながら処理を整理できます。
サブマクロの作成方法
- マクロビルダーで「アクションの追加」から「サブマクロ」を選択する
- サブマクロに名前を付ける(例:「開く」「閉じる」「印刷」)
- 各サブマクロブロック内にアクションを追加する
- マクロファイルを名前を付けて保存する(例:「受注操作」)
サブマクロを呼び出す場合は、イベントのドロップダウンで「受注操作.開く」のように「マクロ名.サブマクロ名」の形式で指定します。関連する処理を1つのマクロファイルにまとめることで、メンテナンス性が大幅に向上します。データベースが複雑になってきたら積極的に活用してください。
まとめ:Accessマクロで「使いやすいデータベース」を実現する
本記事で解説したAccessマクロのポイントをまとめます。
- マクロとVBAの使い分け:定型操作はマクロ、複雑なロジック・外部連携はVBA。MOS試験はマクロまでが出題範囲
- マクロビルダーの基本操作:独立マクロと埋め込みマクロの2種類。アクションカタログからドラッグまたはドロップダウンで追加
- 主要アクション:OpenForm・CloseWindow・OpenReport・MessageBox・CancelEvent・SetValueの6アクションが業務の8割をカバー
- If条件分岐:IsNull・比較演算子・Date()関数を組み合わせてバリデーション処理を実装
- イベントとの紐付け:クリック時・読み込み時・更新前処理・更新後処理の4イベントが頻出
- MOS試験対策:ウィザードとマクロビルダーの両方を操作で覚える。バリデーションマクロ(If IsNull+MessageBox+CancelEvent)を必ず練習する
- サブマクロ:関連処理を1ファイルにまとめてメンテナンス性を向上させる
Accessのマクロを習得すると、「データを入力するだけ」のデータベースから、「ボタン1つで処理が完結する業務システム」へと進化させられます。まずは本記事で紹介したOpenFormとMessageBoxを使ったシンプルなボタンから作り始めてみてください。操作に慣れたらIf条件分岐とCancelEventを組み合わせたバリデーション処理へと段階的にステップアップすることをおすすめします。
MOS Access試験の受験を控えている方は、マクロ問題を「確実な得点源」として位置づけ、本記事の頻出パターンを繰り返し練習してください。
