VBAでDictionaryを用いて連想配列を利用する

プログラミング言語

VBAで連想配列を利用するためDictionaryオブジェクトを利用しました。

連想配列とはキーに数値以外のものを指定し要素とペアにして格納できる配列です。

Dictionaryオブジェクトとは、VBAの連想配列を表すオブジェクトです。

データを取り込んで連想配列を作り、その連想配列からユーザーが入力した値をキーとしてバリューを持ってくるというプログラムを作ります。

連想配列用のテストデータを用意する

適当に下記の連想配列を作ることにします。

キー,バリュー
America,Boston
Australia,Melbourne
Brasil,Brasilia
Germany,Berlin
India,New Delhi
Japan,Tokyo
South Africa,Cape Town

キーが国名でバリューが首都の連想配列です。

南アフリカは首都が3つあるため本来は連想配列では対応しきれませんが、今回は国に対して首都は1つしかないとして進めます。

test.txtにテキストとしてこちらのデータがあることにします。

テキストファイルからデータ取得する

下記でまずtest.txtからデータを取得します。

※変数の宣言
Dim txtPath as String: txtPath = “C:¥test.txt”
Dim adoSt
Dim tmpStr as variant
Dim count as Integer: tmpCount = 0
Dim tmpKeys as Variant
Dim tmpValues as Variant

※ADODB.Streamオブジェクトの作成
Set adoSt = CreateObject(”ADODB.Stream”)

※txtファイルの中身の書き出し
with adoSt
 ※テキストのエンコーディングに合わせて下さい
 .charset = "UTF-8"
 .Open
 .LoadFromFile (txtPath)
 Do Until .EOS
  if count ‹› 0
   tmpStr = split(.readtext(-2), ",")
   tmpKeys(count) = tmpStr(0)
   tmpValues(count) = tmpStr(1)
  endif
  count = count + 1
 Loop
.Close

ADOのstreamオブジェクトを用いてテキストファイルから1行ずつ取得し、そのテキストを分解して1つ1つ配列に入れています。

ここは本記事の主題ではないので説明は割愛します。

ADOのstreamオブジェクトの利用については下記に記載したため必要あれば参照してください。

連想配列であるDictionaryオブジェクトに値を入れる

上記に続けて連想配列に入れる処理を書きます。

※変数の宣言
Dim assocArr as Object

※連想配列の宣言
Set assocArr = CreateObject("scripting.Dictionary")
for j = 0 to ubound(tmpKeys)
 if assocArr.exists(tmpKeys(j)) = false 
  assocArr.add tmpKeys(j), tmpValues(j)
 End If
next j

下記簡単な説明です。

変数assocArrをDictionaryオブジェクトにしています。

Set assocArr = CreateObject("scripting.Dictionary")

for構文でtmpKey配列の要素数分処理するようにします。

for j = 0 to ubound(tmpKeys) 
..
next j

if構文でDictionaryオブジェクトにキーがまだ存在しない場合のみ処理を実行します。

if assocArr.Exists(tmpKeys(j)) = false
..
End If

DictionaryのExistsメソッドは存在判定です。

Dictionaryにキーバリューのセットを登録します。

assocArr.add tmpKeys(j), tmpValues(j)

Dictionaryのaddメソッドの引数にキー、バリューと指定することで登録できます。

Dictionaryから指定のキーでバリューを出力する

最後は入力した値をキーにして連想配列から値を取得します。

Dim input as String
input = .read("キーを指定してください。")
output = assocArr(input)
Msgbox "値は" & output & "です。"

.readで実行時に入力ボックスを表示できます。

input = .read("キーを指定してください。")

テストデータのいずれかの国名を入力してください。

DictionaryのItemメソッドは引数にキーを指定することでバリューを返します。

output = assocArr(input)

これでoutputに国名に対応する首都名が入ります。

最後にMsgboxで画面上に表示して完了です。

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