Arrays VBA额外费用!:有没有一种方法可以在不使用split()的情况下拆分分隔符上的字符串?

Arrays VBA额外费用!:有没有一种方法可以在不使用split()的情况下拆分分隔符上的字符串?,arrays,string,vba,split,Arrays,String,Vba,Split,我使用的是VBA,但不是excel 我知道,在VBA for Excel上,您可以执行类似于拆分(“字符串将被拆分”)的操作,然后获取一个数组 有没有办法在没有此功能的情况下执行拆分?因为我使用的VBA版本无法识别它 谢谢。我假设您使用的是早期版本的Excel,其中不存在拆分,@Meehow和@Nathan_Sav是正确的,您最好自己编写,我使用像mid和instr这样的命令 没有一个等价物,只有一种方法来制造等价物 参见以下等效项:- Public Sub Sample() Dim ArySp

我使用的是VBA,但不是excel

我知道,在VBA for Excel上,您可以执行类似于
拆分(“字符串将被拆分”)
的操作,然后获取一个数组

有没有办法在没有此功能的情况下执行拆分?因为我使用的VBA版本无法识别它


谢谢。

我假设您使用的是早期版本的Excel,其中不存在拆分,@Meehow和@Nathan_Sav是正确的,您最好自己编写,我使用像
mid
instr
这样的命令

没有一个等价物,只有一种方法来制造等价物

参见以下等效项:-

Public Sub Sample()
Dim ArySplit() As String
ArySplit = FnSplit("This|is|my||string", "|")
End Sub

Private Function FnSplit(ByVal StrContent As String, ByVal StrDelimiter As String) As String()
Dim AryTemp() As String
ReDim AryTemp(0)

'Work until we have nothing left to work with
Do Until StrContent = ""

    'Only increase the array size if needed
    If AryTemp(UBound(AryTemp, 1)) <> "" Then ReDim Preserve AryTemp(UBound(AryTemp, 1) + 1)

    'if the delimiter is no longer there then output the remaining content
    'and clear out the todo string
    If InStr(1, StrContent, StrDelimiter) = 0 Then
        AryTemp(UBound(AryTemp, 1)) = StrContent
        StrContent = ""
    Else
        'If there is a delimiter then then add it to the array and take it and the delimiter
        'off of the to do string
        AryTemp(UBound(AryTemp, 1)) = Left(StrContent, InStr(1, StrContent, StrDelimiter) - 1)
        StrContent = Right(StrContent, Len(StrContent) - ((InStr(1, StrContent, StrDelimiter) - 1) + Len(StrDelimiter)))
    End If
Loop

'Return our array
FnSplit = AryTemp

End Function
Public子示例()
将()拆分为字符串
ArySplit=FnSplit(“这是我的字符串,”)
端接头
私有函数FnSplit(ByVal StrContent作为字符串,ByVal StrDelimiter作为字符串)作为字符串()
Dim AryTemp()作为字符串
雷迪姆温度(0)
“工作,直到我们没有什么工作可做
直到StrContent=“”
'仅在需要时增加阵列大小
如果AryTemp(UBound(AryTemp,1))”,则ReDim保留AryTemp(UBound(AryTemp,1)+1)
'如果分隔符不再存在,则输出剩余的内容
'并清除待办事项字符串
如果InStr(1,StrContent,strdelimitor)=0,则
AryTemp(UBound(AryTemp,1))=StrContent
StrContent=“”
其他的
'如果有分隔符,则将其添加到数组中,并使用它和分隔符
'离开待办事项字符串
AryTemp(UBound(AryTemp,1))=左(StrContent,InStr(1,StrContent,StrDelimiter)-1)
StrContent=Right(StrContent,Len(StrContent)-(InStr(1,StrContent,StrDelimiter)-1)+Len(StrDelimiter)))
如果结束
环
'返回我们的阵列
FnSplit=AryTemp
端函数

我假设您使用的是早期版本的Excel,其中不存在拆分,@Meehow和@Nathan_Sav是正确的,您最好编写自己的,我使用类似于
mid
instr
的命令

没有一个等价物,只有一种方法来制造等价物

参见以下等效项:-

Public Sub Sample()
Dim ArySplit() As String
ArySplit = FnSplit("This|is|my||string", "|")
End Sub

