2023年4月27日木曜日

Excel VBAで重複データを削除するカスタム関数を作成・・・したらデフォルトでunique関数が用意されてた話

はじめに

データセットには、重複したデータが含まれることがあります。通常重複データの削除はメニューから実施しますが、定常作業で毎日のように実施したり、定型的なフォーマットで関数として実現したりしたい場合は、今回紹介するVBAによるカスタマイズワークシート関数を使用する事でわざわざ毎回メニューから操作せずとも重複を排除したデータがワークシート上で使用できるようになります。

重複データを削除し横(行)方向に表示する関数

以下のコードは、重複データを削除し横方向に表示するVBA関数です。

Function RemoveDuplicatesH(arr As Range) As Variant
    Dim cell As Range
    Dim uniqueValues As Collection
    Dim value As Variant
    Dim result() As Variant
    Dim i As Integer

    Set uniqueValues = New Collection

    On Error Resume Next
    For Each cell In arr
        uniqueValues.Add cell.value, CStr(cell.value)
    Next cell
    On Error GoTo 0

    ReDim result(1 To uniqueValues.count)
    i = 1
    For Each value In uniqueValues
        result(i) = value
        i = i + 1
    Next value

    RemoveDuplicatesH = result
End Function

重複データを削除し縦(列)方向に表示する関数

以下のコードは、重複データを削除し縦方向に表示するVBA関数です。

※いいわけ:
本記事執筆後に気づいたので残しておきますが縦方向の表示であればunique関数というデフォルトで用意されている関数を使って同じことが出来、当然その方が良いです(>_<)
普通に考えて横方向に表示したいというシチュエーションもそれほどないと思うので振り返ればそれほど実用シチュエーションのない記事になってしまったかもしれませんが、学習履歴として残しておきたいと思います。

Function RemoveDuplicatesV(arr As Range) As Variant
    Dim cell As Range
    Dim uniqueValues As Collection
    Dim value As Variant
    Dim result() As Variant
    Dim i As Long

    Set uniqueValues = New Collection

    On Error Resume Next
    For Each cell In arr
        uniqueValues.Add cell.value, CStr(cell.value)
    Next cell
    On Error GoTo 0

    ReDim result(1 To uniqueValues.count, 1 To 1)
    i = 1
    For Each value In uniqueValues
        result(i, 1) = value
        i = i + 1
    Next value

    RemoveDuplicatesV = result
End Function

使用イメージ

これらの関数をVBAの標準モジュールに記載した上で引数としてRangeを与えると次のように重複のないリストが縦、横に表示可能です。


まとめ

Excel VBAを使用して、重複データを削除するカスタム関数を作成する方法を紹介しました。これらの関数は、横方向(行)と縦方向(列)の両方に対応しており、データセット内の重複を効果的に削除することができます。これにより、データ分析やレポート作成をより簡単かつ正確に行うことができます。

途中の言い訳に記載した通り、ほぼ無駄になったわけですがcollection型でdictionaryオブジェクトと似たような事が出来る事など勉強にはなったので公開しておきたいと思います。。。

0 件のコメント:

ウェブサイトのURLにおけるトレイリングスラッシュの解釈と有無による動作の違い

インターネットが現代社会におけるコミュニケーションの基盤となっている今日、ウェブサイトのURLはビジネスや個人ブランディングにとって重要な役割を果たしています。URLは単にウェブページへの経路を示すだけでなく、SEO(検索エンジン最適化)においても重要な要素です。この記事では、U...