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


重複しないリストを作るのに、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

上記のコードでは、非表示のワークシートを挿入して、そこで重複しないリストを作成しています。非表示のワークシートを挿入する考え方は「非表示のシートを挿入する」をご覧ください。