我目前正在尝试使用.Find来搜索以"K“开头的项目数组。如果存在匹配项,则继续筛选并删除该项。但是,我不确定.Find是否能够将数组合并到它的条件中。我考虑过使用For each和If,但代码会相当长。有没有人可以提供帮助或给出不同方法的建议?
Dim ckFOH As Range
Dim Krange As Variant
Krange = Sheets("Master List").Range("G17:G" & Range("G17").End(xlDown).Row)
With Sheets("FOH")
Set ckFOH = .Columns("Q").Find(What:=Krange, LookIn:=xlValues)
If Not ckFOH Is Nothing Then
.Rows("5").AutoFilter Field:=17, Criteria1:="=K*"
.Range("A6:K" & Range("A6").End(xlDown).Row).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End If
End With发布于 2018-02-23 18:19:03
Range对象的Find()方法接受其"What“参数的任何数据类型,但是如果您提供了一个Range (根据您的代码),甚至是一个一维数组,那么实际搜索的只是它的第一个元素
此外,根据您的描述,我相信您希望删除所有表"FOH“行,这些行在”主列表“列Q中找到任何实际的"K”值
因此,您可能希望使用AutoFilter()并直接对所有这些值过滤列q,提供一个数组作为Criteria1参数并激活其xlFilterValues运算符选项
根据以下代码(注释中有更多解释):
Option Explicit
Sub main()
Dim Krange As Variant
With Sheets("Master List") 'reference wanted sheet
Krange = Application.Transpose(.Range("G17", .Range("G17").End(xlDown)).Value) ' store referenced sheet column G values from row 17 down to last consecutive not empty cell - explicitly qualify ALL range references to referenced worksheet
End With
With Sheets("FOH") 'reference wanted sheet
With .Range("Q5", .Cells(.Rows.Count, "Q").End(xlUp)) 'reference its column Q range from row 5 (header) to last not empty row
.AutoFilter field:=1, Criteria1:=Krange, Operator:=xlFilterValues ' filtere referenec range on all 'Krange' array values
If CBool(Application.Subtotal(103, .Cells)) > 1 Then .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete ' if any filtered cells other then header, thene delete their entire rows
End With
.AutoFilterMode = False
End With
End Subhttps://stackoverflow.com/questions/48945181
复制相似问题