結合(文字列や配列の結合)
Excel VBAで「複数の文字列をまとめたい」「配列を一つの文字列にしたい」ときに便利なのが 結合処理 です。初心者向けに、コード例とテンプレートをかみ砕いて説明します。
基本の考え方
- 文字列結合:
&演算子で文字列をつなげる。 - Join関数: 配列の要素をまとめて一つの文字列にする。
- 用途: 顧客名リストをまとめる、住所を一行にする、CSV形式を作るなど。
テンプレ1:文字列を単純に結合
Sub Concat_String()
Dim s1 As String, s2 As String
s1 = "Excel"
s2 = "VBA"
Dim result As String
result = s1 & " " & s2
MsgBox result ' → "Excel VBA"
End Sub
VB- ポイント:
&を使えば簡単に文字列をつなげられる。
テンプレ2:複数セルの値を結合
Sub Concat_Range()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim result As String
result = ws.Range("A1").Value & " - " & ws.Range("B1").Value
MsgBox result
End Sub
VB- ポイント: セルの値を結合して一つの文字列にできる。
テンプレ3:配列を一括結合(Join関数)
Sub Concat_Array()
Dim fruits As Variant
fruits = Array("りんご", "みかん", "バナナ", "ぶどう")
Dim result As String
result = Join(fruits, ", ")
MsgBox result ' → "りんご, みかん, バナナ, ぶどう"
End Sub
VB- ポイント:
Joinは一次元配列専用。区切り文字を指定できる。
テンプレ4:シートの列を配列化して結合
Sub Concat_Column()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim v As Variant: v = ws.Range("A2:A" & lastRow).Value
' 一次元配列に変換
Dim arr() As String
ReDim arr(1 To UBound(v, 1))
Dim i As Long
For i = 1 To UBound(v, 1)
arr(i) = v(i, 1)
Next i
Dim result As String
result = Join(arr, vbCrLf)
MsgBox result
End Sub
VB- ポイント: Rangeを読み込むと二次元配列になるので一次元に変換してから
Join。
テンプレ5:結合してCSV形式を作る
Sub Concat_ToCSV()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("A2:C5")
Dim v As Variant: v = rg.Value
Dim r As Long, c As Long, line As String, result As String
For r = 1 To UBound(v, 1)
line = ""
For c = 1 To UBound(v, 2)
line = line & v(r, c)
If c < UBound(v, 2) Then line = line & ","
Next c
result = result & line & vbCrLf
Next r
MsgBox result
End Sub
VB- ポイント: 行ごとに結合してCSV形式を作れる。
例題で練習
'例1:文字列を結合
Sub Example1()
Concat_String
End Sub
'例2:セルの値を結合
Sub Example2()
Concat_Range
End Sub
'例3:配列を一括結合
Sub Example3()
Concat_Array
End Sub
'例4:列を配列化して改行区切りで結合
Sub Example4()
Concat_Column
End Sub
'例5:表をCSV形式に結合
Sub Example5()
Concat_ToCSV
End Sub
VB初心者向けポイント
- 文字列結合は「&」が基本:
+ではなく&を使う。 - Joinで配列を一括結合: 区切り文字を自由に指定できる。
- Rangeは二次元配列: 一次元に変換してからJoin。
- CSV形式も作れる: 行ごとに結合して改行を入れる。
- 大量データでも高速: 配列で処理してから一括で出力する。
