データベースと連携してVBAを組んでいくと、都度検索に行くのが良いか、最初に読み込んで配列に保管、都度配列からFunctionで引っ張るのが良いのか悩む場合がありますよね。今回は配列に動的に値を保存する方法をまとめます。
やりたいこと
あるテーブルを開始行から最終行まで読み込み、読み込んだ行数で配列を拡張して、特定のカラムのデータを配列に保存する。
基本になる配列の操作
- 動的配列を使用する場合は要素数を指定せず、カッコだけで宣言する
Dim TXT_HAIRETSU() - 要素数を指定する場合は ReDim を使って宣言する。
ReDim TXT_HAIRETSU(1)
TXT_HAIRETSU(0) = “AAAAA”
TXT_HAIRETSU(1) = “BBBBB” - 拡張する場合、ReDim だけでは事前に格納したデーターがクリアされてしまうので ReDim Preserve を使う
ReDim Preserve TXT_HAIRETSU(3) ’ ← 配列 0, 1 の値は保存されている
TXT_HAIRETSU(2) = “CCCCC”
TXT_HAIRETSU(3) = “DDDDD”
プログラムのイメージ
色々なところから引っ張ることを考えると、Public で宣言した方がいいかと・・・。
Public Dim TXT_HAIRETSU() As String
I = 0
Do Until レコードセット.EOF
I = I + 1
ReDim Preserve TXT_HAIRETSU(1, I)
TXT_HAIRETSU(0, I)=レコードセット(0)
TXT_HAIRETSU(1, I)=レコードセット(1)
レコードセット.MoveNext
Loop
配列を使用する
Function を使って、検索条件を渡し、配列を For ~ Next を使って検索する。値が合致したら返り値を設定し Exit For を使ってループを抜ける
まとめ
データベースに都度アクセスするのはどうしても時間がかかってしまいます。読み替え表的な内容は配列を作ってメモリ上にマップしてしまう方が高速に処理できます。
この記事へのコメントはありません。