即効テクニック |
以下のサンプルでは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