15
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VBAでCollectionとdictionaryを使う

Last updated at Posted at 2016-07-15

#特徴
##Collection
・Collectionでは、さまざまな型のデータを一つのコレクションとしてまとめておくことができる。コレクションの中にコレクションを入れることもできる。これを用いれば、一つのデータ群を作りループ処理することができる。

##Dictionary
・Dictionaryでは、キーとデータを関連付けることにより、データにアクセスしやすくなり、また修正が簡単になる。(Collectionの方にもあるが、Dictionaryの方が便利な機能があるのと、処理速度がDictionaryの方が若干早いのでこちらを使う)

・また先ほど述べたとおり、Dictionaryにはキーの変更を行ったり、またキーが重複していないか確かめるメソッドがありチェックが簡単なのでよく使っているメソッドを以下にまとめておく。

メソッド名 説明
Add(key,item) 未設定のキー(key)にデータ(item)を関連付ける
Exists(key) 指定されたキー(key)が存在するかどうかで論理値を返す。
プロパティ名 説明
Item(key) キー(key)に関連付けられているデータを取り出す。

これらを組み合わせることにより、ある一つのデータ群をCollectionで変数DATAでまとめ、これとあらかじめ決めておいたkeyを使うことによって、そのデータが重複していないかまとめることもでき、データの変更を行う際も、キーの変更を行うだけで済むので管理が楽になる!!!

サンプル


Dim Data As Collection
Set Data = New Collection
Dim k As Long
k = 0
Dim i As Long
For i = 0 To Cells(Rows.Count,1).End(xlUP).Row 
    Data.Add Cells(i,k).Value
Next i
Dim Param As String
Param = "hogehoge"

' CollectionをDictionaryでまとめる
Dim obj As Object
Set obj = CreateObject("scripting.dictionary")
obj.Add Param , Data 'これでParamをキーにしてDataを呼び出せるようになった。

あとはこれを複数回してParamを各データのキーに設定してその後


Dim dic As Object
Set dic = CreateObject("scripting.dictionary")
if dic.Exists(Param) = False then
End If

'データ群をセット
Dim val As String
For Each val In dic.Item(Param)' これでデータコレクションを取得した。
Next val

分かりずらい点は多々あると思いますが、ひとまず終了。
また修正加えると思います。

15
34
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?