以下のサンプルでは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
|