ACCESS VBA 配列で複数の値を変数に格納する方法
ACCESS VBAを使っていると、変数がどんどん増えていきますよね。
時には同じ系統の値を変数に複数格納するケースもあるでしょう。
そのために変数をどんどん増やしていくのは煩雑ですよね。
そんな時は配列を利用すると便利です。
配列には複数の値を格納できます。
今回は、ACCESSの配列で複数の値を変数に格納する方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。
配列とは
配列とは、一つの変数に複数の値を格納できるものです。
通常の変数では、一つの変数に一つの値しか代入できませんが、配列は下記の図のように複数の部屋を作ることで値をまとめて格納することが可能です。
配列の使い方
ACCESSでは、配列はVBAで使用します。
ACCESSを起動し、ALT+F11キーでVisual Basic Editor(VBE)を起動します。
配列の宣言
他の変数と同じく、まずは配列の宣言が必要です。
配列の宣言は以下の形で行います。
Dim 配列名( 要素数 – 1 ) As データ型
変数の宣言と似ていますが、一点だけ異なるのが要素数、つまり配列に格納できる値の数を指定する点です。
要素数は、実際の数より1少ない数を指定します。
これは、配列の要素を指定する番号(インデックス番号)が0から始まるためです。
例えば、5つの要素がある配列を作成すると、インデックス番号は、0、1、2、3、4となります。
このため、配列を宣言する際の()内の数も4となります。
実際には下記のように宣言します。
test_arrayが今回の配列変数の名称で、要素数が4、データ型にはLongを指定して長整数型の値を格納できる配列とせして宣言しています。
これで配列変数が作成できました。
配列要素に値を代入
では、配列に値を入れていきましょう。
値を入れる場合は下記の式を使います。
配列名( インデックス番号 ) = 代入する値
この場合も、インデックス番号は0から始まることに注意して下さい。
例えば、配列の1番目に5を入れたい場合はインデックス番号は4ですので、以下のように記載します。
Public Sub hairetsu_test()
Dim test_array(4) As Long
test_array(0) = 5
Debug.Print test_array(0)
End Sub
確認のために、Debug.printを使って、配列に格納した値をイミディエイトウィンドウに表示する設定にしました。
なお、上記の例では固定値を配列に代入していますが、実際に利用する際は変数やループ処理を使って配列に値を連続して格納することがほとんどです。
例えば、TRN_売上というテーブルの売上金額を配列に順次格納する場合に、以下のようなコードを使います。
Public Sub hairetsu_test2()
Dim test_array(4) As Long
Dim i As Long
For i = 0 To 4
test_array(i) = DLookup("売上金額", "TRN_売上", "売上ID = " & i)
Next i
End Sub
For Nextを使ってカウンター変数であるiを追加しながら、テーブルの値をDLookupで参照して配列に格納します。
実務ではこうした使い方や、ADO(ActiveX Data Object)との組み合わせが多いでしょう。
要素数の変更
配列の要素数は変数定義時に決定します。
しかし、定義時点では要素数が決まっておらず、あとで要素数を変更したい場合があります。
こうした配列は動的配列と呼ばれます。
動的配列は宣言時に要素数を固定せず、その後にReDimステートメントを使って要素数を変更します。
Dim 配列名() As データ型
ReDim 配列名( 要素数 – 1 )
例えば、テーブルのレコード数をカウントし、レコード数分の要素を配列に格納する際などはこうした記述が使われます。
先ほど例示したTRN_売上というテーブルの売上金額を配列に順次格納するプロシージャで、要素数を可変できるようにしたのが以下です。
Public Sub hairetsu_test2()
Dim test_array() As Long
Dim ar_max as long
Dim i As Long
ar_max = dcount("売上金額", "TRN_売上") - 1
ReDim test_array(ar_max)
For i = 0 To ar_max
test_array(i) = DLookup("売上金額", "TRN_売上", "売上ID = " & i)
Next i
End Sub
ar_maxという変数にTRN_売上のレコード数を格納し、ReDimステートメントで配列の要素数をar_maxに変更しています。
既存の値を保持したまま要素数を変更する
ReDimステートメントで配列の要素を変更すると、それまで格納されていた値はすべてクリアされてしまいます。
配列の要素を徐々に増やすような運用をする場合はこれでは都合が悪いですよね。
こうしたときはPreserveキーワードを利用することで、それまで格納した値を保持しつつ、配列要素数を変更することが可能です。
ReDim Preserve 配列名( 要素数 – 1 )
ReDimの後にPreserveと記載することですでに配列に格納した値を削除せずに要素数を変更可能です。
以上、配列で複数の値を変数に格納する方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。