如何重构比较循环在我的Excel VBA代码的速度?

我是Excel VBA的新手,没有太多的经验。 我有两个数据的工作表,我比较,然后如果一个值匹配我复制并粘贴到第二个工作表。 我使用for循环来比较每一行,并想知道是否有更好的方法来做到这一点? 我目前正在使用蛮力,并希望有一种方法,以便我的程序不会运行很长时间。 (我在不同的页上重复这段代码13次)。 基本上这个代码是在符合某些条件的情况下合并信息的。 以下是我的代码。

Sub consolidate(z) Sheets(z).Range("B1:AXH100").Delete '''deletes former values''' For i = 1 To 30 For x = 1 To 500 If IsEmpty(Sheets("Sheet1").Cells(x, 13)) Then 'if cell value is empty skip it' a = 1 Else: If Sheets("Sheet1").Cells(x, 18) = Sheets(z).Cells(1, 1) Then 'check to see if value is same' If Sheets("Sheet1").Cells(x, 13) = Sheets(z).Cells(i, 1) Then 'check to see if value is same' Sheets("Sheet1").Cells(x, 15).Copy 'copy value' Sheets(z).Select 'select second sheet' Cells(i, 1).Select ActiveSheet.Cells(ActiveCell.Row, Columns.Count).End(xlToLeft).Offset(0, 1).Select 'offsets cell to the left' Selection.PasteSpecial past:=xlPasteValues 'pastes' End Sub 

正如我在这里回答的那样,如果您需要访问或更改多个单元格,则最好将单元格读入数组,直接与数组一起工作,并在完成后将结果发送回Excel。 这是相当多的工作,Excel的数组处理不是最好的,但速度方面没有比较。

这篇文章更详细地解释了这个过程。