Excel関数 逆引き集 | VBAコード生成補助 → TEXTJOIN

Excel
スポンサーリンク

概要

「VBAのコードを大量に書くのが面倒…」
「変数宣言を一気に作りたい」
「配列の初期化文をExcelから自動生成したい」
「Select Case の Case 文をリストから作りたい」

こういう “VBAコードの部品をExcelで自動生成したい” ときに最強なのが TEXTJOIN 関数です。

TEXTJOIN は
「区切り文字を指定して、複数セルをまとめて結合する」
という関数で、VBAコードのような「規則的な文字列」を作るのに非常に向いています。

ここでは、初心者でもすぐ使えるように、
VBAコード生成に特化したTEXTJOINの使い方 をテンプレートと例題つきで丁寧に解説します。


TEXTJOIN の基本

基本構文

=TEXTJOIN(区切り文字, 空白セル無視, 結合範囲)

例:

=TEXTJOIN(", ", TRUE, A2:A5)

A2:A5 が
A
B
C
D
なら結果は

A, B, C, D

VBAコード生成では、この「区切り文字」を

  • vbCrLf(改行)
  • ","(カンマ)
  • " & vbCrLf & "(VBAの改行連結)
  • "Case "(Case文の接頭辞)

などに変えることで、コードを量産できます。


パターン1:変数宣言(Dim文)をまとめて生成

例:A2:A5 に変数名が入っているとする

A2:userName
A3:userId
A4:userAge
A5:userMail

これを次のようなVBAコードにしたい:

Dim userName As String
Dim userId As String
Dim userAge As String
Dim userMail As String

まず、B2 に次の式を入れて下へコピーします。

="Dim " & A2 & " As String"

B2:B5 がすべて「Dim ~」の形になります。

次に、どこかのセルで TEXTJOIN を使います。

=TEXTJOIN(CHAR(10), TRUE, B2:B5)

結果:

Dim userName As String
Dim userId As String
Dim userAge As String
Dim userMail As String

これをそのままVBAに貼り付ければOKです。


パターン2:Select Case の Case 文を生成

例:A2:A5 にコード一覧があるとする

A2:A001
A3:A002
A4:A003
A5:A004

これを次のような Case 文にしたい:

Case "A001"
Case "A002"
Case "A003"
Case "A004"

B2 に次の式を入れて下へコピー:

="Case """ & A2 & """"

""" はダブルクォートを文字として出すため)

B2:B5 が Case 文になります。

あとは TEXTJOIN:

=TEXTJOIN(CHAR(10), TRUE, B2:B5)

これで Case 文が一気に生成できます。


パターン3:配列の初期化文を生成

例:A2:A5 に値が入っているとする

A2:Apple
A3:Orange
A4:Banana
A5:Grape

これを VBA の配列初期化文にしたい:

arr = Array("Apple", "Orange", "Banana", "Grape")

まず、B2 に次の式を入れて下へコピー:

="""" & A2 & """"

(値をダブルクォートで囲む)

B2:B5 が "Apple" のような形になります。

次に TEXTJOIN:

="arr = Array(" & TEXTJOIN(", ", TRUE, B2:B5) & ")"

結果:

arr = Array("Apple", "Orange", "Banana", "Grape")

パターン4:With ~ End With の中身を生成

例:A2:A5 にプロパティ名があるとする

A2:Name
A3:Age
A4:Mail
A5:Address

これを次のようにしたい:

.Name = Name
.Age = Age
.Mail = Mail
.Address = Address

B2 に次の式を入れて下へコピー:

="." & A2 & " = " & A2

B2:B5 がプロパティ設定文になります。

TEXTJOIN:

=TEXTJOIN(CHAR(10), TRUE, B2:B5)

これを With ブロックに貼り付ければ完成です。


パターン5:複数行のコードを「VBA文字列」として生成

VBAでメッセージボックス用の長文を作りたいときなど、
Excelでコードを生成してしまうと便利です。

例:A2:A4 に

A2:処理を開始します
A3:しばらくお待ちください
A4:完了しました

これを VBA の

MsgBox "処理を開始します" & vbCrLf & _
       "しばらくお待ちください" & vbCrLf & _
       "完了しました"

のようにしたい場合。

B2 に次の式を入れて下へコピー:

="""" & A2 & """ & vbCrLf & _"

最後の行だけは _ を外す必要がありますが、
TEXTJOIN でまとめると次のようにできます。

=TEXTJOIN(CHAR(10), TRUE, B2:B4)

必要に応じて最後の _ を手で削除すればOKです。


VBAコード生成の“型”まとめ

Dim文生成

="Dim " & A2 & " As String"

Case文生成

="Case """ & A2 & """"

配列初期化文

="arr = Array(" & TEXTJOIN(", ", TRUE, B2:B5) & ")"

Withブロック用プロパティ設定

="." & A2 & " = " & A2

複数行のVBA文字列生成

="""" & A2 & """ & vbCrLf & _"

例題

問題1

A2:A5 に変数名が入っています。
これらを「Dim 変数名 As String」の形にし、改行で結合したいです。
TEXTJOIN を使った式を書いてください。

=TEXTJOIN(CHAR(10), TRUE, B2:B5)

(※B2:B5 に "Dim " & A2 & " As String" を作っておく)


問題2

A2:A5 にコード一覧が入っています。
これらを Case "コード" の形にして、改行で結合したいです。
TEXTJOIN を使った式を書いてください。

=TEXTJOIN(CHAR(10), TRUE, B2:B5)

(※B2 に ="Case """ & A2 & """" を作っておく)


問題3

A2:A5 に値が入っています。
これらを "値" の形にしてカンマ区切りで結合し、
arr = Array(...) の形にしたいです。
TEXTJOIN を使った式を書いてください。

="arr = Array(" & TEXTJOIN(", ", TRUE, B2:B5) & ")"

問題4

A2:A5 にプロパティ名が入っています。
これらを .Name = Name のような形にして、改行で結合したいです。
TEXTJOIN を使った式を書いてください。

=TEXTJOIN(CHAR(10), TRUE, B2:B5)

問題5

A2:A4 にメッセージ文が入っています。
これらを "文" & vbCrLf & _ の形にして、改行で結合したいです。
TEXTJOIN を使った式を書いてください。

=TEXTJOIN(CHAR(10), TRUE, B2:B4)

TEXTJOIN は、
「ExcelでVBAコードを大量生成するための最強ツール」 と言っても過言ではありません。
規則的なコードはすべて Excel で作れるので、
ぜひ“VBAコード生成の型”として活用してみてください。

Excel
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました