Excelスキルアップコレクション
           〜 Something U Want 〜


Google  

WWW を検索
Excelスキルアップコレクション内 を検索
 @     Top  >     Excel VBA スキルアップコレクション Topics  >     (02) 連想配列を作成する

 
(02) 連想配列を作成する

 VBAでは連想配列を利用することができます。連想配列を利用するには、"Scripting.Dictionary"と言うオブジェクトを作成します。一般的な配列と連想配列の一番の違いは、一般的な配列の場合にはその配列インデックスに整数を用いますが、連想配列の場合は配列インデックスが任意の型で良いと言う点です。

  <一般的な配列のイメージ>

   配列(1) → "りんご"
   配列(2) → "みかん"
   配列(3) → "ばなな"

  <連想配列のイメージ>

   連想配列.Item("犬") → "Dog"
   連想配列.Item("猫") → "Cat"
   連想配列.Item("熊") → "Bear"

 "犬"と言ったら"Dog"という連想ゲームのように配列を扱うことができるので連想配列と言います。

 下記サンプルコードが、連想配列を使用したサンプルです。

 1行目:  Public Sub Sample_ScriptingDictionary_01()
 2行目:  
 3行目:      ' 連想配列を作成する。
 4行目:      Dim HS As Object
 5行目:      Set HS = CreateObject("Scripting.Dictionary")
 6行目:      
 7行目:      ' 連想配列にデータを格納する。
 8行目:      HS.Add "犬", "Dog"
 9行目:      HS.Add "猫", "Cat"
10行目:      HS.Add "熊", "Bear"
11行目:      
12行目:      ' 連想配列に Key = "犬" に対応したItemが存在しているか確認する。
13行目:      Debug.Print "犬に対応したItemは?"
14行目:      
15行目:      If HS.Exists("犬") Then
16行目:          ' Itemは何か?
17行目:          Debug.Print HS.Item("犬")
18行目:      Else
19行目:          ' Itemが存在していない。
20行目:          Debug.Print "存在しない"
21行目:      End If
22行目:  
23行目:      ' オブジェクトを破棄する。
24行目:      Set HS = Nothing
25行目:  End Sub
 8行目〜10行目のAddメソッドが、連想配列に値を設定するステートメントになります。

連想配列.Add Key, Item
 値が設定された連想配列は、17行目のようにItemメソッドで参照することができます。

連想配列.Item(Key) → 対応するItemが返される
 但し、連想配列に存在していないKeyでItemメソッドを利用するとエラーが発生します。15行目のようにItemメソッドを利用する直前に、ExistsメソッドでKeyに対応したItemが存在するか否かを確認するようにしましょう。

連想配列.Exists(Key) → True/False
 連想配列で気を付けなければならないことは、すでに割り当て済みのKeyを上書き更新できないことです。以下のAddメソッドの使い方はエラーになります。

…
    連想配列.Add "犬", "Dog"
    連想配列.Add "犬", "イヌ" ← エラーになる
…
 作成した連想配列の内容を後から一部変更したい場合は、一旦Removeメソッドで上書きしたい内容を削除し、改めて連想配列に値を設定し直します。

連想配列.Remove Key

…
    連想配列.Add "犬", "Dog"
    連想配列.Remove "犬"
    連想配列.Add "犬", "イヌ" ← エラーにならない
…
 RemoveAllメソッドは、連想配列の内容を全て削除しますが、「Set連想配列 = Nothing」とは意味が違います。連想配列の件数を確認する為のCountメソッドを使えば、その違いを確認できます。RemoveAllは連想配列の件数を0にしますが、連想配列は存在し続けます。Nothingを連想配列に代入した場合は、連想配列の存在そのものが失われます。

連想配列.Count → 件数が返される

…
    連想配列.RemoveAll
    連想配列.Count → 「0」が返される
…
    Set 連想配列 = Nothing
    連想配列.Count ← エラーになる
…
 連想配列の内容を通常の配列に取り出すメソッドも用意されています。これらメソッドの戻り値はVariant型の配列になります。

連想配列.Keys → 連想配列のKeyを取り出す
連想配列.Items → 連想配列のItemを取り出す

…
…
    Dim keyArr() As Variant, itemArr() As Variant
    keyArr = 連想配列.Keys
    itemArr = 連想配列.Items
…
ページの先頭へ