[Excel]CONCATカスタム関数

2022年3月21日

概要

CONCAT関数のカスタム関数を作成しました。機能はExcel365やExcel2019のCONCAT関数と同じです。

CONCAT 関数は、複数の範囲や文字列からのテキストを結合しますが、区切り記号または IgnoreEmpty 引数は提供しません。 CONCATENATE関数を置き換えます。 ただし、CONCATENATE 関数は、以前のバージョンの Excel との互換性を保つため、引き続き使用できます。 

Microsoft社ホームページ

下記のコードを標準モジュールに貼り付けることで、Excel2016以前のExcel(Excel2007,Excel2010,Excel2013など)でもCONCATE関数を使用することが出来ます。貼り付け方は下記を参照してください。

TEXTJOINカスタム関数を書いたついでに書きました。本来ならCONCATEカスタム関数内ではTEXTJOINカスタム関数を呼び出してコードを再利用したい所ですが、単体でコピーして使用できるように独立した関数にしています。

コード

下記のコードを全てコピーし、標準モジュール等に貼り付けて下さい。下記のコード表示欄の右上に「Copy」ボタンがありますのでご使用下さい。なお、標準モジュールが何だか分からない方は、 Excelのカスタムワークシート関数を使用する方法 を参照して下さい。
' [Excel]CONCATカスタム関数 
' Copyright (c) 2020-2024  黒箱 
' This software is released under the MIT License;. 
' このソフトウェアはMITライセンスの下でリリースされています。 

'CONCAT関数
'* @fn Public Function CONCAT(ParamArray Params() As Variant) As Variant
'* @brief Excel365・Excel2019のCONCAT関数をExcel2016以前で使用可能にします。
'* @param[in] Params       結合する追加のテキスト項目。 テキスト項目には最大 254 の引数を設定可能です。 各引数には、文字列、またはセルの範囲などの文字列の配列を指定できます。
'* @return Variant 結合した文字列。
'* @details CONCAT関数は、複数の範囲や文字列からのテキストを結合しますが、区切り記号または IgnoreEmpty 引数は提供しません。
'*
Public Function CONCAT(ParamArray Params() As Variant) As Variant
    
    Dim v As Variant
    Dim r As Range
    
    
    Dim Param As Variant
    Dim ParamType As VbVarType
    
    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
                        CONCAT = CONCAT & CStr(v(Row, Col))
                    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
                        CONCAT = CONCAT & CStr(Param(Row, Col))
                    Next
                Next
            
            '1次元配列定数の結合処理
            Else
LinearArray:
                For Row = 1 To UBound(Param)
                    CONCAT = CONCAT & CStr(Param(Row))
                Next
            End If
        
        '単一参照結合処理
        ElseIf (ParamType = vbObject) Then
            Set r = Param
            CONCAT = CONCAT & CStr(r.Value2)
                
        '定数結合処理
        Else
            CONCAT = CONCAT & CStr(Param)
            
        End If
        
    Next
    
    Exit Function

End Function

プログラムの利用について

本プログラムのライセンスは「The MIT License」を適用しています。

本プログラムは無償で利用できますが、本プログラム内の著作権表示及びライセンス表示は削除せずに表示しておいて下さい。

必須ではございませんが、本ホームページのプログラムを書籍またはホームページ等で一般公開したい方は、お問い合わせフォームよりご連絡頂けると幸いです。

スポンサーリンク