Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

VBAでCollectionとdictionaryを使う

More than 1 year has passed since last update.

特徴

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

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

pregum
趣味でC#を触っています。 そろそろxamlになれたい年頃です。 最近はflutter, Dart等が気になっています。
https://pregum-fox.hatenablog.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away