Join関数は文字列を結合する関数です。
文字列型配列に任意の区切り文字を付けたい時などに使用します。
Join関数の構文
Join(sourcearray, [delimiter])
Join(1次元配列, [区切り文字])
[]内は省略可能です。
省略を行った場合は文字列と文字列の間に空白が入ります。
Join関数の使用例
・文字列の結合方法
・文字列型配列に文字列が無い場合
・文字列型配列が2次元配列の場合
・セルから文字列を取得して結合した文字列をセルに設定
・Excelのデータ一覧からSQLのINSERT文を作成
・文字列の結合の処理時間
の内容で説明していきます。
文字列の結合方法
文字列の結合を行う方法は複数存在します。
・”+”を使用する場合
・”&”を使用する場合
・Joinを使用する場合
・Joinを使用して任意の区切り文字を設定する場合
を紹介します。
“+”を使用する場合
Sub 文字列の結合1()
Dim str As String
str = "abc" + " " + "def"
MsgBox str
End Sub

“abc”と” “と”def”の結合なので “abc def”が表示されます。
“&”を使用する場合
Sub 文字列の結合2()
Dim str As String
str = "abc" & " " & "def"
MsgBox str
End Sub

“abc”と” “と”def”の結合なので “abc def”が表示されます。
Joinを使用する場合
Sub 文字列の結合3()
Dim str(1) As String
str(0) = "abc"
str(1) = "def"
MsgBox Join(str)
End Sub
strの1次元配列に”abc”と”def”が設定されています。

任意の区切り文字を設定していないため”abc”と”def”の間に” “が入ります。
Joinを使用して任意の区切り文字を設定する場合
Sub 文字列の結合4()
Dim str(1) As String
str(0) = "abc"
str(1) = "def"
MsgBox Join(str, ",")
End Sub
任意の区切り文字を”,”に設定しました。

任意の区切り文字を”,”に設定してしたため”abc”と”def”の間に”,”が入ります。
文字列型配列に文字列が無い場合
Sub Join1()
Dim str() As String
MsgBox Join(str)
End Sub
配列には何も設定していません。

何も設定されていないため何も表示されません。
文字列型配列が2次元配列の場合
Sub Join2()
Dim str() As String
ReDim str(1, 2)
str(0, 0) = "a"
str(0, 1) = "b"
str(0, 2) = "c"
str(1, 0) = "d"
str(1, 1) = "e"
str(1, 2) = "f"
MsgBox Join(str)
End Sub
Joinは1次元配列しか設定できませんが、2次元配列を設定します。

1次元配列しか設定できないのでエラーが発生します。
セルから文字列を取得して結合した文字列をセルに設定

セルに複数の行が設定されています。
A~D列の値を取得し、E列に結合して表示させます。
Sub Join3()
Dim str() As String
Dim i, j As Integer
Dim gyo, retu As Integer
'入力されている行数を取得
gyo = Cells(1, 1).End(xlDown).Row
'入力されている列数を取得
retu = Cells(1, 1).End(xlToRight).Column
'配列の設定
ReDim str(retu - 1)
'文字列の結合を繰り返し
For i = 2 To gyo
For j = 1 To retu
'セルの文字列を配列に設定
str(j - 1) = Cells(i, j)
Next j
'配列の文字列を列の末端の隣のセルに設定
Cells(i, retu + 1) = Join(str, ",")
Next i
End Sub
任意の区切り文字は”,”を設定しています。

A~D列のセルの値が”,”区切りでE列に設定されました。
文字列の結合の処理時間
文字列の結合方法で3つご紹介させて頂きました。
Joinを使用した場合が処理時間が速いです。
簡単な文字列の結合でしたら処理時間など気になりませんが、結合する文字列が大量だった場合、処理時間が変わってきます。
処理時間の計測方法
・47都道府県名のデータを”,”で区切ます。
・それを1000回繰り返しString型に設定した時間を計測します。

B列に47都道府県を設定しています。
“+”を使用する場合
Sub 結合時間の計測1()
Dim setStr As String
Dim i, j As Integer
'計測時間の宣言
Dim startTime As Double
Dim endTime As Double
Dim processTime As Double
'開始時間取得
startTime = Timer
'初期設定
setStr = ""
'文字列の結合を繰り返し
For i = 1 To 1000
For j = 1 To 47
'セルの文字列を配列に設定
setStr = setStr + Cells(j, 2) + ","
Next j
Next i
'終了時間取得
endTime = Timer
'処理時間表示
processTime = endTime - startTime
MsgBox "処理時間:" & processTime
End Sub

“&”を使用する場合
Sub 結合時間の計測2()
Dim setStr As String
Dim i, j As Integer
'計測時間の宣言
Dim startTime As Double
Dim endTime As Double
Dim processTime As Double
'開始時間取得
startTime = Timer
'初期設定
setStr = ""
'文字列の結合を繰り返し
For i = 1 To 1000
For j = 1 To 47
'セルの文字列を配列に設定
setStr = setStr & Cells(j, 2) & ","
Next j
Next i
'終了時間取得
endTime = Timer
'処理時間表示
processTime = endTime - startTime
MsgBox "処理時間:" & processTime
End Sub

Joinを使用する場合
Sub 結合時間の計測3()
Dim str(46999) As String
Dim i, j As Integer
Dim setStr As String
'計測時間の宣言
Dim startTime As Double
Dim endTime As Double
Dim processTime As Double
'開始時間取得
startTime = Timer
'文字列の結合を繰り返し
For i = 1 To 1000
For j = 1 To 47
'セルの文字列を配列に設定
str(((i - 1) * 47) + j - 1) = Cells(j, 2)
Next j
Next i
'配列の文字列をString型に設定
setStr = Join(str, ",")
'終了時間取得
endTime = Timer
'処理時間表示
processTime = endTime - startTime
MsgBox "処理時間:" & processTime
End Sub

処理時間のまとめ
・”+”を使用する場合 0.5秒
・”&”を使用する場合 0.484375秒
・Joinを使用する場合 0.14453125秒
上記の通りJoinを使用した場合が一番速いので、データ量が多い場合はJoinを使用することをお勧めします。
今回はJoin関数を紹介させて頂きました。
皆様の参考になれば幸いです。