複数の列挙テキストを一つにまとめて、重複のない列挙に整理しなおすユーザー定義関数です。「AAA、BBBB、CCC」と「AAA、DD」から、「AAA、BBBB、CCC、DD」を導出します。
複数の列挙をつなげて重複を除く関数
Function uf_重複なし列記(RNG As Range, DLM As String)
Dim buf As String
Dim ary1, ary2
buf = WorksheetFunction.TextJoin(DLM, True, RNG)
ary1 = Split(buf, DLM)
ary2 = WorksheetFunction.Unique(ary1, True)
uf_重複なし列記 = Join(ary2, DLM)
End Function
長くはなりますが、変数を使わないで一文でまとめることもできます。
Function uf_重複なし列記(RNG As Range, DLM As String)
Join(WorksheetFunction.Unique(Split(WorksheetFunction.TextJoin(DLM, True, RNG), DLM), True), DLM)
End Function
利用方法
=uf_重複なし列記(
セル範囲,
区切り文字)
セル範囲は、C3
のような単一セルまたはC3:E3
のような範囲を指定します。
個人用マクロブックに保存した場合は、
=PERSONAL.XLSB!uf_重複なし列記(C3:E3,"・")
のような数式になります。
解説
各セルのテキストを一つにつなげてから区切り文字で分解して配列にします。配列から重複を排除して、一つのテキストにつなぎ直しています。Excel 365 で追加されたワークシート関数を使うことで、For Next
文を使わないシンプルなコードにできました。
WorksheetFunction.TextJoin関数
複数のセルのテキストを指定する区切り文字を加えて連結する関数です。WorksheetFunction.TextJoin("
区切り文字",
空セルを無視,
セル範囲)
WorksheetFunction.Unique関数
ワークシートの数式でセル範囲を指定するところを配列を指定しています。VBAのワークシート関数では、配列を渡して重複のない配列を返す使い方ができます。WorksheetFunction.Unique(
配列,
重複排除)