[英]Excel VBA - Index/Match Change Array/Range each time through loop
首先道歉,如果以前已經回答過,但是我一直在找一天,找不到任何東西。
我的宏的一部分將比較兩列(A和B),以了解從一個月到下個月發生了什么變化。
首先,我將查看A中而不是B中的內容,以確定添加的內容。
i = 3
For Each rngCell In Sheets("Data").Range("A2:A200")
If WorksheetFunction.CountIf(Sheets("Data").Range("B2:B200"), rngCell) = 0 Then
Sheets("Summary").Cells(Rows.Count, 1).End(xlUp).Offset(1) = rngCell
End If
i = i + 1
Next
然后,我將查看B中而不是A中的內容,以確定已刪除的內容。
n = 3
For Each rngCell In Sheets("Data").Range("B2:B200")
If WorksheetFunction.CountIf(Sheets("Data").Range("A2:A200"), rngCell) = 0 Then
Sheets("Summary").Cells(Rows.Count, 4).End(xlUp).Offset(1) = rngCell
End If
n = n + 1
Next
這對我有用。 然后,我想比較更多列(例如C和D,E和F,G和H .....等)。 我想創建一個For循環,因此我不必再對這兩組指令進行30次或更多次的修改。
我堅持如何將變量傳遞到Range中,以便代替A2:A200,而是使用Range(Cells(Integer,2),Cells(Integer,200))之類的東西。
如果有人有答案,我將不勝感激。
您可以使用子過程,並將leftRange
和rightRange
作為參數傳遞:
Public Sub DoStuff(ByRef leftRange As Range, ByRef rightRange As Range, ByRef summaryCells As Worksheet)
For Each rngCell In leftRange
If WorksheetFunction.CountIf(rightRange, rngCell) = 0 Then
summaryCells.Cells(Rows.Count, 1).End(xlUp).Offset(1) = rngCell
End If
Next
End Sub
然后,您可以這樣稱呼它:
Public Sub test()
' A against B
Call DoStuff(Sheets("Internal_Data").Range("A2:A200"), Sheets("Internal_Data").Range("B2:B200"), Sheets("SummaryCells"))
' B against A
Call DoStuff(Sheets("Internal_Data").Range("B2:B200"), Sheets("Internal_Data").Range("A2:A200"), Sheets("SummaryCells"))
' do it with a loop
Dim ws As Worksheet
Set ws = Sheets("Internal_Data")
Dim col As Long
For col = 1 To 4 Step 2
Call DoStuff(ws.Range(ws.Cells(2, col), ws.Cells(200, col)), ws.Range(ws.Cells(2, col + 1), ws.Cells(200, col + 1)), Sheets("SummaryCells"))
Call DoStuff(ws.Range(ws.Cells(2, col + 1), ws.Cells(200, col + 1)), ws.Range(ws.Cells(2, col), ws.Cells(200, col)), Sheets("SummaryCells"))
Next
End Sub
未經測試,但這是基本思想。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.