0
入れ子のforループを作成して、2つのシート内の3つの異なるセル値を比較しました。このループは、データが小さいときにうまく動作しますが、5,000行で実行すると遅すぎるとクラッシュするのが優れています。どのようにこれをより効率的に実行するかの考え。複数の値を比較するためのループVBA
Sub RowMatch()
Dim x As Integer
' Make sure we are in the right sheet
Worksheets("Q416").Activate
' Set numrows = number of rows of data.
NumRows = Range("C2", Range("C2").End(xlDown)).Rows.count
' find the reference range
Worksheets("Q415").Activate
NumRows2 = Range("C5", Range("C5").End(xlDown)).Rows.count
Worksheets("Q416").Activate
MsgBox ("Total # of Rows on this sheet = " & NumRows & " and " & NumRows2 & " in Ref Range")
Range("A1").Select
' Establish "For" loop to loop "numrows" number of times.
For x = 1 To NumRows
'MsgBox NumRows2
For y = 1 To NumRows2
'MsgBox (ActiveCell.Offset(x, 0).Value & " & " & Worksheets("Q415").Cells(y + 1, 1))
If ActiveCell.Offset(x, 0).Value = Worksheets("Q415").Cells(y + 1, 1).Value _
And ActiveCell.Offset(x, 2).Value = Worksheets("Q415").Cells(y + 1, 3).Value Then
If ActiveCell.Offset(x, 5).Value = Worksheets("Q415").Cells(y + 1, 6).Value Then
'If NumRows(i).Value = ActiveCell.Offset(1, 0).Value Then
ActiveCell.Offset(x, 10).Value = "Same"
Else
ActiveCell.Offset(x, 10).Value = ActiveCell.Offset(x, 5).Value - Worksheets("Q415").Cells(y + 1, 6).Value
End If
End If
Next y
Next x
End Sub
死のActiveCellで!はい、Select/Activate/ActiveCellを使用しないようにする方法を簡単に検索してください。 – CallumDA
.findメソッドを試して、見つかった行の別の列と2番目の一致を一致させることができます。 http://stackoverflow.com/questions/42768906/excel-macro-iterating-through-rows-and-combined-loop –
私が投稿したと思います@CallumDAは次のようなものです:http:// stackoverflow .com/questions/10714251/how-to-avoid-using-excel-vba-macros – Ralph