Sub TEST3()
'1列に対して、重複しないリストを抽出
ActiveSheet.Range("B1:B11").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
'フィルタされている場合
If ActiveSheet.FilterMode Then
'フィルタを解除
ActiveSheet.ShowAllData
End If
End Sub
重複データを用意しました。
重複データ
では、VBAコードを実行します。
AdvancedFilterでフィルタ
重複しないリストを抽出できました。
では、フィルタを解除します。
ShowAllDataでフィルタを解除
ShowAllDataでフィルタを解除できました。
時間を計測
つづいて、「AdvancedFilter」の実行速度を計測してみます。
50,001行の重複するデータを用意しました。
50,001行の重複データ
重複しないリストを抽出するVBAコードです。
Sub TEST4()
t = Timer
'1列に対して、重複しないりリストを抽出
ActiveSheet.Range("B1:B50001").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
Debug.Print Timer - t & " 秒"
End Sub
Sub TEST5()
'1列に対して、重複しないリストを抽出
ActiveSheet.Range("B1:B11").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
'重複しないリストをコピー
ActiveSheet.Range("A1").CurrentRegion.Copy ActiveSheet.Range("D1")
'フィルタされている場合
If ActiveSheet.FilterMode = True Then
'フィルタ解除
ActiveSheet.ShowAllData
End If
End Sub
手順としては、
①重複するリストを抽出
②抽出したデータをコピー
③フィルタを解除
という流れです。
重複するデータを用意しました。
重複するデータ
では、VBAコードを実行します。
実行する手順
1列で、重複しないデータを抽出します。
フィルタした結果を、別セルにコピーします。
最後に、フィルタを解除します。
これで、重複しないリストを作成することができます。
重複しないリストを作成できた
重複しないデータを、作成することができました。
重複しないリストを使って、選択用のプルダウンで使うことができます。
別シートに重複しないリストを作成
別シートに、重複しないリストを作成する方法です。
元のシートには変更を加えないで、重複しないリストを作成することができます。
別シートに、重複しないリストを作成するVBAコードです。
Sub TEST6()
'1列に対して、重複しないリストを抽出
ActiveSheet.Range("B1:B11").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
'元のシートの右側に、シートを追加
Worksheets.Add after:=ActiveSheet
'追加したシートに、重複しないリストをコピー
ActiveSheet.Previous.Range("A1").CurrentRegion.Copy ActiveSheet.Range("A1")
'フィルタされている場合
If ActiveSheet.Previous.FilterMode Then
'フィルタを解除
ActiveSheet.Previous.ShowAllData
End If
End Sub
手順としては、
①重複しないリストを抽出
②元のシートの右側に、シートを追加する
③追加したシートに重複しないリストをコピー
④元シートのフィルタを解除
という手順です。
重複したデータを用意しました。
重複するデータ
では、VBAコードを実行します。
実行する手順
1列分で、重複しないデータを抽出します。
シートを追加します。
追加したシートに、フィルタ結果を貼り付けます。
最後に、元シートのフィルタを解除します。
これで、別シートに重複しないリストを作成することができます。
別シートに重複しないリストを作成
別シートに、重複しないリストを作成できました。
元のシートはそのままです。
元シートはそのまま
元のシートには、変更を加えていません。
別シートを使えば、元シートに変更を加えず、重複しないリストを作成することができます。
別ブックに重複しないリストを作成
次は、別ブックに重複しないリストを作成する方法です。
別ブックを使えば、元のブックに変更を加えず、重複しないリストを作成することができます。
別ブックに、重複しないリストを作成するVBAコードです。
Sub TEST7()
'1列に対して、重複しないリストを抽出
ActiveSheet.Range("B1:B11").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
'元のシートの右側に、シートを追加
Worksheets.Add after:=ActiveSheet
'追加したシートに、重複しないリストをコピー
ActiveSheet.Previous.Range("A1").CurrentRegion.Copy ActiveSheet.Range("A1")
'フィルタされている場合
If ActiveSheet.Previous.FilterMode Then
'フィルタを解除
ActiveSheet.Previous.ShowAllData
End If
'追加したシートを、新規ブックに移動
ActiveSheet.Move
'新規ブックを、名前を付けて保存
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\TEST.xlsx"
'新規ブックを閉じる
ActiveWorkbook.Close
End Sub