1
我是Excel VBA新手,没有太多经验。我有两个数据工作表,我比较,然后如果一个值匹配我复制并粘贴到第二个工作表。我使用for循环来比较每一行,并想知道是否有更好的方法来做到这一点?我目前正在使用蛮力,并希望有一种方式,以便我的程序不会运行很长时间。 (我在不同的工作表上重复这段代码13次)。从本质上讲,如果符合某些条件,这些代码就会整合信息。以下是我的代码。如何在我的Excel VBA代码中重构比较循环的速度?
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
哪里有可能,你应该尽量避免使用选择单元格,因为这会导致屏幕更新,这很慢。你可以尝试在开始时加入Application.ScreenUpdating = False,看看它是否改善了它。这里的替代选择被给出为[链接](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – Clusks
代码似乎不完整(缺少'下一步's abd'End If's)你也可以避免使用'Copy'并直接在'targetRange.Value = sourceRange.Value'中分配值。 – arcadeprecinct