[Excel]CONCATカスタム関数

2020年5月4日

概要

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

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

Microsoft社ホームページ

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

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

コード

下記のコードを全てコピーし、標準モジュール等に貼り付けて下さい。下記のコード表示欄の右上に「Copy」ボタンがありますのでご使用下さい。なお、標準モジュールが何だか分からない方は、 Excelのカスタムワークシート関数を使用する方法 を参照して下さい。

'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

ソースコードの利用について

本ソースコードは「GPL v3.0(GNU General Public License Version 3.0)」ライセンスで利用可能です。

本ソースコードを私的に利用される方は、本ソースコードが無料で利用できると考えて差し支え御座いません。下記の著作権表示をソースコード内に表示して頂ければ幸いです。

Copyright © 2017 黒い箱の中 All Rights Reserved.(https://kuroihako.com/)

本ホームページのソースコードを利用したソフトウェアを商用利用したり、ホームページ等で一般公開する方は、本ホームページのソフトウェアまたはソースコードに適用されているライセンスをご理解頂いてからご使用ください。同ライセンス以外での利用をご希望の方はお問い合わせフォームよりご連絡下さい。