テーブルの列を指定して重複のないリストを作成

昨日は、テーブルのデータを列単位で格納して、配列を作成する際の
失敗談を紹介した。
infoment.hatenablog.com
実はこの事例の発展形として、個人的に作成頻度が高いのがこちら。

テーブルの列を指定して重複のないリストを作成

ということで、今日は ↑ こちら ↑ に挑戦。
f:id:Infoment:20210922230522p:plain
重複がない配列といえば、先日作成したクラスモジュール「MathSet」の中の
和集合っぽい関数を応用すれば簡単だ。
infoment.hatenablog.com
そこで、こちらに関数として追加してみた。

' テーブルとラベルを指定して、当該列のデータから「重複のない一次元配列」を作成する。
Function GetNotDuplicatedSet(target_tb As ListObject, target_column_index As Variant)
    Dim TargetColumnIndex As Long
        Select Case TypeName(target_column_index)
            Case "Integer", "Long", "String"
                TargetColumnIndex = target_tb.ListColumns(target_column_index).Index
            Case Else
                GetNotDuplicatedSet = Array()
                Exit Function
        End Select

    Dim Temp As Variant
        Select Case target_tb.ListRows.Count
            Case 0
                GetNotDuplicatedSet = Array()
                Exit Function
            Case 1
                Temp = Array(target_tb.ListColumns(TargetColumnIndex).DataBodyRange)
            Case Else
                Temp = target_tb.ListColumns(TargetColumnIndex).DataBodyRange
        End Select

        GetNotDuplicatedSet = GetUnionSet(Temp, Array())
        
End Function

それでは、試してみよう。今回は、いつもお世話になっている「なんちゃって
個人情報」で作成した、50件の個人情報テーブルを対象とする。
f:id:Infoment:20210922230959p:plain

このテーブルから、重複なく都道府県名を抽出してメッセージボックスに表示
してみよう。

Sub Test()
    ' クラスモジュールのインスタンス作成。
    Dim MaS As VBAProject.MathSet
    Set MaS = New VBAProject.MathSet
    
    ' なんちゃってテーブル。
    Dim Tb As ListObject
    Set Tb = ActiveSheet.ListObjects(1)
    
    ' 都道府県列のデータから、重複のない一次元配列を作成。
    Dim arr As Variant
        arr = MaS.GetNotDuplicatedSet(Tb, "都道府県")
        
    ' 表示
        MsgBox Join(arr, vbNewLine)
End Sub

結果がこちら。
f:id:Infoment:20210922231538p:plain

個人的に、何かと重宝しそうです。

参考まで。