● split 関数を自力実装する ●

VB6.0から登場した split 関数。当然 VB5.0 にはない。悔しいので実装してさしあげましょう。負けてられるか!! 貧乏人の底力をここに示してやる!! VB6.0 を買えなかったからってなめるなよ!!

'-----------------------------------------------------------------------
' 関数名 : SplitData
' 機能   : 指定のデリミタ単位で文字列を分割する
' 引数   : (in) Expression  … 対象文字列
'           (in) Delimiter   … デリミタ
'           (out) StrData    … 分割後文字列
'           (in) IsBinaryCompare … デリミタの比較モード
'                                 True :vbBinaryCompare バイナリ比較
'                                 False:vbTextCompare   テキスト比較
' 戻り値 : 要素数
' 備考   :CompareMode に vbTextCompare、vbBinaryCompare 以外の
'          値が設定されていた場合は vbTextCompare になるよ!!
'-----------------------------------------------------------------------
Public Function SplitData(ByVal Expression As String, _
                          ByVal Delimiter As String, _
                          ByRef StrData() As String, _
                          Optional ByVal IsBinaryCompare As Boolean = True) As Long

    '対象文字列、デリミタが未指定の場合は、配列の先頭に空文字を設定して終了
    If Expression = "" Or Delimiter = "" Then
        ReDim StrData(0) As String
        StrData(0) = Expression
        SplitData = UBound(StrData) + 1
        Exit Function
    End If

    Dim SearchPos As Long
    Dim FoundPos As Long
    Dim CompareMode As Long

    '比較モード設定
    CompareMode = IIf(IsBinaryCompare, vbBinaryCompare, vbTextCompare)

    '検索位置初期化
    SearchPos = 1

    '最後尾にデリミタをくっつける
    Expression = Expression & Delimiter

    Do
        'デリミタ検索
        FoundPos = InStr(SearchPos, Expression, Delimiter, CompareMode)

        'デリミタが見つからなくなったら終了
        If FoundPos = 0 Then Exit Do

        '領域確保、文字列取得&格納
        ReDim Preserve StrData(SplitData) As String
        StrData(SplitData) = Mid$(Expression, SearchPos, FoundPos - SearchPos)

        '次回検索位置算出
        SearchPos = FoundPos + Len(Delimiter)

        'データ数カウント
        SplitData = SplitData + 1
    Loop

End Function

戻る