Excel2000Split関数の代替
以下のサンプルではExcel2000から提供されているSplit関数の機能と
同じように、ある区切り文字によって区切られた文字列の1次元配列化を
行います。

Function SplitFor97 _
    (TargetString As Variant, Delimiter As String) As Variant
'================================
'機能:エクセル2000のSplit関数代替
'※Tab区切りには対応していません
'
'TargetString
'  配列化する対象文字列。Delimiterによって各要素に分割可能であること
'
'Delimiter 区切り文字
'================================
    Dim varRet() As Variant
    Dim i As Long
    Dim LoopFlag As Boolean
    Dim PreviousPos As Long, NextPos As Long

    '区切り文字の位置確定用の変数に初期値を設定
    PreviousPos = 1: NextPos = 0
    'ループ脱出用フラグ初期値をFalseとする
    LoopFlag = False

    Do
        NextPos = InStr(PreviousPos, TargetString, Delimiter, vbTextCompare)
       '対象文字列の最後の要素は次の区切り文字がないためループ脱出用フラグを
       'Trueにする
       
        If NextPos = 0 Then: LoopFlag = True: NextPos = Len(TargetString) + 1

        ReDim Preserve varRet(0 To i)
        varRet(i) = _
              CStr(Mid(TargetString, PreviousPos, NextPos - PreviousPos))
        PreviousPos = NextPos + 1
        i = i + 1
        Debug.Print NextPos & ":" & PreviousPos
    Loop Until LoopFlag = True

    SplitFor97 = varRet

End Function

Sub TestProcForMySplit() 'テスト用

    Dim TargetString As Variant ' 配列化する対象文字列
    Dim Ret As Variant  '配列格納用
    Dim msg As String   'メッセージボックス表示用
    Dim i As Integer

    TargetString = "Excel-Access-PowerPoint-Outlook-Word"

    '区切り文字指定で配列化
    Ret = SplitFor97(TargetString, "-")

    '配列の下限から上限までループし、各要素を文字列変数に格納
    For i = LBound(Ret) To UBound(Ret)
        msg = msg & vbCrLf & Ret(i)
    Next i

    '配列の各要素と配列化が行われたことを確認
    MsgBox msg & vbCrLf & vbCrLf & "IsArray = " & IsArray(Ret)

End Sub

Excel97



戻る


Excel Word Access VBA! モーグ