はじめに
C#でアプリ開発を行っていたエンジニアが、半年にわたるAccess案件で学んだことをまとめています。
今回はAccessVBAでの配列についてまとめます。
⋙Dictionary
Dim dic As Dictionary Set dic = New Dictionary dic.add key1, 値1 dic.add key2, 値2
このようにkeyと値のセットで格納していきます。
値には配列やクラスモジュールを指定することも可能です。Dictionaryは格納した順番が保持されたり、keyの一覧・値の一覧などデータの取得方法が柔軟であるというメリットがあります。
値に配列を指定して使う方法は以下の「DictionaryとArrayの組み合わせ」を参考にしてください
Dictionaryを利用する際には以下の様な使い方が可能です。
ForEach d In dic d dic.Item(d) Loop
このようにすると、
d
でkeyを、dic.Item(d)
で値を取得できます。
⋙Array
Dim arr() As String ReDim arr(1) arr(0) = "Text0" arr(1) = "Text1"
ReDim
で配列の要素数を指定しています。要素数を指定しないと、値を入れられずエラーになりますので注意してください。
ReDimにはDimでの宣言がなければ宣言の代わりも同時に行う性質を持っていますが、宣言自体はされていないものと認識されるため不都合が生じてきます。
必ずDimでの宣言を行うようにしましょう。
Dim arr() As String ReDim arr(1) arr(0) = "Text0" arr(1) = "Text1" ReDim arr(2)
配列を変更しようと上記のように書いてしまうと、
ReDim arr(2)
で要素数を書き換えるタイミングで、それまで入っていた値は初期化されます。
すでに配列の中にある要素はそのままで配列数を変更したい場合は以下のようにします。Dim arr() As String ReDim arr(1) arr(0) = "Text0" arr(1) = "Text1" ReDim Preserve arr(2)
このように
ReDim
のあとにPreserve
を入れることで、葉入れるの中身はそのままで要素数を変更することができます。
⋙DictionaryとArrayの組み合わせ
Dim dic As Dictionary Set dic = New Dictionary Dim arr1 As Variant arr1 = Array(XXXX, YYYY・・・) dic.add Key1, arr1 dic.Item(key1)(0) → XXXX dic.Item(key1)(1) → YYYY
このようにすると、
dic.Item(key1)(0)
でXXXX
を、dic.Item(key1)(1)
でYYYY
を取得することができます。
さいごに
いかがでしたか?
少しでも役に立つ知識があれば幸いです。
他に気づくことがあれば追記していきます。