はじめに
データセットには、重複したデータが含まれることがあります。通常重複データの削除はメニューから実施しますが、定常作業で毎日のように実施したり、定型的なフォーマットで関数として実現したりしたい場合は、今回紹介する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 件のコメント:
コメントを投稿