首先,如果以前已经回答了我的道歉,但我一直在寻找约一天但找不到任何东西。
我的部分宏将比较两列(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))。
如果有人有答案,我会很感激。
答案 0 :(得分:0)
您可以使用子过程并将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
未经测试,但这是基本想法。