Access VBA入門|初心者が最初に覚えるべき基本まとめ

スポンサーリンク

Accessには、マクロ、クエリもあり初心者でも十分使える機能がそろっていますが
VBAを使いこなすことができれば、もっと効率よくいろいろな事ができるようになります。

VBAとはVisual Basic for Applicationsの略で、プログラミング言語の一種です。
ExcelのVBAに詳しい人であれば、とっかかりとしては早いかもしれません。

スポンサーリンク

ACCESSの基本操作

ACCESS起動方法

ACCESSファイルを開く場合、そのままダブルクリックで開いてしまうと思うのですが
開発をする場合は、そのまま開くのではなく下記の方法で開いてください。

Shiftキーを押しながら→ファイルをダブルクリック

次にフォームを開く場合は、右クリック→デザインビューで開いてください

デザインモードでフォームが起動しました。

VBAの開き方

フォームに、ボタン・テキスト等を配置します。


フォームデザイン→コントローラーを選択

VBAを開く場合は、
ボタンを右クリック→プロパティをクリックします。

ボタンのプロパティが表示されました。
タブの種類は下記の通り
・書式
・データ
・イベント
・その他
・すべて
→今回は「イベント」タブを使用します。

ボタンでよく使うのは「クリック時」のイベントです。
右側の「・・・」をクリックすると「ビルダーの選択」ダイアログが表示されます。

→コードを選択

下記コードを記載してください

MsgBox "モジュール実行ボタンを押しました。", vbInformation + vbOKOnly, "ACCESS入門"

→Ctrl+Sで保存します。

フォームに戻ります。
VBAとフォームの画面が別なので、下のバーからACCESSをクリックしてフォームを表示します。

右クリック→フォームビューをクリックします

フォームが起動されます。デザインモードとは違うのがわかると思います。
ここで先ほどのボタンをクリックします。

→メッセージボックスが表示されました!
MsgBox についての詳細は、ここでは省略します。

最終的にVBAはこのようになります

Rem ----------------------------------------------------------------------------------
Rem         Click/モジュール実行
Rem ----------------------------------------------------------------------------------
Private Sub cmdモジュール実行_Click()

    MsgBox "モジュール実行ボタンを押しました。", vbInformation + vbOKOnly, "ACCESS入門"

End Sub

プログラムの基礎

変数

変数とは、数値や文字列などを格納するための入れ物です。
変数を宣言後、値を代入したり変数に代入した値を取り出したりすることができます。

先ほどのVBAに変数を追加してみましょう。

Dim i As Integer
    i = 10
    i = i * 10
    MsgBox "モジュール実行ボタンを押しました。" & i & "回" , vbInformation + vbOKOnly, "ACCESS入門"

→VBAを保存してフォーム実行

定数

定数とは固定値で参照のみ行う場合に使用します。
主に固定値となる値に使用することがあります。
途中で頻繁に変更される可能性のあるものは、定数ではなく
テーブルに値を入れて参照する方が使い勝手が良いです。
ここでは、こういうものがあるんだ・・程度で思ってもらえれば大丈夫です。

定数とわかるように先頭文字を「C_」で統一したりすると困らないです。
コーディング規約がある場合も多いです。

データ型

データ型とは、プログラムにて扱うデータの種類のことをいいます。
変数に対してデータ型を宣言することで格納するデータを制限することができます。
データ型を変数に対して指定しない場合、自動的にバリアント型(Variant型)が割り当てられます。

こちらの例では、変数iをIntgerとして宣言して10を代入して、変数を10で乗算して変数に再代入しています。

Dim i As Integer
    i = 10
    i = i * 10
    MsgBox "モジュール実行ボタンを押しました。" & i & "回" , vbInformation + vbOKOnly, "ACCESS入門"

変数とは何のためにあるのか?と最初は悩むと思いますが
数値項目、文字項目、日付項目・・があるんだと、ざっくり把握できていればOKです。

VBAのIF文

