ACCESS VBA入門者が最初に覚えること
ACCESSはVBA(Visual Basic for Applications)を使いこなすことで、できることが飛躍的に広がります。
しかし、VBAはプログラミングが必要なので、初心者の方やこれから始めてみようと思う方には敷居が高いかもしれません。
そんな、VBA入門者の方向けに、何から取り組むべきかをご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。
目次
VBAとは
VBAとはVisual Basic for Applicationsの略で、プログラミング言語の一種です。
ACCESSだけでなく、マイクロソフトOfficeで広く使用でき、Excel VBAが最も一般的でしょう。
比較的難易度の低いプログラミング言語であり、かつマイクロソフトOfficeの普及率が高いことから、初めてプログラミングを学ぶ方がVBAから始める、というのはよくある話です。
VBAについては下記の記事で紹介していますので、興味のある方はご覧ください。
ACCESSでのVBAの使い方
ACCESSはVBAを使うとより便利になりますが、VBAが無くても利用できるソフトウェアです。
では、VBAはどこで利用するのでしょうか。
一番わかりやすいのは、ユーザーがフォームのボタンなどを操作したときに、特定の動作を自動で実行させることです。
この特定の動作を「イベント」と呼びます。
例えば、以下のようなメニュー画面をフォームで作成します。
この画面に配置されたボタンを押した際に、対応した別のフォームを開くように設定します。
このフォームをデザインビューで開くと下記になります。
現在は「売上伝票入力」ボタンを選択していますが、その右側のプロパティシートを見てください。
「クリック時」イベントにイベントプロシージャが設定されていますよね。
これは、このボタンをクリックした際に、特定のイベントプロシージャ(VBAのプログラム)を起動する、という設定なのです。
そして、ここで起動されるイベントプロシージャをVBAで記述していくのです。
このように、フォームの特定の操作をトリガーにVBAのプロシージャを動作させるのが、ACCESS VBAの主な使い方になります。
VBAの画面
ACCESS VBAの画面は、Visual Basic Editor(VBE)と呼ばれます。
VBEの表示方法は2通りあります。
メニューから表示する
ACCESSのメニューから、作成→Visual Basicを押すとVBEが表示されます。
ショートカットキーで表示する
ALT + F11キーでも同様に表示することが可能です。
上記がVBEの画面です。
上段左のツリーからACCESSのオブジェクト(フォームやレポート)を選択し、それに対するプログラム(VBAではプロシージャと言います)を上段左に記載していきます。
下段にある赤枠部分はイミディエイトウィンドウと言い、簡易的なプロシージャの実行結果を表示するための画面です。
イミディエイトウィンドウの利用方法については下記の記事で詳しく紹介しています。
VBAを利用する前の事前準備
ACCESS VBAはライブラリを追加することで、様々な機能を追加することが可能です。
ACCESSのオブジェクト(テーブルやクエリ、フォーム)だけでなく、Excelなどのファイルオブジェクトを操作したりすることも可能です。
ライブラリを追加するには、参照設定が必要です。
自分が使用したい機能がうまく動かない場合は、参照設定ができているか確認しましょう。
参照設定の方法は以下の記事をご覧ください。
また、VBAでは変数を頻繁に利用します。
この変数は、あらかじめ宣言処理をしてから使用しないと動作しないのですが、変数の宣言を忘れてしまうことがあります。
それを防ぐために、変数の宣言を強制化しておくのが良いでしょう。
モジュールの一番最初に
Option Explicit
と記載することで変数の定義を強制化できます。
ただ、これを毎回忘れずに記載するのも面倒ですよね。
ACCESSでは上記のコードを自動で追記する機能があります。
この機能で変数宣言を強制化しておくと便利でしょう。
設定方法は以下の記事をご参照ください。
ACCESS VBAの構成要素
ACCESS VBAには以下の構成要素があります。
まとめると下記のようになります。
一つずつ説明しましょう。
プロジェクト
プロジェクトとは、VBAで管理する複数のモジュールを束ねた最上位の概念です。
画面でいうと下記のように、ツリー構造の最上位に位置します。
モジュール
モジュールとは、VBAのプログラムであるプロシージャをまとめた単位です。
ツリー構造でいうとプロジェクトの下に位置します。
ACCESSのオブジェクトである、フォーム単位に1つのモジュールがあると考えるとわかりやすいでしょう。
また、ACCESSオブジェクトに紐づかない、汎用的なモジュールを標準モジュールといいます。
プロシージャ
プロシージャとは、VBAのプログラムを構成する最小単位です。
一つのモジュールの中に複数のプロシージャが存在します。
例えば、上記の例ではPrivate Subから始まり、End Subで終わるまでが1つのプロシージャです。
一般的にはこのプロシージャがVBAでのプログラミングの基本単位だと思ってください。
上記の例では、このモジュールには4つのプロシージャがあることがわかります。
オブジェクト
オブジェクトとは、プロシージャによって操作する対象となる、ACCESSの構成要素です。
わかりやすく言うとテーブルやクエリ、フォームやレポートなど、GUI操作で作成するものがオブジェクトになります。
VBAではプログラムによってこのオブジェクトを操作することが可能です。
VBAの基本構文
ACCESS VBAでよく使用する構文は以下の2つです。
複雑に見えるVBAですが、この2つを組み合わせることでかなりの機能を作成することが可能です。
条件分岐
条件に応じて処理内容を変える構文です。
IF文やSelect Case文を使って実現できます。
以下のようなコードです。
Private Sub 削除_AfterUpdate()
If Me!削除 = True Then
If vbNo = MsgBox("削除します。よろしいですか?", vbYesNo + vbExclamation, "削除確認") Then
Me!削除 = False
Exit Sub
End If
End If
End Sub
If文の使い方について詳しくは下記の記事に記載しています。
繰り返し
一定回数同じ処理を繰り返す構文です。
For Next文や、Do Loop文で実現できます。
以下のようなコードです。
Public Sub nyukin_torikeshi(nyukin_id As Long)
'変数を定義
Dim cnn As ADODB.Connection
Dim rst1 As ADODB.Recordset
'変数にADOオブジェクトを代入
Set cnn = CurrentProject.Connection
Set rst1 = New ADODB.Recordset
rst1.CursorLocation = adUseClient
'レコードセットを取得
rst1.Open "TRN_請求", cnn, adOpenKeyset, adLockOptimistic
'入金済で未削除の請求レコードのみを抽出
rst1.Filter = "入金済 = true and 入金ID =" & nyukin_id
If rst1.recordcount = 0 Then
'対象レコードが無ければ処理終了
Exit Sub
Else
'入金済チェックを解除
Do Until rst1.EOF
rst1!入金済 = False
rst1!入金ID = 0
rst1.MoveNext
Loop
End If
'終了処理
rst1.Close: Set rst1 = Nothing
cnn.Close: Set cnn = Nothing
End Sub
条件分岐とループを組み合わせることで、かなり様々な機能を作ることが可能です。
以上、VBA入門者が最初に覚えることをご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。