Access VBA入門をお探しですね。
Accessでテーブルやクエリ、フォームを作れるようになると、次に「ボタンを押したら処理を自動実行したい」「毎回行っている作業をまとめて処理したい」と感じる場面が増えてきます。
そこで役立つのがAccess VBAです。
ただ、最初は「標準モジュールって何?」「プロシージャはどこに書くの?」「フォームのコードとは何が違うの?」といった疑問で迷いがちです。
この記事では、Access VBA入門として、標準モジュールとプロシージャの基本から、最初に動かすコードの作成方法まで、初心者向けに順番に解説していきます。
広告
Access VBA入門で最初に理解したい標準モジュールとプロシージャの関係
Access VBAを学び始めると、まず「モジュール」と「プロシージャ」という言葉が出てきます。
**モジュール**は、VBAコードを保存しておく場所です。
**プロシージャ**は、その中に書く一つひとつの処理のまとまりです。
たとえるなら、モジュールはノートやファイル、プロシージャはその中に書かれた作業手順の1項目、といった感じです。
AccessのVBAでは、いきなり単独でコードが存在するわけではなく、必ず何らかのモジュールの中にプロシージャとして処理を書いていきます。
この構造を理解しておくと、「どこにコードを書けばいいの?」「なぜ実行できないの?」という初心者がつまずきやすい疑問を整理しやすくなります。
Accessのモジュールには、大きく分けて**標準モジュール**、フォームやレポートに紐づくモジュール、クラスモジュールがあります。
初心者が最初に覚えるべきなのは、Access全体で使い回せる処理を書ける「**標準モジュール**」です。
標準モジュールに書いたSubプロシージャやFunctionプロシージャは、フォームやマクロなどから呼び出して利用できます。
一方、フォームのボタンをクリックしたときに動く処理は、通常そのフォーム専用のモジュールに書かれます。
つまり、**共通部品として使う処理は標準モジュール、特定のフォーム操作に反応する処理はフォームモジュール**、と考えると理解しやすくなります。
Access VBAでは「フォームをVBAだけで作ってから開く」というより、通常はAccess側でフォームやボタンなどの画面部品を作り、その操作に応じてVBAを動かす流れが一般的です。
もちろん高度なVBAを使えばフォーム自体をコードで作成することも可能ですが、入門段階ではおすすめしません。
まずは、Accessの画面でテーブル、クエリ、フォームを作り、必要な部分だけをVBAで自動化する考え方を身につけることが大切です。
この前提を押さえておくと、標準モジュールとフォームモジュールの使い分けも自然に理解できるようになります。
標準モジュールの作成方法とVBEで確認すべき画面
標準モジュールを作成するには、VBAを書くための専用画面である**VBE(Visual Basic Editor)**を開きます。
Accessの上部メニューから「データベースツール」タブを選び、「Visual Basic」をクリックするとVBEが起動します。
ショートカットキーを使う場合は、**Altキーを押しながらF11キー**を押しても開けます。
VBEが表示されたら、上部メニューの「挿入」から「標準モジュール」を選択します。
すると、プロジェクトエクスプローラーに「Module1」のような名前のモジュールが追加され、右側にコードを書くための白い画面が表示されます。
VBEで特に見ておきたいのが、**プロジェクトエクスプローラー**です。
ここには、現在開いているAccessファイル内のフォーム、レポート、標準モジュールなどがツリー形式で表示されます。
もし表示されていない場合は、VBE上で**Ctrl+R**を押すと表示できます。
初心者のうちは、コードを書く前に「今どのモジュールを開いているのか」を必ず確認する習慣をつけると安心です。
フォーム専用のモジュールに共通処理を書いてしまうと、別のフォームから使いにくくなる場合があります。
反対に、ボタンのクリック時だけに必要な処理を標準モジュールへ無理に書くと、処理の流れが追いにくくなることもあります。
標準モジュールを作成したら、最初に設定しておきたいのが「**Option Explicit**」です。
これは、変数を使う前に必ず宣言することを強制する命令です。
変数とは、値を一時的に入れておく箱のようなものですが、宣言を忘れたり名前を打ち間違えたりすると、思わぬ不具合につながります。
モジュールの先頭にOption Explicitを記述しておけば、未宣言の変数があると実行前にエラーとして教えてくれるため、ミスを早い段階で発見できます。
VBEのオプション設定で「変数の宣言を強制する」を有効にしておくと、新しいモジュールを作成したときに自動でOption Explicitが入るため、入門段階から設定しておくとよいでしょう。
SubとFunctionの違いを押さえて最初のプロシージャを書く
標準モジュールの中に書くプロシージャには、主に**Subプロシージャ**と**Functionプロシージャ**があります。
**Subプロシージャ**は、メッセージを表示する、フォームを開く、クエリを実行するなど、処理を実行して完了するためのものです。
**Functionプロシージャ**は、処理を行ったうえで結果を返すためのもので、独自の関数を作るときに使います。
たとえば、金額から税込価格を計算して返すような処理はFunctionに向いています。
最初は違いが難しく感じるかもしれませんが、「**実行するだけならSub、計算結果や判定結果を返すならFunction**」と覚えると使い分けやすくなります。
まずは、標準モジュールに簡単なSubプロシージャを書いてみましょう。
VBEで標準モジュールを開き、次のコードを入力します。
MsgBoxは、画面にメッセージボックスを表示するためのVBAの命令です。
コードを書いたら、プロシージャ内にカーソルを置いた状態で**F5キー**を押すか、VBE上部の実行ボタンをクリックします。
正しく入力できていれば、「Access VBAの最初のコードです」というメッセージが表示されます。
“`vba
Option Explicit
Public Sub はじめてのVBA()
MsgBox “Access VBAの最初のコードです”
End Sub
“`
このコードでは、「Public Sub はじめてのVBA()」から「End Sub」までが1つのSubプロシージャです。
**Public**は、ほかの場所から呼び出せる公開されたプロシージャであることを示します。
標準モジュールに書いたPublic Subは、Access内の別のフォームやマクロから呼び出しやすいため、共通処理として利用しやすい形です。
プロシージャ名には日本語も使えますが、実務では英数字で意味の分かる名前にすることも多いです。
たとえば「ShowStartMessage」や「OpenMenuForm」のように、何をする処理なのか分かる名前にしておくと、後から見直したときに理解しやすくなります。
Functionプロシージャも基本形を確認しておきましょう。
次の例は、税抜金額を受け取り、10%の税込金額を返すFunctionです。
Functionでは、プロシージャ名に値を代入することで、呼び出し元へ結果を返します。
Accessのクエリやフォームの式から利用できる場面もあるため、計算や文字列加工などを共通化したいときに便利です。
ただし、入門段階ではまずSubで「処理を動かす感覚」を身につけ、その後でFunctionを使った再利用に進むと理解しやすくなります。
“`vba
Public Function 税込金額(ByVal price As Currency) As Currency
税込金額 = price * 1.1
End Function
“`
フォームからVBAを動かす流れと保存・実行時の注意点
Access VBAは、標準モジュールにコードを書くだけでなく、フォームの操作と組み合わせることで実用性が大きく高まります。
たとえば、フォームに配置したボタンをクリックしたときに、別のフォームを開いたり、クエリを実行したり、入力内容をチェックしたりできます。
このような「クリックした」「更新した」「開いた」といった操作のきっかけを**イベント**と呼びます。
フォームのボタンを選択し、プロパティシートの「イベント」タブにある「クリック時」で「イベント プロシージャ」を選ぶと、そのボタン専用のプロシージャを作成できます。
作成されたコードはフォームモジュールに保存され、ボタンのクリックというイベントが発生したときに実行されます。
標準モジュールの処理をフォームから呼び出す場合は、フォーム側のイベントプロシージャ内にプロシージャ名を書きます。
たとえば、先ほど標準モジュールに作成した「はじめてのVBA」をボタンから実行したい場合、ボタンのクリック時イベントに次のように記述します。
これにより、画面操作をきっかけに標準モジュールの共通処理を動かせます。
実務では、フォーム側には「**いつ動かすか**」を書き、標準モジュール側には「**何をするか**」の共通処理を書くように分けると、コードが整理しやすくなります。
“`vba
Private Sub コマンド0_Click()
はじめてのVBA
End Sub
“`
コードを書いた後は、保存とセキュリティ設定にも注意が必要です。
Accessでは、VBAを含むファイルを開いたときに「**コンテンツの有効化**」が表示されることがあります。
これは、マクロやVBAが自動実行される可能性があるため、危険なファイルを誤って動かさないようにするための仕組みです。
自分で作成した信頼できるファイルであれば、コンテンツを有効化してから動作確認します。
また、頻繁に使う開発用フォルダーは、Accessのトラストセンターから「信頼できる場所」に設定しておくと、毎回警告に悩まされにくくなります。
ただし、インターネットから入手した不明なAccessファイルでは、安易に有効化しないことが大切です。
実行時にエラーが出た場合は、まず**スペルミス、記号の抜け、全角と半角の混在**を確認します。
VBAでは、かっこやダブルクォーテーション、プロシージャ名の入力ミスが原因で動かないことがよくあります。
エラー箇所が黄色で示された場合は、その行の内容を落ち着いて読み、必要に応じてVBEのデバッグ機能で1行ずつ確認します。
初心者のうちは、いきなり長いコードを書くよりも、MsgBoxでメッセージを表示する、フォームを開く、簡単な計算を返す、といった小さな処理を積み重ねるほうが上達しやすいです。
標準モジュールとプロシージャの関係を理解し、小さなコードを確実に動かせるようになれば、Access VBAで業務を自動化するための土台がしっかり身につきます。
広告
