我正在寻找字符串中的特殊字符。
如果字符串中存在特殊字符,则代码将向相邻单元格返回一个false。
Dim arr(5)
arr(1) = "19"
arr(2) = "26"
arr(3) = "29"
arr(4) = "32"
arr(5) = "50"
'control characters check
For n = 1 To 5
    For x = 1 To 41
        If InStr(1, Range("b" & arr(n)), Chr(x)) = 0 Then
            For y = 123 To 255
                If InStr(Range("b" & arr(n)).Value, Chr(y)) > 0 Then
                    Range("e" & arr(n)).Value = "FALSE"
                    Exit For
                Else
                    Range("e" & arr(n)).Value = "TRUE"
                End If
            Next y
        Else
            Range("e" & arr(n)).Value = "FALSE"
            Exit For
        End If
    Next x
Next n我的问题是,只循环几次需要相当长的时间,有更快的方法循环所有的数据节省更多的时间吗?
单元格中字符串数据的一个示例是:TY56D-CAT131BP342AC46-eL-W-00
发布于 2017-06-16 09:43:21
试试这个:
Sub Test()
Dim arr(5) As String
Dim iLen As Integer, strV As String
Dim Found As Boolean: Found = False
Dim Test As Variant
arr(1) = "19"
arr(2) = "26"
arr(3) = "29"
arr(4) = "32"
arr(5) = "50"
For x = 1 To 5
    iLen = Len(Range("B" & arr(x)).Value)
    strV = Range("B" & arr(x)).Value
    For i = 1 To iLen
        Select Case Asc(Mid$(strV, i, 1))
        Case 1 To 41, 123 To 255
            Found = True
            Exit For
        End Select
    Next i
    If Found = False Then
       Range("E" & arr(x)).Value = "TRUE"
    Else
        Found = False
        Range("E" & arr(x)).Value = "FALSE"
    End If
Next x
End Sub计算时间几乎是即时的。与您的方法不同的是,我遍历了每个字符,然后检查它是否允许。在这种情况下,Select Case可以对每个不允许的字符执行比for循环快得多的操作。
https://stackoverflow.com/questions/44584794
复制相似问题