IF文とは、条件によって処理を実行する場合に使用します。
他のプログラム言語でも必ず使用します。
イメージとしては、自動販売機をイメージしてみてください。
例)
・コーヒー:200円
・コーラー:150円
・水:100円

だったとして、自販機で水ボタンを押下したら100円になります。
これが200円になったらユーザーは怒ってしまいます。
では、条件分岐とはどうやるのか?
数学でいうところの方程式だと思ってもらえば良いです。

If~の後に条件式を入れ、条件式を満たす場合にThen以降の処理が実行されます。
条件式を満たさない場合Then以降の処理は実行されません。

フォームにボタン作成

フォームにボタンを3つ作成します。

配置したボタンのプロパティ値を図のように修正します。

コントローラー名前に設定する値表題に設定する値
コーヒーボタンcmdコーヒーコーヒー
コーラボタンcmdコーラコーラ
水ボタンcmd水

修正イメージ

→VBAを保存(Ctrl+S)してフォーム表示

見た目はフォームにボタンが3つ配置されています。

今はボタンを押しても反応が何もありませんので
イベントを追加して実際にVBAを記述したいと思います。

ボタンにイベント追加

ボタンのVBAの開き方は「VBAの開き方」を見てください。
(1)右クリック→デザインビューでフォームを開く
(2)ボタンをクリック→プロパティシートのイベントタブ→クリックイベント→コードビルダー

Private Sub cmdコーヒー_Click()

End Sub

Private Sub cmdコーラ_Click()

End Sub

Private Sub cmd水_Click()

End Sub

こんなVBAが作成されました。

イベントにVBAを記述

各イベントに下記コードを記述します。

Private Sub cmdコーヒー_Click()
Dim i金額 As Integer
Dim str名前 As String

    i金額 = 120
    str名前 = "コーヒー"
    MsgBox str名前 & "が押されました。" & i金額 & "円です。", vbInformation + vbOKOnly, "ACCESS入門"

End Sub

・i金額という変数を数値(Integer)で宣言
・str名前という変数を文字(String)で宣言
・i金額 = 120 は、変数に120を代入
・str名前 は、変数に”コーヒー”を代入

VBAでは、文字は””ダブルクォーテーションを付ける決まりがあります。
確かExcelVBAでも同様だったと思います。
数値項目は””ダブルクォーテーションを付けるとエラーになります。

str名前 & "が押されました。" & i金額 & "円です。"

これは変数と文字を結合したものです。
結果的に変数を使用することで汎用性が増す感じになります。

このコードを他も同じように書くとすると

Private Sub cmdコーラ_Click()
Dim i金額 As Integer
Dim str名前 As String

    i金額 = 150
    str名前 = "コーラ"
    MsgBox str名前 & "が押されました。" & i金額 & "円です。", vbInformation + vbOKOnly, "ACCESS入門"

End Sub

Private Sub cmd水_Click()
Dim i金額 As Integer
Dim str名前 As String

    i金額 = 100
    str名前 = "水"
    MsgBox str名前 & "が押されました。" & i金額 & "円です。", vbInformation + vbOKOnly, "ACCESS入門"

End Sub

となり、同じコードを書くことになります。
同じコードを書くということは、これが10パターンも100パターンもあると
全部に書かなければならず修正時に膨大な修正が発生することになります。
そこで便利な関数というものがあるので関数化します。

関数(プロシージャ)を作成

関数とはプロシージャとも言いますが、よく使用するコードを1つにまとめて、別のプログラムから呼び出すことができるプログラム内部での処理単位です。
プロシージャはSubプロシージャとFunctionプロシージャに分かれます。
今回はSubプロシージャを使用しました。
Functionプロシージャを使用すると関数の結果を返すことができるため
よくあるのは、実行ボタン押下時にプロシージャで複数の処理を実行して
エラーなく処理が完了したかを返却し、戻ってきた返却値によってメッセージを出し分けするというものです。
メッセージを出し分けてその後の処理も変更することができます。

定数

定数はVBAの上の方に書きます。

Const C_区分_コーヒー = 1
Const C_区分_コーラ = 2
Const C_区分_水 = 3

