重複しないリストを作る(2)


「Office TANAKAいつも見てます!」ありがたいことに、よくそう言われます。先日、名古屋の某企業にうかがったときも「このマクロも、Office TANAKAを参考にして作りました」と。確かに見慣れた記述がありました。ああ、ちなみに、私のコードは見ればすぐ分かります。使われていたのは「重複しないリストを作る(1)」のコードでした。このコンテンツ、かなり昔に書きました。画像を見ると、これExcel 2003ですね。しかもMsgBoxはWindows XPでしょう。おそらく、約15年前に書いたものです。もちろん、その当時は私も、ここでご紹介している方法でやっていました。でもね、15年も経てば新しいことも学びます。考え方も変わります。いま私が"重複しないリスト"を作るのでしたら、別の方法でやります。せっかくですから、以前のコンテンツも残しておき、ここでは別のやり方もご紹介します。どれがいい、ということではありません。選択肢を広く持ってください。

VBAにはCollectionオブジェクトがあります。Collectionオブジェクトは、独自のコレクションを作成できるオブジェクトです。詳しくは「独自のコレクションを作る」をご覧ください。さて、コレクションということは、キーには「重複しない名称」が必要です。すでに登録済みの、同じ名称を登録しようとするとエラーになります。

これって"重複しないリスト"を作るときに使えそうです。

Sub Macro1()
    Dim A As New Collection, i As Long
    On Error Resume Next
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        A.Add Cells(i, 1), Cells(i, 1)
    Next i
    On Error GoTo 0
    For i = 1 To A.Count
        Cells(i + 1, 3) = A(i)
    Next i
End Sub

こちらの方が「重複しないリストを作る(1)」よりも簡単なので、私自身はもっぱらこれを使っています。

とても細かいことが気になる人は

Dim A As New Collection の、Newって何?なんでこのときだけNewをつけるの?

って思うかもしれませんね。そんなことは、気にしない方がいいですよ。ちなみに、なぜNewをつけなければいけないのかというと「オブジェクトのインスタンスを、明示的にSetステートメントで格納できない(しない)ときは、宣言時にNewキーワードをつけなければならないから」です。ね、よく分からないでしょ。だから知らなくていいことです。ここは「Newをつけるんだ」と覚えればいいです。