当前位置: 首页 > 知识库问答 >
问题:

Excel在执行循环时停止响应

赫连俊雄
2023-03-14
 
   Sub IdentifyMissingsNew()
    Dim ws1 As Worksheet
    Dim rws As Worksheet
    Set ws1 = ThisWorkbook.Sheets("New")
    Set rws = ThisWorkbook.Sheets("DelInt")
    ws1lastrow = ws1.Cells(Rows.Count, 1).End(xlUp).Row
    Set lookuprange = rws.Range("a1").CurrentRegion
    For i = 2 To ws1lastrow
    ws1.Cells(i, "ae") = Application.VLookup(ws1.Cells(i, "a"), lookuprange, 3, False)
    Debug.Print i
    Next i
    End Sub

共有1个答案

糜博远
2023-03-14

在一个快速测试中,它在不到3秒的时间内完成了对100k个值的表的200k行的查找。

它比您的原始代码要复杂一点,但是如果您想要优化速度,这有时是不可避免的。

备注:

    null
 Sub IdentifyMissingsNew()

    Dim ws1 As Worksheet
    Dim rws As Worksheet, t, arr1, arr2
    Dim dict As Object, rw As Range, res(), arr, nR As Long, i As Long

    Set ws1 = ThisWorkbook.Sheets("New")
    Set rws = ThisWorkbook.Sheets("DelInt")
    Set dict = CreateObject("scripting.dictionary")

    t = Timer

    'create a lookup from two arrays
    arr1 = rws.Range("a1").CurrentRegion.Columns(1).Value
    arr2 = rws.Range("a1").CurrentRegion.Columns(3).Value
    For i = 2 To UBound(arr1, 1)
        dict(arr1(i, 1)) = arr2(i, 1)
    Next i

    Debug.Print "created lookup", Timer - t

    'get the values to look up
    arr = ws1.Range(ws1.Range("A2"), ws1.Cells(Rows.Count, 1).End(xlUp))
    nR = UBound(arr, 1)        '<<number of "rows" in your dataset
    ReDim res(1 To nR, 1 To 1) '<< resize the output array to match

    'perform the lookup
    For i = 1 To nR
        If dict.exists(arr(i, 1)) Then
            res(i, 1) = dict(arr(i, 1))
        Else
            res(i, 1) = "No match!"
        End If
    Next i

    ws1.Range("AE2").Resize(nR, 1).Value = res '<< populate the results

    Debug.Print "Done", Timer - t

End Sub
 类似资料:
  • 问题内容: 我已经编写了一个包含循环的“ Hangman”游戏,不断询问用户字母,直到他们解决单词或耗尽生命。奇怪的是,在满足条件时循环不会停止。 这是包含循环的游戏逻辑的实现: 可变结果是从方法中获取返回值。这是实现。 难道是我返回导致循环不断循环的值的方式吗?我这样声明了这些值: 问题答案: 逻辑上,根据德摩根定律, 是相同的 这永远是一个真实的表达。 条件可能应该是 当应用与上述相同的法律时

  • 您的Google Maps代码结构如下所示: 回调? JavaScriptpromise? 您能想到的其他方法吗? 同样,这里所建议的信号量是一种可行的方法吗?

  • 有一个excelsheet,其中所有URL(16)都列在一列中。现在,一旦页面加载,需要验证页面标题是否与excel中已存储的预期标题匹配。我可以使用for循环执行它。如果全部通过,它将运行所有URL,但如果失败,它将停止运行。我需要完整地运行它,并给出一份通过和失败的报告。我编写了以下代码。 请在这方面帮助我。

  • 我正试图按照下面的代码读取一个txt文件: 我的txt文件如下所示: 当我不使用变量I时,仅用于在控制台打印我的文件,我的代码可以完美地工作。你们能帮我吗?如何将每个数据分离到数组中?我是Java初学者。

  • 我试图在未显示xpath时停止while循环。但是,代码会以消息停止。这是我的密码, 但我得到: "NoSuchElementExc如意:消息:没有这样的元素:无法定位元素:{"方法":"xpath","selector":".//tbody//tr//td//span//a[text()!= ""]"}" 这正是我想要停止循环的时候。。。当元素不可定位时。

  • 我在camelcontext.xml文件的主路由中配置了camel循环,它将调用请求处理路由3次。我还配置了onException xml处理程序(将handled设置为true)。但是,当第一次迭代出现异常时,执行控制会转到onException块,但是循环不会停止处理,相反,其他两次迭代(第二次和第三次)也会发生。