テーブルの列を指定して重複のないリストを作成
昨日は、テーブルのデータを列単位で格納して、配列を作成する際の
失敗談を紹介した。
infoment.hatenablog.com
実はこの事例の発展形として、個人的に作成頻度が高いのがこちら。
テーブルの列を指定して重複のないリストを作成
ということで、今日は ↑ こちら ↑ に挑戦。
重複がない配列といえば、先日作成したクラスモジュール「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件の個人情報テーブルを対象とする。
このテーブルから、重複なく都道府県名を抽出してメッセージボックスに表示
してみよう。
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
結果がこちら。
個人的に、何かと重宝しそうです。
参考まで。