例文を使って繰り返し業務を時短

【マクロ・VBA】Split関数を利用して文字列を分割する

エクセル、マクロ、VBAのSplit関数で文字列を分割する方法 VBA

Split関数とは

Split関数は、指定された区切り文字で文字列を分割して配列に格納するVBAの関数です。以下は、Split関数の使用例です。

例1:コンマで区切られた文字列を分割する

Sub SplitExample1()
    Dim str As String
    Dim arr As Variant
    
    ' 文字列を指定
    str = "apple,banana,orange"
    
    ' 区切り文字を指定して分割
    arr = Split(str, ",")
    
    ' 結果を表示
    For i = 0 To UBound(arr)
        Debug.Print arr(i)
    Next i
End Sub

このコードでは、文字列 “apple,banana,orange” をコンマで分割して、配列 arr に格納しています。Split関数の第1引数には対象の文字列を、第2引数には区切り文字を指定しています。配列の要素には、各区切り文字で分割された文字列が格納されています。

例2:スペースで区切られた文字列を分割する

Sub SplitExample2()
    Dim str As String
    Dim arr As Variant
    
    ' 文字列を指定
    str = "apple banana orange"
    
    ' 区切り文字を指定して分割
    arr = Split(str)
    
    ' 結果を表示
    For i = 0 To UBound(arr)
        Debug.Print arr(i)
    Next i
End Sub

このコードでは、文字列 “apple banana orange” をスペースで分割して、配列 arr に格納しています。Split関数の第2引数を省略すると、スペースが区切り文字として使用されます。

例3:セミコロンと改行で区切られた文字列を分割する

Sub SplitExample3()
    Dim str As String
    Dim arr As Variant
    
    ' 文字列を指定
    str = "apple;banana;orange" & vbNewLine & "grape;melon;peach"
    
    ' 区切り文字を指定して分割
    arr = Split(str, ";" & vbNewLine)
    
    ' 結果を表示
    For i = 0 To UBound(arr)
        Debug.Print arr(i)
    Next i
End Sub

このコードでは、文字列 “apple;banana;orange” と “grape;melon;peach” をセミコロンと改行で分割して、配列 arr に格納しています。Split関数の第2引数には、セミコロンと改行を連結した文字列を指定しています。vb改行

Split関数:文字列を分割する

・Split関数
 構文:Split(元の文字列 , 区切り文字)
    ⇒戻り値は配列で返される。配列はバリアント型変数か動的配列で宣言する

・配列要素はLBound関数(小さな要素数)とUBound関数(大きな要素数)を使用

For i = LBound(配列) To UBound(配列)
n=配列(i)
next

例文

このVBAコードは、指定したセル範囲内の文字列を空白(全角スペース)で分割し、分割された各要素を別々のセルに配置するものです。

Sub 文字列の分割()
    '変数の宣言
    Dim a As Long 'ループ用変数
    Dim b As Long 'ループ用変数
    Dim rng As Variant '分割した文字列を格納する配列
    Dim i As Long 'ループ用変数
    
    '開始行を指定
    a = 2
    
    '無限ループ
    Do
        'セルの文字列をスペースで分割し、配列に格納
        rng = Split(Cells(a, 2), " ")
        
        '配列の要素を新しい列に出力
        i = 0
        For i = LBound(rng) To UBound(rng)
            Cells(a, 3 + i) = rng(i)
        Next i
        
        '次の行に移動
        a = a + 1
        
        '次のセルが空欄の場合はループを終了
        If Cells(a, 2) = "" Then
            Exit Do
        End If
    Loop
    
    '処理が完了したことを知らせるメッセージボックスを表示
    MsgBox "完了"
End Sub

解説

スクリプトの最初に、2番目の行から処理を開始するように変数aに値2が代入されます。

その後、Doループが開始されます。このループでは、まず、セルB2の文字列を” ”で区切って配列rngに格納します。Split関数は、指定された区切り文字で文字列を分割し、分割された文字列を配列として返します。

その後、配列rngの要素を新しい列に順番に出力します。Forループで、配列rngの要素をすべて出力するまで繰り返します。iは、配列rngの最初の要素であるLBound(rng)から最後の要素であるUBound(rng)まで繰り返し処理を行います。Cells関数を使用して、出力先のセルを指定し、配列rngのi番目の要素を出力します。

最後に、変数aに1を加算して、次の行に移動します。もし、次の行の2列目のセルに値がなければ、ループを終了します。

このコードは、複数の列に分割された文字列を1つの列にまとめることができます。また、分割された各要素を他のセルにコピーするためにも使用できます。

コメント

タイトルとURLをコピーしました