VB6・VBA関数メモ:Split関数

Split関数についてメモしておきます。
文字列を分割して配列にしたいときに使用します。

VB6・VBAでは定数配列が使用できない為、
カンマ区切り等の文字列定数をこの関数で分割して、定数配列の代わりにするのも良いかもしれません。
(VB6・VBAメモ:定数配列の代替案)


概要

Split(Expression, [Delimiter], [Limit], [Compare])
機能 文字列を指定要素で区切って1 次元配列に変換
戻り値 1 次元配列


引数

引数名説明
Expression 変換対象となる文字列
Delimiter (省略可)
Expressionの文字列を区切る文字列
Limit (省略可)
配列の要素数
-1(または省略)を指定すると全ての文字列を含んだ配列を返す
Compare (省略可)
比較モードの定数


引数:定数

引数:Compare
定数名説明使用例出力
配列
vbUseCompareOption -1 Option Compare ステートメントの設定を使用
Split("12ab34AB56", "ab", , VbUseCompareOption)
12
34AB56
vbBinaryCompare 0 (規定値)
バイナリモード
※大文字と小文字、半角と全角、ひらがなとカタカナを区別する
Split("12ab34AB56", "ab", , vbBinaryCompare)
12
34AB56
vbTextCompare 1 テキストモード
※大文字と小文字、半角と全角、ひらがなとカタカナを区別しない
Split("12ab34AB56", "ab", , vbTextCompare)
12
34
56
vbDatabaseCompare 2 (Accessのみ)
DBに格納されている設定に基づいて比較
Split("12ab34AB56", "ab", , vbDatabaseCompare)
12
34
56


使用例

説明記述例出力
「/」区切りの文字列を配列に分割
Dim datas() As String
Dim i As Long

datas = Split("abc/def/ghi/jkl/mno", "/")

For i = LBound(datas) To UBound(datas)
    Debug.Print datas(i)
Next i
abc
def
ghi
jkl
mno
「/」区切りの文字列を配列に分割
(配列の要素数を「3」に指定)
Dim datas() As String
Dim i As Long

datas = Split("abc/def/ghi/jkl/mno", "/", 3)

For i = LBound(datas) To UBound(datas)
    Debug.Print datas(i)
Next i
abc
def
ghi/jkl/mno
大文字と小文字、半角と全角、ひらがなとカタカナを区別しないで分割
Dim datas() As String
Dim i As Long

datas = Split("1あ2ア3ア4", "ア", , vbTextCompare)

For i = LBound(datas) To UBound(datas)
    Debug.Print datas(i)
Next i
1
2
3
4


応用例

説明記述例出力
文字列を複数のキーワードで分割
(「AB」と「CD」で分割し、同じ配列に格納)
'複数のキーワードで文字列を分割した配列を返す
Function Split2(Expression, ParamArray delimiters())

Dim datas() As String, tmp() As String, tmp2()  As String
Dim i As Long, j As Long, k As Long
Dim cnt As Long

ReDim tmp(0)
tmp(0) = Expression
For i = LBound(delimiters) To UBound(delimiters)
    Erase datas
    cnt = 0
    
    For j = LBound(tmp) To UBound(tmp)
        tmp2 = Split(tmp(j), delimiters(i))
        
        For k = LBound(tmp2) To UBound(tmp2)
            ReDim Preserve datas(cnt)
            datas(cnt) = tmp2(k)
            cnt = cnt + 1
        Next k
    Next j
    
    tmp = datas
Next i

Split2 = datas
End Function



Dim datas() As String
Dim i As Long

datas = Split2("12AB34CD56AB78CD90", "AB", "CD")

For i = LBound(datas) To UBound(datas)
    Debug.Print datas(i)
Next i
12
34
56
78
90


コメント
コメントする








    
この記事のトラックバックURL
トラックバック