簡體   English   中英

Excel VBA-每次通過循環索引/匹配更改數組/范圍

[英]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))之類的東西。

如果有人有答案,我將不勝感激。

您可以使用子過程,並將leftRangerightRange作為參數傳遞:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM