一般的な配列は、添え字に数値を使います。Sub Sample1() Dim Member(1 To 4) As String, i As Long Member(1) = "tainaka" Member(2) = "akiyama" Member(3) = "kotobuki" Member(4) = "hirasawa" For I = 1 To 4 Cells(I, 1) = Member(i) Next I End Subこのような配列では、要素を操作するとき、要素を表す数値を指定します。 そうではなく、文字列の要素を、文字列の添え字で操作するような配列を連想配列と呼びます。 たとえば、都道府県名と県庁所在地のような関係です。 各県庁所在地が格納されている配列に対して、 県庁所在地("東京都") → "新宿区" 県庁所在地("神奈川県") → "横浜市" のように操作できる配列です。 連想配列は、C++やJava、.NET Frameworkなど、多くのプログラミング言語で使用できます。 もちろん、VBAも標準で連想配列をサポートしています。 それが、Collectionオブジェクトです。 ここでは、次のような連想配列を考えてみましょう。Sub Sample2() Dim Member As New Collection Member.Add "田中", "S001" Member.Add "鈴木", "S002" Member.Add "山田", "S003" MsgBox "S002は" & Member("S002") & "です" End Sub連想配列(ここではMember)に要素を登録するには、Addメソッドを使います。 連想配列.Add 要素, キー 配列を操作するときは、添え字に"キー"を指定します。 要素の登録時には、ほかの要素と同じ"キー"は指定できません。 Excel VBAでは、このCollectionオブジェクトはあまり使われていません。 なぜなら、このように文字列で配列を検索するやり方を、多くのExcelユーザーはいつも、ごく普通に行っているからです。ワークシート上のVLOOKUP関数で。 配列の要素とキーをワークシート上に展開しておけば、手動操作はもちろんVBAからでも自由に操作できます。 Excel VBAは、他のプログラミング言語にはないセルとワークシートという素晴らしい機能を標準で使用できます。 とはいえ、Collectionオブジェクトを使った連想配列を使えると、CSVなど外部のデータを配列データとして活用するときに便利です。 たとえば、 S001,田中 S002,鈴木 S003,山田 というCSVファイルがあったとします。名前は「C:\Data.csv」としましょう。 このCSVデータを、先のSample2と同じような連想配列として操作するには次のようにします。Sub Sample3() Dim Member As New Collection, buf As String Open "C:\Data.csv" For Input As #1 Do Until EOF(1) Line Input #1, buf Member.Add Split(buf, ",")(1), Split(buf, ",")(0) Loop Close #1 buf = InputBox("社員番号は?") If buf = "" Then Exit Sub On Error Resume Next MsgBox buf & "は" & Member(buf) & "です" If Err.Number > 0 Then MsgBox buf & "の社員はいません" End Sub存在しないキーを指定するとエラーが発生します。 上のコードでは、On Error Resume Nextで連想配列の検索時に発生するエラーを無視していますので、存在するキーが指定されたときは1つめのMsgBoxが実行され、エラーが発生したときは2つめのMsgBoxが表示されます。 覚えておくと、何かのときに役立つかもしれないテクニックです。