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


実務では「重複しないリスト」を作成する機会が多いです。いや、むしろ、クラウド時代になれば必須の作業でしょう。そこで新しく「重複しないリストを作る(2)」や「重複しないリスト(3)」を書きました。どれがいいと、ひとつの方法だけを覚えるのではなく、できるだけ選択肢を広く持ってください。で、そうした幅広い選択肢を考えたとき「ああ、ほかにも手があるな」と思いつきました。ピボットテーブルです。ピボットテーブルを作ってしまえば、自動的に重複しないリストが作成されます。その後、そのピボットテーブルで集計された値を何かに使うのでしたら、それも手です。なので、一応書いておきます。ただ、VBAでピボットテーブルを操作するのは難しいです。特に、マクロ記録で記録されたコードを元に何かしようとするのは、けっこう難易度が高いですね。リクエストも多いので「VBAでピボットテーブルを操作する」やり方や考え方は、そのうちまとめて書きます。ここでは、とりあえず"重複しないリスト"を作成するところだけやってみます。マクロでピボットテーブルを作成する方法は「ピボットテーブルを作成する」をご覧ください。実際には、すごく短いコードで作成できます。

上図のようなデータがあったとします。A列しかありません。件数は100件(A1:A101)です。話を簡単にするため、テーブルにしています。テーブルの名称は「テーブル1」です。ここからピボットテーブルを作成します。

Sub Macro1()
    Dim i As Long
    With Sheets.Add
        .Next.Activate
        ActiveWorkbook.PivotCaches.Create(xlDatabase, "テーブル1").CreatePivotTable .Range("A3")
        With .PivotTables(1)
            .PivotFields("名前").Orientation = xlRowField
            For i = 1 To .PivotFields("名前").PivotItems.Count
                Cells(i, 3) = .PivotFields("名前").PivotItems(i)
            Next i
        End With
    End With
End Sub

アクティブシートの左隣に作成したピボットテーブルは、こんな感じです。

重複しない件数は、ピボットテーブルの PivotFields("名前").PivotItems.Count で分かります。それぞれの項目は、PivotFields("名前").PivotItems(i) として調べています。これだけでしたら、これだけで済みますね。あとは、作成したピボットテーブルを、シートごと削除しちゃえばいいです。