[Excel]TEXTJOINカスタム関数
2022年3月21日
概要
TEXTJOIN関数のカスタム関数を作成しました。機能はExcel365やExcel2019のTEXTJOIN関数と同じです。
TEXTJOIN 関数は、複数の範囲や文字列からのテキストを結合し、結合する各テキスト値の間に、指定した区切り記号を挿入します。 区切り記号が空の文字列の場合は、範囲が連結されます。
Microsoftホームページ
下記のコードを標準モジュールに貼り付けることで、Excel2016以前のExcel(Excel2007,Excel2010,Excel2013など)でもTEXTJOIN関数を使用することが出来ます。貼り付け方は下記を参照してください。
他のサイトでも同じ趣旨のカスタム関数はありましたが、Microsoft純正関数と挙動が異なるものしか見つからなかったため、改めて書いてみました。
ソースコード
下記のコードを全てコピーし、標準モジュール等に貼り付けて下さい。下記のコード表示欄の右上に「Copy」ボタンがありますのでご使用下さい。なお、標準モジュールが何だか分からない方は、 Excelのカスタムワークシート関数を使用する方法 を参照して下さい。' [Excel]TEXTJOINカスタム関数
' Copyright (c) 2020-2024 黒箱
' This software is released under the MIT License;.
' このソフトウェアはMITライセンスの下でリリースされています。
'* @fn Public Function TEXTJOIN(ByRef Delimiter As Variant, ByVal IgnoreEmpty As Boolean, ParamArray Params() As Variant) As Variant
'* @brief Excel365・Excel2019のTEXTJOIN関数をExcel2016以前で使用可能にします。
'* @param[in] Delimiter テキスト文字列、空、または二重引用符で囲まれた1つ以上の文字、または有効なテキスト文字列への参照。 数値を指定すると、文字列として扱われます。
'* @param[in] IgnoreEmpty TRUE の場合、空のセルは無視されます。
'* @param[in] Params 結合するテキスト項目。 文字列またはセルの範囲などの文字列の配列。最大 252 のテキスト引数を設定できます。
'* @return Variant 結合した文字列。
'* @details TEXTJOIN関数は、複数の範囲や文字列からのテキストを結合し、結合する各テキスト値の間に、指定した区切り記号を挿入します。 区切り記号が空の文字列の場合は、範囲が連結されます。
'*
Public Function TEXTJOIN(ByRef Delimiter As Variant, ByVal IgnoreEmpty As Boolean, ParamArray Params() As Variant) As Variant
Dim v As Variant
Dim r As Range
Dim Param As Variant
Dim ParamType As VbVarType
Dim Text As String
Dim Row As Long
Dim Col As Long
Dim ColsCount As Long
For Each Param In Params
ParamType = VarType(Param)
If (ParamType And vbArray) Then
'参照配列の結合処理
If (TypeName(Param) = "Range") Then
Set r = Param
v = r.Value2
ColsCount = r.Columns.Count
For Row = 1 To UBound(v)
For Col = 1 To ColsCount
Text = CStr(v(Row, Col))
GoSub Join
Next
Next
'2次元配列定数の結合処理
ElseIf (True) Then
'配列が一次元なら一次元配列用の処理へ移行
On Error GoTo LinearArray
ColsCount = UBound(Param, 2)
For Row = 1 To UBound(Param, 1)
For Col = 1 To ColsCount
Text = CStr(Param(Row, Col))
GoSub Join
Next
Next
'1次元配列定数の結合処理
Else
LinearArray:
For Row = 1 To UBound(Param)
Text = CStr(Param(Row))
GoSub Join
Next
End If
'単一参照結合処理
ElseIf (ParamType = vbObject) Then
Set r = Param
Text = CStr(r.Value2)
GoSub Join
'定数結合処理
Else
Text = CStr(Param)
GoSub Join
End If
Next
'先頭の区切り文字削除
TEXTJOIN = Mid(TEXTJOIN, Len(Delimiter) + 1)
Exit Function
Join:
If (IgnoreEmpty) Then
If (Text <> "") Then TEXTJOIN = TEXTJOIN & Delimiter & Text
Else
TEXTJOIN = TEXTJOIN & Delimiter & Text
End If
Return
End Function
プログラムの利用について
本プログラムのライセンスは「The MIT License」を適用しています。
本プログラムは無償で利用できますが、本プログラム内の著作権表示及びライセンス表示は削除せずに表示しておいて下さい。
必須ではございませんが、本ホームページのプログラムを書籍またはホームページ等で一般公開したい方は、お問い合わせフォームよりご連絡頂けると幸いです。
スポンサーリンク
Excelカスタム関数MITライセンス,VBA,カスタムワークシート関数,ソースコード
Posted by 黒箱
この記事のトラックバックURL
スポンサーリンク
カテゴリー
スポンサーリンク
-
ホーム -
上へ
PAGE TOP
ディスカッション
コメント一覧
まだ、コメントがありません