Const C_単価_コーヒー = 120
Const C_単価_コーラ = 150
Const C_単価_水 = 100

Subプロシージャ

Private Sub subボタン表示(int区分 As Integer)
Dim str名前 As String


    If int区分 = C_区分_コーヒー Then
        str名前 = "コーヒー"
        MsgBox str名前 & "が押されました。" & C_単価_コーヒー & "円です。", vbInformation + vbOKOnly, "ACCESS入門"
    
    ElseIf int区分 = C_区分_コーラ Then
        str名前 = "コーラ"
        MsgBox str名前 & "が押されました。" & C_単価_コーラ & "円です。", vbInformation + vbOKOnly, "ACCESS入門"
    
    ElseIf int区分 = C_区分_水 Then
        str名前 = "水"
        MsgBox str名前 & "が押されました。" & C_単価_水 & "円です。", vbInformation + vbOKOnly, "ACCESS入門"
    
    Else
        MsgBox "何が押されたのか判断付きませんでした", vbExclamation + vbOKOnly, "ACCESS入門"
    End If

End Sub

Subプロシージャを追加しました。
Private とすることで、この画面からしかCALLできないようにしています。
共通のプロシージャを作成する場合は、標準モジュールにPublic で宣言して使用します。
フォームでもPublic で作成可能ですが、他のフォームからもCALLできてしまい
わかりにくくなるので、基本的には各フォームで書くプロシージャはPrivateとする方が良いです。
何も書かないとPublicになってしまうので、必ずPrivateと書くようにしましょう。

プロシージャをCALL

プロシージャをCALLしてみたいと思います。
呼び元の書き方は下記のようになります。

Private Sub cmdコーヒー_Click()
    Call subボタン表示(C_区分_コーヒー)
End Sub

Private Sub cmdコーラ_Click()
    Call subボタン表示(C_区分_コーラ)
End Sub

Private Sub cmd水_Click()
    Call subボタン表示(C_区分_水)
End Sub

如何でしょうか?こうするとコード量が激減して使えるので非常に効率的です。
修正時に迷いなく修正ができます。
パターンが多い場合は、定数ではなくテーブルを使用すればもっと汎用的になります。
ここでは関数を使うと便利という紹介にとどめます。

デバッグ方法

次に作成したフォームを起動しデバッグする方法を紹介します。

コードが書いてある左端をクリックします。

そうすると●が付きます。もう一度クリックすると●は消えます。
●を付けた状態でVBAを保存します。

ボタンをクリックします。


このように止まります。

デバッグ→ステップイン

ウォッチ追加

→ステップイン

ウォッチに追加したのはウォッチの画面で確認できます。
変数に想定した値が入っているのか確認したり値を変更したりすることが可能です。
例えばこの時点で変数の値を変更するとメッセージボックスに表示される文言も変更されます。

ここはそのままステップインします。

メッセージが表示されました。
想定通りのメッセージが登録されればOKです。

ダウンロード

ここまで記事で作成したコードサンプルをダウンロードすることが可能です。

AccessVBA入門 for Access2019(2026/3/29)
basic_sample_access2019_ver100.zip

下の「ダウンロード」ボタンからAccessファイルのダウンロード可能です。

プログラムの基本は、VBAでもJAVAでもPHPでも同じです。
変数というものがありプロシージャがあり、考え方も基本的には同じになります。
効率よく他の人にもわかりやすく汎用的に書くことによって
その後の保守やメンテナンスのしやすさに発展していきます。

また、VBAはコードなので一括検索ができるという強みがあります。
VBAをすべてマクロやクエリで作成も可能ですが
マクロやクエリの本数が100を超えるともはやメンテナンスは難しく
何か修正するとどこかでエラーになるという事が発生してしまいます。

そうならないようにも基本的なことを抑えておけば後々困らないわけです。
基本的なアクセスの起動方法や操作方法でデバッグ方法を覚えておくと
困ったときにも対処しやすいのではないかと思います。

コメント

タイトルとURLをコピーしました