VBA(Excel)で文字列結合(Join)する関数
TEXTJOIN関数が使えないときに使うため、文字列結合関数を書きました。 エラー処理などは省略していますので、実用の際は適当に拡張してお使い下さい。
概要
イメージとしては、[引数1, 引数2, 引数3...] となった時に、"引数1, 引数2, 引数3, ..." という文字列を返却してくれる関数ということです。 Excelの標準関数にTEXTJOINというのが追加されましたが、こちらはMicrosoft 365でしか使えないのかな?よくわかりません。なので、 TEXTJOINが使えないときにサクっと使えるようにするため、StrJoinという関数を書きました。
仕様
- 引数で指定された内容を指定された結合文字列で繋いだ文字列を返却する
- 値数式で参照可能
- 範囲でも指定可能
- 直接指定可能
- 接続文字、先頭、末尾文字を指定可能
ソース
Option Explicit '' ' 文字列の結合関数 ' ' 処理概要: ' 文字列の結合を行います。 ' 特徴 ' ・値数式で参照可能 ' ・範囲でも指定可能 ' ・直接指定可能 ' ・接続文字、先頭、末尾文字を指定可能 ' ' 引数: ' x_startStr - 開始文字列 ' x_endStr - 終了文字列 ' x_joinStr - 接続文字列 ' x_values - 文字列や範囲(複数指定可) ' Public Function StrJoin(x_startStr As String, x_endStr As String, x_joinStr As String, ParamArray x_values() As Variant) As String Dim p_result As String: p_result = "" Dim p_ratch As Boolean: p_ratch = False Dim p_value As Variant For Each p_value In x_values If TypeName(p_value) = "Range" Then Dim p_RangeValue As Range: Set p_RangeValue = p_value Dim p_rng As Range For Each p_rng In p_RangeValue If p_ratch Then p_result = p_result & x_joinStr Else p_ratch = True p_result = p_result & p_rng.Value Next p_rng Else If p_ratch Then p_result = p_result & x_joinStr Else p_ratch = True p_result = p_result & CStr(p_value) End If Next p_value StrJoin = x_startStr & p_result & x_endStr End Function
挙動とは関係ないですが、VBEのエディタが貧弱なので、変数名に以下のコーディングルールを採用しています。
- 引数の変数名は "x_" で始める。その後ろは自由
- ローカル変数名は "p_" で始める。その後ろは自由
上記コードもこのルールで記述しています。
リポジトリ
利用例(デモ)
まとめ
- Excel関数としても利用できます
- TEXTJOINが使えるときは、そちらを使ったほうがいいかもしれません