Excel VBAで連想配列
Excelのデータ整理でHashMapとか連想配列とか辞書とか使えたらうれしい状況になったので、ちょうどそのものなところを参照して無理やりやってみた。Excelオンリー。他のVBAではこの方法は無理。
単純に原理だけ書いておくと、シート1つそれ用に確保して第1列をキーとみなす。データの追加はそのシートへの行の追加を表し、データの更新はその行の更新を表す。もちろんデータの消去はその行の削除と対応している。
キーでの検索はワークシート関数である"MATCH"を用いる。データの取り出しはMATCHで得られた行番号の示す行の第2列の内容を返すことで行う。キーにも値にも文字列以外使えないが、そこはいろいろ駆使してカバー。たとえば3要素の文字列配列を使いたかったら適当に区切り文字を選んで"&"で結合して"Split"で分離。整数値が使いたいなら"CStr"で文字列化して"CDec"で整数化。
詰まったのは、VBって2つの引数を持つ関数、いや"Sub"で定義したからサブルーチンか、を呼び出すとき以下の書式だとはじかれたこと。
Sub SetData(htKey As String, htValue As String) End sub SetData("1","2") ''これはだめ SetData "1","2" ''これはOK Sub GetData(htKey As String) End sub GetData("1") ''これはOK GetData "1" ''これもOK
いまいちVBの文法を理解できてない。