首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >控制字符检查所需的时间太长,无法加载

控制字符检查所需的时间太长,无法加载
EN

Stack Overflow用户
提问于 2017-06-16 08:47:46
回答 3查看 55关注 0票数 0

我正在寻找字符串中的特殊字符。

如果字符串中存在特殊字符,则代码将向相邻单元格返回一个false。

代码语言:javascript
运行
复制
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

EN

Stack Overflow用户

回答已采纳

发布于 2017-06-16 09:43:21

试试这个:

代码语言:javascript
运行
复制
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循环快得多的操作。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44584794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档