Vba 正在提取分隔符为“…”的子字符串&引用;

Vba 正在提取分隔符为“…”的子字符串&引用;,vba,excel,Vba,Excel,我需要根据分隔符将字符串分成两部分,但问题是我的分隔符由多个分隔符组成 例如: 字符串->7…5 我需要提取7和5,但是split函数返回与variant相同的字符串 有什么简单的方法吗?我不想使用RegExp Function f1(Value As String) As Boolean Dim flag As Boolean Dim length As Integer Dim c As Variant Dim c1 As Variant flag =

我需要根据分隔符将字符串分成两部分,但问题是我的分隔符由多个分隔符组成

例如:
字符串->
7…5

我需要提取7和5,但是split函数返回与variant相同的字符串

有什么简单的方法吗?我不想使用RegExp

Function f1(Value As String) As Boolean
    Dim flag As Boolean
    Dim length As Integer
    Dim c As Variant
    Dim c1 As Variant

    flag = True

    If IsNumeric(Value) = False Then
        flag = False
    End If

     c = Split(Value, ":")
     If UBound(c) < 1 Then
        c = Split(Value, "...") 'Here split does not divide it into array
     End If

Function f()
      If f1(Cells(5,10).Value) = False Then
      ' Do something      
      End If
End Function
函数f1(值为字符串)为布尔值
将标志变暗为布尔值
将长度设置为整数
dimc作为变体
变光c1
flag=True
如果IsNumeric(Value)=False,则
flag=False
如果结束
c=拆分(值“:”)
如果UBound(c)<1,则
c=Split(值“…”),此处Split不会将其拆分为数组
如果结束
函数f()
如果f1(单元格(5,10).Value)=False,则
“做点什么
如果结束
端函数

方式1如果您知道长度,并且只有点,则可以将它们用作分隔符。例如
Split(“7…5”,“…”)

范例

Sub Sample()
    Dim sDelim As String, sTest As String

    sTest = "7...5"
    sDelim = "..."

    Debug.Print Split(sTest, sDelim)(0)
    Debug.Print Split(sTest, sDelim)(1)
End Sub
方式2如果您不知道长度,并且只有点,则使用此方式

Option Explicit

Sub Sample()
    Dim sDelim As String, sTest As String
    Dim i As Long, j As Long

    sTest = "7...5"

    '~~> other test Scenarios
    'sTest = "75.....56"
    'sTest = "734.......5"
    'sTest = "7.......5567"

    For i = 1 To Len(sTest)
        If Mid(sTest, i, 1) = "." Then
            Debug.Print "The First Number is " & Left(sTest, i - 1)
            j = i
            Exit For
        End If
    Next i

    For i = j To Len(sTest)
        If Mid(sTest, i, 1) <> "." Then
            Debug.Print "The Second Number is " & _
            Right(sTest, Len(sTest) - (i - 1))
            Exit For
        End If
    Next i
End Sub
选项显式
子样本()
Dim sDelim作为字符串,sTest作为字符串
我和我一样长,我和我一样长
sTest=“7…5”
“~~>其他测试场景
'sTest=“75…..56”
'sTest=“734…….5”
'sTest=“7…….5567”
对于i=1至Len(sTest)
如果Mid(sTest,i,1)=“那么
调试。打印“第一个数字是”&左(ST,i-1)
j=i
退出
如果结束
接下来我
对于i=j到Len(sTest)
如果Mid(sTest,i,1)”,则
调试。打印“第二个数字是”&_
右(sTest,Len(sTest)-(i-1))
退出
如果结束
接下来我
端接头

您可以使用RegExp这样分割字符串

Private Sub Form_Load()
    Dim vSplit      As Variant

    vSplit = preg_split("\D+", "1..7")
    Debug.Print vSplit(0), vSplit(1)
End Sub

Function preg_split(find_re, text)
    Dim esc             As String
    Dim re              As Object
    Dim idx             As Long

    esc = ChrW(&HE1B6) '-- U+E000 to U+F8FF - Private Use Area (PUA)
    Set re = CreateObject("VBScript.RegExp")
    With re
        .Global = True
        If Left$(find_re, 1) = "/" Then
            idx = InStrRev(find_re, "/")
            .Pattern = Mid$(find_re, 2, idx - 2)
            .IgnoreCase = (InStr(idx, find_re, "i") > 0)
            .MultiLine = (InStr(idx, find_re, "m") > 0)
        Else
            .Pattern = find_re
        End If
    End With
    preg_split = Split(re.Replace(text, esc), esc)
End Function
问题出在字符串“…”上。如前所述,它的预定义ASCII码为0133。为了解析字符串,我指定了字符代码,并使用Chr函数将其转换为字符

c = Split(ValueString,Chr(0133)) 'after this c contains two arrays 

有这么多的可能性<代码>1限位器的长度是否始终相同<代码>2结尾和开头的数字是否始终为1位数字?1)是的,我们可以假设分隔符的长度相同2)否,我以此为例,它们始终是点还是可以是任何东西?此外,它们是否总是非数字的?请用几个实际的例子更新问题。它们将仅作为分隔符的点,也可以是非数字的数字。例如abcdeee…fghthi。一旦我们能够提取字符串,我就可以进行处理或我想做的任何事情。请告诉我调试中“(0)”的含义。打印拆分(sTest,sDelim)(0)拆分,将字符串拆分为数组。如果不指定数组的维度,则使用
0
访问数组的第一个元素。例如
Ar(0)
。我建议阅读有关数组的内容:)我不知道我们可以通过这种方式访问变体。我试过你的方法,这就是我发现的。我写了c1=Split(Value,“…”)(0),其中值是7…0,在这个c1只包含7…0之后,我的代码有问题,或者您没有测试代码?@Sid分隔符可能不是3点,而是
即ASCII代码133@JasmeetNarula“3点”实际上是单个字符,因此
7…0
的长度为3。
字符被称为感谢@wqw,但我不想使用RegExp。不知怎的,我找到了解决问题的办法,你可以看看。