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