初心者向け解説シリーズ

【初心者向け】マクロとイベントプロシージャの基礎

nanikatoaccess

以下では、「マクロとイベントプロシージャの基礎」をテーマに、Accessでの自動化や入力チェックなどを実現する手法を解説します。Accessは、VBA (Visual Basic for Applications) を使った強力なカスタマイズが可能ですが、VBAを覚える前にマクロを活用するだけでも多くの自動処理やイベント対応が実現できます。マクロとイベントプロシージャの違いや使いどころを理解し、業務アプリを効率良く開発・運用してみましょう。


1. マクロとは?

Accessのマクロは、画面上の設定で「ボタンを押したらフォームを開く」「レポートを印刷する」など、一連の操作を自動化する仕組みです。プログラミング言語(コード)を書くことなく、GUIでアクションを組み合わせるだけで簡単に実装できるのが特徴です。

ポイント

  • マクロは「操作手順」をステップとして並べていくイメージ。
  • よく使うアクション例: 「開く/閉じる」「移動」「条件分岐」「メッセージ表示」など。
  • VBAほど柔軟ではありませんが、基本的な自動化に向いている。

ないものはない!お買い物なら楽天市場

1.1 マクロの種類

  1. ユーザーマクロ(スタンドアロンマクロ)
    • ナビゲーションウィンドウで「マクロ」を作成し、任意のタイミングで呼び出す。
    • 複数のアクションをまとめた再利用可能な処理フローを定義できる。
  2. イベントマクロ
    • フォームやレポート、コントロールのイベントプロパティ(OnClick, OnLoadなど)に直接マクロを設定。
    • 「ボタンをクリックしたらこのマクロを実行」という形で使われることが多い。

1.2 マクロの作成手順

  1. ナビゲーションウィンドウ → [マクロ] → 新しいマクロを作成
  2. 「マクロデザイナー(マクロ ビルダー)」画面で、リボンからアクションを選択
  3. アクションの引数や条件を設定(例:フォーム名、メッセージ内容など)
  4. マクロ名を付けて保存し、必要に応じてフォームやボタンのイベントに紐づけて使用

アクションの例

  • OpenForm: フォームを開く
  • Close: 現在のフォームやレポートを閉じる
  • MsgBox: メッセージダイアログを表示する
  • SetValue: コントロールやフィールドに値を代入する
  • If/ Else Ifなどの条件分岐も使える

2. イベントプロシージャ(VBA)とは?

一方、イベントプロシージャとは、フォームやコントロールの各種イベント(クリック、更新、ロードなど)が起こった際に実行されるVBAコードのことです。マクロがGUI中心なのに対し、イベントプロシージャはコード記述で柔軟なロジックを組めます。

ポイント

  • イベントごとにプロシージャを定義できる(BeforeUpdate, OnClick, OnOpen, etc.)。
  • 「If ~ Then ~ Else」や関数呼び出し、エラー処理など複雑な制御が可能。
  • Accessで高度な自動化や外部システム連携を行う場合はVBAの習得が不可欠。

2.1 イベントプロシージャの設定方法

  1. フォームやコントロールの「イベント」タブ(プロパティシート)を開く
  2. 該当イベント(例:OnClick)を選択し、[イベント プロシージャ] を選択
  3. […] ボタンを押すとVBAエディタが開き、Private Sub ボタン名_Click() のようなプロシージャが自動生成
  4. その中にVBAコードを記述し、保存

例: ボタンクリックでメッセージ表示

vbコピーするPrivate Sub btnHello_Click()
    MsgBox "こんにちは!", vbInformation
End Sub
  • btnHello というボタンがクリックされたら「こんにちは!」と表示する。

2.2 VBAイベントプロシージャの活用例

  1. 入力チェック (BeforeUpdate)
    • テキストボックス更新前に、Nullや数値型などを確認し、誤入力ならキャンセルする。
  2. 画面遷移制御 (OnClick)
    • 「次へ」ボタンを押すと、別フォームを開き、現在のフォームを閉じる。
    • ユーザーが操作しやすいフローを独自に実装。
  3. 自動計算 (AfterUpdate)
    • 単価や数量が変更されたら、売上金額を再計算して表示フィールドに反映。
  4. 外部ファイルの操作、API連携
    • VBAコードでExcelファイルを書き出したり、REST APIにリクエストを送ったりといった高度な処理も可能。

3. マクロ vs イベントプロシージャ:使い分け

3.1 マクロのメリット・デメリット

  • メリット
    コードを書かずにGUI操作で作成できるため初心者でも取り組みやすい
    – 基本的な操作(フォームを開く、メッセージ表示など)はすぐ実装可能
  • デメリット
    – 複雑な条件分岐や、他システムとの連携など高度な処理には限界がある
    – エラーハンドリングがシンプルなので、ロジックが複雑になると管理が難しくなる

3.2 イベントプロシージャ(VBA)のメリット・デメリット

  • メリット
    自由度が非常に高い。外部ファイル操作やAPI呼び出し、SQL文生成など、一通りのプログラミングが可能
    – エラー処理や関数分割も細かくでき、保守性が高い
  • デメリット
    – VBA言語の知識が必要で、初心者にとっては敷居が高い
    – 間違ったコードを書いてしまうとエラーが出たり、DBを壊すリスクも

