重複しないリストを作るのに、Excel 2007以降でしたらもっと簡単な方法もあります。それは「重複の削除」機能です。
最短でしたら、わずか2行で済みます。たとえば、こんな感じです。
Sub Macro1() Range("A1:A101").Copy Range("C1") Range("C1").CurrentRegion.RemoveDuplicates 1, xlYes End Sub
「重複の削除」機能には、ちょっと変な挙動もありますけど、それはそのうち書きます。まぁ、普通に使うのでしたら何も問題ありません。
上記のコードは、元データ(A列)を一度別の列(C列)にコピーしています。元データに対して「重複の削除」を直接実行することは少ないでしょう。もし、実際のワークシートに、コピーするような空いている列がなかったら。な~に、そんなの簡単です。別のワークシートにコピーして、そっちで「重複の削除」をやってやればいいだけです。
Sub Macro2() Dim i As Long, buf As String Sheets.Add.Visible = False ''非表示シートを挿入 With ActiveSheet.Previous Range("A1:A101").Copy .Range("A1") .Range("A1").CurrentRegion.RemoveDuplicates 1, xlYes ''重複しないリスト作成 MsgBox .Cells(Rows.Count, 1).End(xlUp).Row - 1 & "件" For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row buf = buf & .Cells(i, 1) & vbCrLf Next i MsgBox buf End With End Sub
上記のコードでは、非表示のワークシートを挿入して、そこで重複しないリストを作成しています。非表示のワークシートを挿入する考え方は「非表示のシートを挿入する」をご覧ください。