【Excelマクロ】文字列を結合する関数

テーマはエクセルのマクロ Excelの話

エクセルで文字列を連結するfuncitonを作成してみました。エクセルで数字を集計した後で文字列に連結したりしたいときに使えます。

作ったfunctionの特徴

  • 引数にできるのは、セル単独、複数のセル、文字列、数字
  • 引数の数は可変長引数を使うことで、いくつでも指定が可能
  • 第1引数で結合する際に間に入れる文字列を指定可能、””で空白を指定することでそのまま連結することも可能

数値はそのまま連結するfunction

完成版のVBAのコードです。

Function ranges_join(sep, ParamArray rangesArr()) As String

'選択範囲や文字列や数値を連結する
'1つ目の引数が接続文字列

Dim outStr As String
outStr = ""

If UBound(rangesArr) = -1 Then
    outStr = ""

Else
    Dim i As Long
    For i = LBound(rangesArr) To UBound(rangesArr)
        If TypeName(rangesArr(i)) = "Range" Then
            If rangesArr(i).Cells.Count = 1 Then
                outStr = outStr & sep & rangesArr(i).Value
            Else
                Dim c As Range
                For Each c In rangesArr(i)
                    outStr = outStr & sep & c.Value
                Next
            End If
        Else
            outStr = outStr & sep & rangesArr(i)
        End If

    Next
End If
    
outStr = Mid(outStr, Len(sep) + 1)
    
ranges_join = outStr
    
    
End Function

Excelのシートで関数として使用できます。

最初の引数で指定した”&”が結合する際に間に入ります。

セルはB2,B3のように単独でも「B7:C8」のように範囲でも指定ができます。
また、”直接入力”のように直接入力も可能です。

この関数の場合は数値は表示形式を反映せずに連結するため、表示が4月1日でも「2024/04/01」や50%も「0.5」で結合されます。

セルの表示形式を反映して結合するfunction

完成版のVBAのコードです。

Function ranges_format_join(sep, ParamArray rangesArr()) As String

'選択範囲や文字列や数値を連結する
'1つ目の引数が接続文字列

Dim outStr As String
outStr = ""

If UBound(rangesArr) = -1 Then
    outStr = ""

Else
    Dim i As Long
    For i = LBound(rangesArr) To UBound(rangesArr)
        If TypeName(rangesArr(i)) = "Range" Then
            If rangesArr(i).Cells.Count = 1 Then
                outStr = outStr & sep & rangesArr(i).Text
            Else
                Dim c As Range
                For Each c In rangesArr(i)
                    outStr = outStr & sep & c.Text
                Next
            End If
        Else
            outStr = outStr & sep & rangesArr(i)
        End If

    Next
End If

outStr = Mid(outStr, Len(sep) + 1)
    
ranges_format_join = outStr
        
End Function

先ほどの関数との違いは、4月1日や50%などのがセルの表示通りに連結されます。
また、「1,000」というようなカンマ区切りも反映して結合します。

1つめのfunctionとの違いは、17行目と21行目を「セル.value」から「セル.text」に変更してセルの表示形式を反映した文字列を取得しています。

任意の数の引数を渡す「ParamArray」

1行目の関数の引数で「ParamArray rangesArr()」を入れています。

これは、任意の数の引数を「rangesArr()」という配列に入れるものです。

「ParamArray 配列名()」という使い方をします。

任意の数の引数を格納するという性質上、ParamArrayは引数の最後でしか使えません。


今回の場合も、「(sep, ParamArray rangesArr())」として2つ引数を設定していますが2つ目にParamArrayを使っています。
これにより、実際に関数を使うときに引数の2つ目以降に指定したものがすべて「rangesArr()」に格納されることとなります。

まとめ

このfunctionを使用することで、Excelのセルの内容を簡単に結合してセルに出力することができます。

コメント

タイトルとURLをコピーしました