我一直在努力工作的時間超過了我想承認的範圍。我正在比較兩個工作表(A & B)。我正在循環訪問A列(「B」),並且對於該列中的每個值,我都會根據B列(「C」)進行檢查。如果有匹配,我想刪除整行。刪除所有包含值爲VBA的行
我已經做了許多不同的方法,我只是無法讓它工作。這是原件:
Option Explicit
Sub Purge()
Dim wipWS As Worksheet
Dim invWS As Worksheet
Dim C As Range
Dim SourceLastRow As Long
Dim DestLastRow As Long
Dim LRow As Long
Dim D As Range
Set wipWS = Worksheets("Work in Process")
Set invWS = Worksheets("Inventory Allocation")
With wipWS
' find last row in Work in Process Column B
SourceLastRow = .Cells(.Rows.count, "E").End(xlUp).Row
' find last row in Inventory Allocation Column C
DestLastRow = invWS.Cells(invWS.Rows.count, "B").End(xlUp).Row
' define the searched range in "Inventory Allocation" sheet
Set C = invWS.Range("B1:B" & DestLastRow)
Set D = wipWS.Range("E1:E" & SourceLastRow)
' allways loop backwards when deleting rows or columns
' choose 1 of the 2 For loops below, according to where you want to delete
' the matching records
' --- according to PO request delete the row in Column B Sheet A
' and the row in Column C in "Inventory Allocation" worksheet
' I am looping until row 3 looking at the PO original code
For LRow = SourceLastRow To 1 Step -1
' found a match between Column B and Column C
If Not IsError(Application.Match(.Cells(LRow, "E"), C, 0)) Then
.Cells(LRow, 2).EntireRow.Delete Shift:=xlUp
invWS.Cells(Application.Match(.Cells(LRow, "E"), C, 0), 2).EntireRow.Delete Shift:=xlUp
End If
Next LRow
End With
End Sub
它的工作原理,除了留下1行(應該刪除)。我想我知道爲什麼會發生,除非我不知道如何去做。我已經嘗試了一個For循環,它的工作原理,除了我必須設置一個範圍(例如,「A1:A200」),我希望它只根據行數循環。
任何幫助將不勝感激!
對於初學者來說,你首先對於每一個不通過B列循環看一看由@cullan答案,這似乎是在做列循環,你想要的。 – dev1998
基本上你想要比較表A中的B列和B表中的C列,並且你有一個2個循環。問題:你在Sheet A Column B中獨特的價值嗎?如果他們是你可以只有1'For'循環並且使用'Match'函數或'VLookup',它會加快你的代碼運行速度 –
@Twigs看看我的答案,使用'Match'函數 –