「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をつけるんだ」と覚えればいいです。