Private Function FnSplit(ByVal StrContent As String, ByVal StrDelimiter As String) As String()
Dim AryTemp() As String
ReDim AryTemp(0)

'Work until we have nothing left to work with
Do Until StrContent = ""

    'Only increase the array size if needed
    If AryTemp(UBound(AryTemp, 1)) <> "" Then ReDim Preserve AryTemp(UBound(AryTemp, 1) + 1)

    'if the delimiter is no longer there then output the remaining content
    'and clear out the todo string
    If InStr(1, StrContent, StrDelimiter) = 0 Then
        AryTemp(UBound(AryTemp, 1)) = StrContent
        StrContent = ""
    Else
        'If there is a delimiter then then add it to the array and take it and the delimiter
        'off of the to do string
        AryTemp(UBound(AryTemp, 1)) = Left(StrContent, InStr(1, StrContent, StrDelimiter) - 1)
        StrContent = Right(StrContent, Len(StrContent) - ((InStr(1, StrContent, StrDelimiter) - 1) + Len(StrDelimiter)))
    End If
Loop

'Return our array
FnSplit = AryTemp

End Function
Public子示例()
将()拆分为字符串
ArySplit=FnSplit(“这是我的字符串,”)
端接头
私有函数FnSplit(ByVal StrContent作为字符串,ByVal StrDelimiter作为字符串)作为字符串()
Dim AryTemp()作为字符串
雷迪姆温度(0)
“工作,直到我们没有什么工作可做
直到StrContent=“”
'仅在需要时增加阵列大小
如果AryTemp(UBound(AryTemp,1))”,则ReDim保留AryTemp(UBound(AryTemp,1)+1)
'如果分隔符不再存在,则输出剩余的内容
'并清除待办事项字符串
如果InStr(1,StrContent,strdelimitor)=0,则
AryTemp(UBound(AryTemp,1))=StrContent
StrContent=“”
其他的
'如果有分隔符,则将其添加到数组中,并使用它和分隔符
'离开待办事项字符串
AryTemp(UBound(AryTemp,1))=左(StrContent,InStr(1,StrContent,StrDelimiter)-1)
StrContent=Right(StrContent,Len(StrContent)-(InStr(1,StrContent,StrDelimiter)-1)+Len(StrDelimiter)))
如果结束
环
'返回我们的阵列
FnSplit=AryTemp
端函数

类似这样的内容,返回一个集合,时间是因为我不想对所有if进行编码,以便重拨o/p阵列

Public Sub testing()

Dim c As New Collection

Set c = New_Split("test split function", " ")

End Sub

Public Function New_Split(strInput As String, strDelimiter As String) As Collection

Dim colDelimitPoints As New Collection
Dim intCounter As Integer
Dim intPrevPoint As Integer

For intCounter = 1 To Len(strInput)

    If Mid(strInput, intCounter, 1) = strDelimiter Then
        colDelimitPoints.Add intCounter, CStr(intCounter)
    End If

Next intCounter

intPrevPoint = 1

Set New_Split = New Collection

For Each i In colDelimitPoints

    New_Split.Add Mid(strInput, intPrevPoint, (i - intPrevPoint))
    intPrevPoint = i + 1

Next i

End Function

您可以将集合的创建和以后的迭代合并到一个例程中,我将分开来展示它是如何工作的。

类似这样的内容,返回一个集合,因为我不想为重新命名o/p阵列编写所有的if

Public Sub testing()

Dim c As New Collection

Set c = New_Split("test split function", " ")

End Sub

Public Function New_Split(strInput As String, strDelimiter As String) As Collection

Dim colDelimitPoints As New Collection
Dim intCounter As Integer
Dim intPrevPoint As Integer

For intCounter = 1 To Len(strInput)

    If Mid(strInput, intCounter, 1) = strDelimiter Then
        colDelimitPoints.Add intCounter, CStr(intCounter)
    End If

Next intCounter

intPrevPoint = 1

Set New_Split = New Collection

For Each i In colDelimitPoints

    New_Split.Add Mid(strInput, intPrevPoint, (i - intPrevPoint))
    intPrevPoint = i + 1

Next i

End Function

您可以将集合的创建和以后的迭代组合到一个例程中,我将分开来展示它是如何工作的。

MID和INSTR应该有帮助MID和INSTR应该有帮助