Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Microsoft 365)
データの重複を除いて取得するセオリーとは
投稿日時: 22/10/29 13:32:52
投稿者: puyo

お世話になります。
 
シート内にデータがあり、例えばB列に重複を許される大量のデータが入っているとします。
下記は販売データを想定しています。
 
A列(ID)  B列(商品コード)
1     A_342
2     B_421
3     A_093
4     A_342



 
上記データのB列の商品コードを基に、シートを分けたりフォルダを作成する場合に
重複を除いた値の取得が必要になると思いますが、セオリーなどはあるのでしょうか。
ちなみに私は以下のようなコードで対応しています。
 
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
     
    Dim i As Long
    For i = 2 To Cells(1, 1).Rows.Count.End(xlUp).Row
        If dic.exists(Cells(i, 2).Value) = False Then
            dic.Add Cells(i, 2).Value, 1 '1は特に意味なし
        End If
    Next i
 
もっと簡単な方法あるよ、とか上のコードだと落とし穴あるよとかがあれば教えて頂きたいです。

回答
投稿日時: 22/10/29 15:57:36
投稿者: hatena
投稿者のウェブサイトに移動

それでもいいと思いますが、365ならUnique関数で簡単に取得できますね。
 

    Dim CDs
    With Cells(1).CurrentRegion.Columns(2)
        CDs = WorksheetFunction.Unique(.Offset(1).Resize(.Rows.Count - 1).Value)
    End With
    
    '結果確認コード
    Dim CD
    For Each CD In CDs
        Debug.Print CD
    Next
[/code]

投稿日時: 22/10/29 18:31:24
投稿者: puyo

hatena様
 
回答どうもありがとうございます。
 
unique関数というものがあるんですね。
確かにその方が簡潔かつ少ないコードで書けてよさそうです!
今度から使ってみます!