『Excel VBA 表計算とプログラミング学習サイト』では、アフィリエイトプログラムを利用して商品を紹介しています。

【VBA】Split関数(文字列をデリミタで分割)

【VBA】Split関数

皆さん、今日も元気に VBA してますか?
VBA ハイマスターこばとちゃんも毎日元気に VBA してますよ。
今回は VBASplit関数 を使って文字列を切り分ける方法を勉強しましょう。
 
Split は文字列をデリミタで区切って、それぞれの文字列を 1 次元配列に格納します。

Split(文字列, [デリミタ, [分割数, [,比較方法])

「デリミタ」というのは「ここが分割する場所だよ」という目印になる記号のことです。何を指定してもいいんだけど、普通は「、」とか「,」とか、半角スペースを指定します。「分割数」と「比較方法」については、滅多に使う機会もないし、説明するのが面倒くさいので、ここは省略しちゃってください。要するに Split関数は

Split(文字列, デリミタ)

で使うものだと覚えましょう。デリミタを省略すると半角スペースを指定したものとみなされます。
 
Split 関数のサンプルコードです。

'[VBA] Split関数のサンプルコード(1)

Sub Split_String()

  Dim i As Integer
  Dim mystr As String

  '分割された文字列を格納するための配列変数
  Dim myarray() As String

  mystr = "こばとちゃんは、今日も元気に、飛び回っています"

  'Split関数を使って文字列を「、」で分割
  myarray = Split(mystr, "、")

  For i = 0 To UBound(myarray)
    Debug.Print myarray(i)
  Next i

End Sub

'Split_String の実行結果:
'こばとちゃんは
'今日も元気に
'飛び回っています

Split で分割された文字を格納するための変数を配列変数にしておくことを忘れないようにしてください。上のコードでは myarray() を配列変数として宣言しています。デリミタは「、」です。
 
Split 関数のサンプルコードをもう一つ作っておきましょう。こんなワークシートを用意してくださいな。
 
Split関数 名前と苗字の分割1
 
図のように、A 列に氏名が入力されていて、苗字と名前が半角スペースで区切られている場合、たとえば、次のようなマクロで苗字と名前を B 列と C 列に分割することができます。

'[VBA] Split関数のサンプルコード(2)

Sub Split_Name()

  Dim i As Long
  Dim ect As Long, rct As Long
  Dim mystr As String
  Dim myname As Variant

  'シートの行数を数えます
  ect = ActiveSheet.Rows.Count

  'A列の最終行を得ます
  rct = Cells(ect, 1).End(xlUp).Row

  'Split関数を使って2行目から最終行まで苗字と名前を分割します
  For i = 2 To rct
    myname = Split(Cells(i, 1))
    Cells(i, 2) = myname(0)
    Cells(i, 3) = myname(1)
  Next i

End Sub

Split_Name() を実行すると、B 列に苗字、C 列に名前のデータが入ります。
 
Split関数 名前と苗字の分割(マクロ実行後)
 
ちなみに、split は「分ける、区切る、割る」という意味の単語です。Longman 英英辞典で調べてみると、「意見の相違によって、グループが二つに分かれること」みたいな説明が(英語で)書いてありました。人間同士が仲違いして分裂するのは悲しいけど、文字列だったら、どんなに分割したっていいんです。自分でも何言ってんだかわからなくなりましたけど、まあとにかく、皆さんも VBA の Split で文字列を分割しまくってくださいな。

コメント

  1. あとりえこばと より:

    【AI解説】VBAのSplit関数の応用例

    [ChatGPT] Split関数は非常に柔軟な関数であり、さまざまな応用例があります。以下にいくつかの高度な応用例を示します。
     
    1.複数の区切り文字を使用する場合:Split関数は、複数の区切り文字を指定することも可能です。例えば、スペースとコンマの両方で文字列を分割する場合、以下のように書くことができます:

    Sub SplitSample()
        Dim text As String
        Dim parts() As String
        text = "りんご, バナナ オレンジ, パイナップル"
        parts = Split(text, ", ")
    End Sub

    この場合、スペースとコンマの両方が区切り文字として使用され、文字列は分割されて配列に格納されます。
     
    2.分割数を制限する場合:最大分割数を指定することで、文字列の先頭から指定した数だけ分割を行うことができます。以下はその例です:

    Sub SplitSample2()
        Dim text As String
        Dim parts() As String
        text = "りんご,バナナ,オレンジ,パイナップル"
        parts = Split(text, ",", 2)
    End Sub

    この場合、最大分割数が2で指定されているため、最初の2つの要素だけが分割され、配列に格納されます。
     
    3.分割結果を特定の変数に格納する場合:Split関数の結果を配列に格納する代わりに、個々の要素を別々の変数に直接格納することもできます。以下はその例です:

    Sub SplitSample3()
        Dim text As String
        Dim part1 As String
        Dim part2 As String
        Dim part3 As String
        text = "りんご,バナナ,オレンジ"
        part1 = Split(text, ",")(0)
        part2 = Split(text, ",")(1)
        part3 = Split(text, ",")(2)
    End Sub

    この場合、要素ごとに個別の変数が作成され、それぞれの要素が格納されます。これらはSplit関数の高度な応用例の一部です。Split関数は文字列の分割とデータ処理に便利な機能を提供しており、さまざまなシナリオで活用することができます。