0

这是因为这不是编写这段代码的有效方法,还是像这样在 excel 上工作太慢了?我在 Windows 8 64 位中使用 excel 2007。我的办公室笔记本是一个非常更新的笔记本,里面装有最新的 I5 cpu。这是代码:

Private Sub CommandButton1_Click()

Sheets("data").Select


For rcounter = 2 To 45752

For xcounter = 26 To 50
For ycounter = 2 To 414

If (Cells(1, xcounter) = Cells(rcounter, 4)) Then
If (CInt(Cells(ycounter, 25)) = CInt(Cells(rcounter, 10))) Then

Cells(ycounter, xcounter).Value = Cells(ycounter, xcounter).Value + 1


End If
End If

Next ycounter
Next xcounter

Next rcounter


End Sub
4

3 回答 3

2

正如这里所解释的,提高 excel-vba 的计算性能最重要的一步是使用范围数组复制而不是逐个单元格浏览。

以下是您可以如何为您的示例执行此操作的方法:

Private Sub CommandButton1_Click()

Sheets("data").Select

Dim cels() as Variant
cels = Range("A1", "AA45752")

For rcounter = 2 To 45752

    For xcounter = 26 To 50
        For ycounter = 2 To 414

            If (cels(1, xcounter) = cels(rcounter, 4)) Then
                If (CInt(cels(ycounter, 25)) = CInt(cels(rcounter, 10))) Then

                    cels(ycounter, xcounter).Value = cels(ycounter, xcounter).Value + 1

                End If
            End If

        Next ycounter
    Next xcounter

Next rcounter

Range("A1", "AA45752") = cels

End Sub

这应该快得多。当然,尽管您仍在循环(45752-1)*(50-25)*(414-1)或循环 472,379,075 次,因此可能仍需要一段时间。您可能需要考虑是否真的需要多次检查所有这些单元格。

于 2013-10-24T02:46:25.230 回答
2

问题是你的嵌套循环,这可以分解:

您的第一个循环运行 45,751 次。

每次您的第一个循环运行时,它都会运行您的第二个循环 25 次,从而导致您的第二个循环运行 1,143,775 次。

每次您的第二个循环运行时,它都会运行您的第三个循环 413 次。您的第三个循环总共将运行 472,379,075 次。

我不知道你想用这个脚本实现什么,但它不是很有效。

于 2013-10-24T02:17:57.590 回答
1

不知道这是否有助于改善情况。您可以尝试移动以下行

If (Cells(1, xcounter) = Cells(rcounter, 4)) Then

For ycounter = 2 To 414

减少不必要的比较

于 2013-10-24T02:21:27.470 回答