1
4

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.

Excel VBAAdvent Calendar 2017

Day 1

シート上のデータを配列に格納する際、一意になるように格納する方法

Last updated at Posted at 2017-11-24

シート上のデータを配列に格納する際、『すでに格納済みのデータは除外したい』ということがあるかと思います。
そんなときに便利なDictionaryというオブジェクトを紹介します。

    'セルに記載されている値を一意に配列に格納する

    Dim dic_test   As Object
    Dim arg_test() As String
    Dim cnt_test   As Long
    Dim i          As Long

    'Dictionaryオブジェクト生成
    Set dic_test = CreateObject("Scripting.Dictionary")
    
    'A1セルからA100セルまで処理
    i = 0
    Do
        i = i + 1
        If i > 100 Then
            Exit Do
        End If
            
        'キー値セット
        key = Cells(i, 1).Value
    
        'キー値がDictionary内に存在しないときのみ、配列に登録
        If dic_test.exists(CStr(key)) = True Then
        Else
            'キー値をディクショナリに追加
            dic_test.Add CStr(key), ""
            
            cnt_test = cnt_test + 1
            ReDim Preserve arg_test(1 To cnt_test)
            arg_test(cnt_test) = key
        
        End If
    
    Loop

    'この時点のarg_testは、A1セルからA100セルの値を、一意になるように登録されている

ポイントは、キー値の判定の際、変数の型によって判定できないことを防ぐため、CStrを使用して必ず文字列型のキー値として判定しているところです。

Dictionaryオブジェクトの検索はとっても速いので、配列をループして存在確認するより速いです。(要素数が増えれば増えるほど実感できます。)

1
4
2

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
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?