文字列の内容 Join関数

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関数を紹介させて頂きました。

皆様の参考になれば幸いです。

Published by

不明 のアバター

yuuya

 現在フリーランスとして仕事を行っております。 新卒でIT企業に入社して、某ECサイトの開発、某銀行の滞納者管理システムの開発、某携帯キャリアのアクセス位置制御システムの開発などの色々なシステム開発に携わって参りました。 体調を崩して他業種に転職をしましたがIT技術を生かし、業務の効率化を提案して2時間かかる作業を2分で終らせられる様に作業の自動化などを行ってきました。  私は働きすぎて体を壊したので私の知識で、少しでも皆様の帰宅時間を速める事が出来るなら幸いです。

コメントを残す