4. 入門の流れ:まずマクロで動きを理解→必要に応じてVBAへ

初心者は最初、マクロを使って簡単な自動処理を体験すると良いでしょう。ボタンクリックでフォームを開く、メッセージを出すなどを実装してみると、Accessの動作が理解しやすいです。

  • ステップ1: 「ボタンのクリック時イベントに“マクロ”を登録」して、フォーム操作を学ぶ
  • ステップ2: もっと複雑な機能(数値チェックや計算ロジックなど)が必要になったら、[イベント プロシージャ] へ切り替えし、VBAコードを書く
  • ステップ3: エラー処理や外部連携などを学び、システムを高度化していく

5. 具体的な例:顧客フォームで入力チェック

例えば、**「顧客名が空で登録されるのを防ぐ」**というユースケースを考えてみます。

5.1 マクロで実装する場合

  1. フォームデザインビューを開き、顧客名テキストボックスのプロパティ →「イベント」タブ
  2. 「Before Update」欄に「マクロビルダー」を選択
  3. マクロデザイナーでアクションを追加
    • [If] → 条件 IsNull([顧客名]) Or [顧客名] = ""
    • [CancelEvent]: Cancel = True で更新を取り消す
  4. 保存してフォームを実行。空のまま確定すると、メッセージが出て登録がキャンセルされる。

5.2 イベントプロシージャ(VBA)で実装する場合

vbコピーするPrivate Sub 顧客名_BeforeUpdate(Cancel As Integer)
    If IsNull(Me.顧客名) Or Me.顧客名 = "" Then
        MsgBox "顧客名は必須です。", vbExclamation
        Cancel = True
    End If
End Sub
  • ほぼ同じロジックだが、自由にIf文やエラー処理を書けるのが特徴。

6. エラー処理・デバッグの違い

  • マクロのデバッグ:
    – アクションごとの実行状態やエラー内容が、メッセージとして表示される
    – 基本的にステップ実行やブレークポイントなどはなく、エラーが起きたらメッセージが出る程度
  • VBAのデバッグ:
    – Visual Basic エディタ上でステップ実行ウォッチ式変数確認などができ、プログラムの流れを詳細に追える
    – 複雑なロジックのエラー原因を特定しやすい

7. マクロとイベントプロシージャでできる主な操作

操作マクロイベントプロシージャ (VBA)
フォーム/レポートを開く○ (OpenForm, etc.)○ (DoCmd.OpenForm, etc.)
メッセージを表示 (MsgBox)○ (MsgBox関数)
レコードの移動、フィールド設定○ (GoToRecord, etc.)○ (Recordset操作, SetValue, etc.)
入力チェック (BeforeUpdateなど)○ (If, Elseなどの高度な制御可能)
ファイル操作 (Excel出力、APIなど)×(制限あり)○(自由度高い)
SQL発行やストアドプロシージャ呼び出し×(簡易的には可能)○ (ADO/DAOやDoCmd.RunSQL)
エラー制御 (OnError Resume Nextなど)シンプル (OnErrorマクロアクション)高度なTry-Catch的制御が可能

8. まとめ:シンプルな処理はマクロ、複雑なロジックはVBAでイベントプロシージャを

  1. マクロ: コード不要で簡単に操作フローを自動化。単純なイベントやアクションなら十分。
  2. イベントプロシージャ (VBA): 高度な制御や柔軟性、外部システム連携などを実装。プログラミングの知識が必要だが、拡張性が高い。
  3. 移行・使い分け: 一度マクロで作ったものを、必要に応じてVBAに置き換えることも可能。開発フェーズやチームのスキルに合わせて選択する。

特に業務システムでは、入力チェックや画面遷移がスムーズに動くとユーザーの利便性が大きく向上します。まずはマクロでAccessの自動化に慣れ、その後、VBAイベントプロシージャによる高度な開発にステップアップしてみてください。


関連記事

これを押さえれば、Accessの基礎機能(テーブル・クエリ・フォーム・レポート)を活かしつつ、自動化・制御でさらに使い勝手を向上させることが可能です。次は、さらにVBAの基礎を学び、アプリの拡張性を飛躍的に高めていきましょう。

DMM
ABOUT ME
管理人
管理人
駆け出しブロガー
入社した会社では、Accessを活用した基幹システムが長年運用されていました。しかし、開発者の高齢化により保守が困難となり、システムの維持・更新が急務に。 ほぼAccessに触れたことのなかった私は、ゼロから学びながら基幹システムを再構築してみることに。ついにはAccessによるシステム開発エンジニアとしてのスキルを身につけるまでに成長。 元々の業務のノウハウとそれを効率化するためのツール(Access)によって業務効率化システムをいくつも開発してきました。 みなさんの”なにか(業務のノウハウ)”とAccessで業務効率化を実現するお役に立てれば幸いです。
googleアドセンス
記事URLをコピーしました