連想配列(Dictionary オブジェクト)
2017/10/23
連想配列
連想配列とは、添字(キー)に文字列を使用することができる配列です。
VBA で、連想配列を使用するには、CreateObject 関数の引数に「Scripting.Dictionary」を指定するか、参照設定「Microsoft Scripting Runtime」を設定します。
(※ コレクション(Collection)オブジェクト を簡単な連想配列として使用することも出来ます。)
Dictionary オブジェクト
<CreateObject 関数を使用する場合>
Dim myDic As Object
Set myDic = CreateObject(“Scripting.Dictionary”)
<参照設定を行う場合>
Dim myDic As Dictionary
Set myDic = New Dictionary
引数・戻り値
- myDic ・・・ Dictionary オブジェクト
Add メソッド
連想配列に新規の「キー」と「値」のセットを追加します。
object.Add key, item
引数・戻り値
- object ・・・ 対象となる Dictionary オブジェクトを指定します。
- key ・・・ 追加する「キー」となる文字列を指定します。
- item ・・・ 追加する「値」を指定します。
Exists メソッド
指定した「キー」が、連想配列に存在するかどうかを確認します。
<取得>
bool = object.Exists key
引数・戻り値
- object ・・・ 対象となる Dictionary オブジェクトを指定します。
- key ・・・ 検索する「キー」を指定します。連想配列に存在する場合は、True 、存在しない場合は、False を返します。
Items メソッド
連想配列のすべての「値」を取得します。
<取得>
array = object.Items
引数・戻り値
- object ・・・ 対象となる Dictionary オブジェクトを指定します。
- array ・・・ 連想配列の「値」のみを配列として取得したもの
(例)連想配列 orgArray
orgArray(“first”) = 100、orgArray(“second”) = 150、orgArray(“third”) = 200 の場合、
array(0) = 100、array(1) = 150、array(3) = 200
Keys メソッド
連想配列のすべての「キー」を取得します。
<取得>
array = object.Keys
引数・戻り値
- object ・・・ 対象となる Dictionary オブジェクトを指定します。
- array ・・・ 連想配列の「キー」のみを配列として取得したもの
(例)連想配列 orgArray
orgArray(“first”) = 100、orgArray(“second”) = 150、orgArray(“third”) = 200 の場合、
array(0) = “first”、array(1) = “second”、array(3) = “third”
Remove メソッド
連想配列の「キー」と「値」のセットを削除します。
object.Remove key
引数・戻り値
- object ・・・ 対象となる Dictionary オブジェクトを指定します。
- key ・・・ 削除する「キー」を指定します。「キー」が見つからなかった場合はエラーが発生します。
RemoveAll メソッド
連想配列のすべての「キー」と「値」を削除します。
object.RemoveAll
引数・戻り値
- object ・・・ 対象となる Dictionary オブジェクトを指定します。
Count プロパティ
連想配列の項目数を取得します。
<取得>
object.Count
引数・戻り値
- object ・・・ 対象となる Dictionary オブジェクトを指定します。
Item プロパティ
連想配列で、「キー」に関連付けられた「値」を取得します。または、連想配列に新規の「キー」と「値」のセットを追加します。
<取得>
value = object[ .Item ](key)
<設定>
object[ .Item ](key) = newitem
引数・戻り値
- object ・・・ 対象となる Dictionary オブジェクトを指定します。
- key ・・・ 取得または設定する項目に関連付けられている「キー」を指定します。
- newitem ・・・ 「キー」(key)に関連付ける「値」を指定します。
Key プロパティ
指定した「キー」を新しい「キー」に置き換えます。
<設定>
object.Key(key) = newkey
引数・戻り値
- object ・・・ 対象となる Dictionary オブジェクトを指定します。
- key ・・・ 変更する「キー」を指定します。
- newkey ・・・ key で指定した「キー」と置き換える新規の「キー」を指定します。
VBA で、連想配列を使用する例
サンプルVBAソース1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Sub Sample_Dictionary1() '重複を削除して表示する Dim myDic As Object Dim myKey As Variant Dim myRng As Range Dim i As Long Dim c As Variant Dim v As Variant Dim myStr As String Set myDic = CreateObject("Scripting.Dictionary") With Worksheets("Sheet1") Set myRng = Range("A1").CurrentRegion For Each c In myRng myKey = c.Value If Not myDic.Exists(myKey) Then myDic.Add myKey, "" End If Next c i = 1 For Each v In myDic.Keys myStr = myStr & i & vbTab & v & vbCrLf i = i + 1 Next v End With MsgBox myStr Set myDic = Nothing End Sub |
実行結果
サンプルVBAソース2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
Sub Sample_Dictionary2() '参照設定「Microsoft Scripting Runtime」 '重複したデータの値を合計して表示 Dim myDic As Dictionary Dim myKey As Variant Dim i As Long Dim v As Variant Dim myStr As String Set myDic = New Dictionary With Worksheets("Sheet2") For i = 1 To .Cells(.Cells.Rows.Count, 1).End(xlUp).Row myKey = Cells(i, 1).Value If myDic.Exists(myKey) Then myDic(myKey) = myDic(myKey) + .Cells(i, 2) Else myDic.Add myKey, .Cells(i, 2) End If Next i i = 1 For i = 1 To myDic.Count myStr = myStr & myDic.Keys(i - 1) & vbTab & _ myDic.Items(i - 1) & vbCrLf '← myDic (myDic.Keys(i - 1)) & vbCrLf でもよい Next i End With MsgBox myStr Set myDic = Nothing End Sub |
実行結果
関連記事
-
日付時刻:数値から日付・時刻データを取得( DateSerial 関数、TimeSerial 関数 )
DateSerial 関数(数値を使って日付データを取得) 【書式】 date …
-
日付時刻:時・分・秒を取得(Hour、Minute、Second 関数)
日付時刻から時・分・秒を取得する関数 【書式】 time_hour = Hour …
-
オブジェクトの書式をクリアする(ClearFormats メソッド)
ClearFormats メソッド 対象となるオブジェクトの書式(スタイル)を初 …
-
Erase ステートメント(配列の初期化・動的配列のメモリ解放)
Erase ステートメントの使い方 【書式】 Erase myArray [, …
-
CPU に制御を移す(DoEvents 関数)
DoEvents 関数 DoEvents 関数を実行すると、CPU に制御を移し …
-
Math 関数( Abs,Atn,Cos,Exp,Log,Rnd,Sgn,Sin,Sqr,Tan )
Abs 関数 【書式】 value = Abs ( number ) 【引数・戻 …
-
乱数を生成する(Rnd 関数)
Rnd 関数の使い方 Rnd 関数は、0 以上、1 未満の範囲の乱数を単精度浮動 …
-
セルのデータを区切り文字で複数のセルに分割する(TextToColumns メソッド)
TextToColumns メソッド TextToColumns メソッドを使用 …
-
日付時刻:経過時間を取得( Timer 関数 )
Timer 関数の使い方 【書式】 result = Timer () 【戻り値 …
-
日付時刻:日付時刻から情報取得( DatePart 関数 )
DatePart 関数(日付・時刻の値から情報を取得) 【書式】 result …