一意なリストとは、列に重複したレコードが存在した場合、重複を排除したレコードの一覧のこと。
SQLでいえば、distinct のことです。
Excelの画面操作では、以下の手順で作成(わかりやすく1列で操作)
1)重複したレコードを含む範囲を選択
2)データ → フィルタ → フィルタオプションの設定
3)"重複するレコードは無視する"にチェックを入れる
4)OK ボタンをクリック
Excelのフィルタ機能で、リストが一意になるように、重複したレコードは非表示になります。
しかし、大量データでは遅いのと、あくまで非表示にしているだけなので、使い勝手が悪いです。
そこで、VBAで一意なリストを作成します。
<前提>
重複したリスト Sheet1 A列にA1から格納されている
一意なリストはSheet2のA列に作成する
Dim myDic As Object, myKey As Variant
Dim c As Variant, varData As Variant
Set myDic = CreateObject("Scripting.Dictionary")
' ↓重複したリストのシート名
With Worksheets("Sheet1")
' ↓重複したリストの範囲
varData = .Range("A1", .Range("A" & Rows.Count).End(xlUp)).Value
End With
For Each c In varData
If Not c = Empty Then
If Not myDic.Exists(c) Then
myDic.Add c, Null
End If
End If
Next
myKey = myDic.Keys
' ↓一意なリストを作成するシート名
With Worksheets("Sheet2")
' ↓A列をクリア
.Range("A:A").ClearContents
' ↓一意なリストを作成
.Range("A1").Resize(myDic.Count) = Application.WorksheetFunction.Transpose(myKey)
End With
Set myDic = Nothing
0 件のコメント:
コメントを投稿