Public Function Split(Expression As String, Optional Delimiter, Optional Limit As Long = -1, _
Optional Compare As Integer = vbBinaryCompare) As Variant
' Purpose: Split a string into substrings at a delimiter, and return the substrings
' in a Variant (Array of String)
' Accepts: 1. String expression to be split
' 2. Optional delimiter (default is ' ')
' 3. Optional maximum of number of substrings to return (default is all substrings)
' 4. Optional compare mode for delimiter (default is case-sensitive)
' Returns: Variant array of strings containing substrings separated by the delimiter. If
' Limit is reached, last entry in array contains remainder of string, including
' any delimiters embedded.
Dim result()
Dim i As Integer, j As Integer, count As Integer
If Limit < -1 Then Err.Raise 5
If IsMissing(Delimiter) Then Delimiter = " "
If Delimiter = "" Then
ReDim result(0)
result(0) = Expression
Split = result
Exit Function
End If
If Expression = "" Then
Split = Array()
Exit Function
End If
i = 1
Do
If (Limit >= 0) And (count >= Limit - 1) Then Exit Do
j = InStr(i, Expression, Delimiter, Compare)
If j = 0 Then Exit Do
ReDim Preserve result(count)
result(count) = Mid$(Expression, i, j - i)
count = count + 1
i = j + Len(Delimiter)
Loop
ReDim Preserve result(count)
result(count) = Mid$(Expression, i)
Split = result
End Function