みなさん、こんにちは。
ITソリューション事業部の林です。
本記事では、ExcelVBAのテクニックを紹介・解説いたします。
今回紹介するのは、「Split関数」です。
【目次】
それでは、始めましょう!
Split関数とは
この関数の機能は、「指定した文字列を区切り文字で分割した結果を返す」です。
具体的にどのような感じになるのか、解説いたします。
以下の文字列があったとします。
09:00~18:00
開始時間と終了時間が一つの文字列になっています。
これを「開始時間」と「終了時間」で別々に取り出したい、といったときにSplit関数を使用します。
Split関数の構文
「09:00~18:00」をSplit関数で分割するソースコードです。
「09:00」だけ取り出して変数に取得するには以下のとおりです。
Sub ExcelVBA_009() Dim Result Result = Split("09:00~18:00", "~")(0) End Sub
「18:00」だけ取り出すには以下のように書きます。
Sub ExcelVBA_009() Dim Result Result = Split("09:00~18:00", "~")(1) End Sub
Split関数の末尾にある(0)や(1)は要素番号と言い、分割後文字から何番目を取り出すか番号指定します。
この時、最初の文字は必ずゼロから始まりますので注意しましょう。

さて、このSplit関数が本来どのような値を返すかというと、「配列」を返します。
配列とは、以下のような構造になっており、内部に複数の値を持っています。

通常、変数にはひとつの値しか持たせられませんが、配列は複数の値を持ちます。
配列から値を取り出すには要素番号を指定する必要があります。
Split関数に戻りますが、これ自体の構文は以下のとおりです。
Split(文字列, 区切り文字)
Split関数は配列を返しますので、末尾に要素番号(0や1)を加えれば、値だけを取り出すことができるのです。
つまり、「変数 = Split("09:00~18:00", "~")(0)」というコードの処理順を整理すると以下①~③になります。



Split関数の戻り値を代入する変数はVariant型にしておきましょう。
他のデータ型にするとエラーの原因になります。
Split関数の使用例
ここではファイルパスの文字列操作を例にします。
使用例① 文字列を配列に変換して、要素数を調べる
文字列を"\"で区切ったときに、要素がいくつ存在するかわかります。
ここでは配列の最後の要素番号を返すUbound関数を使用します。
Sub ExcelVBA_009_Example1() '文字列を配列にする Dim Result As Variant Result = Split("D:\ラピードアクト\サンプル.txt", "\") '配列の最後の要素番号を表示する MsgBox UBound(Result) End Sub

使用例② 文字列を配列に変換して、値を出力する
文字列を"\"で区切って配列に格納し、配列の値をセルに展開します。
Sub ExcelVBA_009_Example2() '文字列を配列にする Dim Result As Variant Result = Split("D:\ラピードアクト\サンプル.txt", "\") '配列のすべての要素をセルに書き込む Dim Idx As Long For Idx = 0 To UBound(Result) Cells(Idx + 1, 1).Value = Result(Idx) Next End Sub

使用例③ 文字列を配列に変換して、最後の要素を取り出す
文字列を"\"で区切って配列に格納し、ファイル名を表示します。
Sub ExcelVBA_009_Example3() '文字列を配列にする Dim Result As Variant Result = Split("D:\ラピードアクト\サンプル.txt", "\") '配列の最後の要素を表示する MsgBox Result(UBound(Result)) End Sub

終わりに
以上、Split関数について解説いたしました。
VBAでデータを加工して扱うには、このような文字列操作関数を覚えておくと大変便利です。
文字列操作関連のテクニックは多くありますが、焦って一度に覚えようとせず、ひとつずつ覚えていきましょう。
それでは、また次回お会いしましょう!