Vba 我想过滤除数组中的值以外的所有值
我想过滤除数组中的值以外的所有值,即“B400”、“A200”、“C300”。 我尝试了以下代码,没有一个代码是有效的Vba 我想过滤除数组中的值以外的所有值,vba,excel,Vba,Excel,我想过滤除数组中的值以外的所有值,即“B400”、“A200”、“C300”。 我尝试了以下代码,没有一个代码是有效的 Dim rDataRange as Range set rDataRange = Range("A1:P1000") rDataRange.AutoFilter Field:=11, Criteria1:="<>" & Array("B400", "A200", "C300"), Operator:=xlFilterValues rDataRange.A
Dim rDataRange as Range
set rDataRange = Range("A1:P1000")
rDataRange.AutoFilter Field:=11, Criteria1:="<>" & Array("B400", "A200", "C300"), Operator:=xlFilterValues
rDataRange.AutoFilter Field:=11, Criteria1:=Array("<>B400", "<>A200", "<>C300"), Operator:=xlFilterValues
Dim rDataRange作为范围
设置rDataRange=范围(“A1:P1000”)
rDataRange.AutoFilter字段:=11,准则1:=“”&数组(“B400”、“A200”、“C300”),运算符:=xlFilterValues
rDataRange.AutoFilter字段:=11,准则1:=Array(“B400”、“A200”、“C300”),运算符:=xlFilterValues
请帮助我根据您的情况进行修改:
Option Explicit
Sub AutoFilterWorkaround()
Dim sht As Worksheet
Dim filterarr As Variant, tofindarr As Variant
Dim lastrow As Long, i As Long, j As Long, k As Long
Set sht = ThisWorkbook.Worksheets("Sheet1")
lastrow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
'List the parts of the words you need to find here
tofindarr = Array("B400", "A200", "C300")
ReDim filterarr(0 To 0)
j = 0
For i = 2 To lastrow
If sht.Cells(i, 11).Value <> tofindarr(0) And _
sht.Cells(i, 11).Value <> tofindarr(1) And _
sht.Cells(i, 11).Value <> tofindarr(2) Then
filterarr(j) = sht.Cells(i, 11).Value
j = j + 1
ReDim Preserve filterarr(0 To j)
End If
Next i
'Filter on array
sht.Range("$A$1:$P$" & lastrow).AutoFilter Field:=11, Criteria1:=Array(filterarr), Operator:=xlFilterValues
End Sub
选项显式
子自动过滤器工作环境()
将sht变暗为工作表
Dim filterarr作为变型,tofindarr作为变型
最后一行一样长,我一样长,j一样长,k一样长
Set sht=此工作簿。工作表(“表1”)
lastrow=sht.Cells(sht.Rows.Count,“A”).End(xlUp).Row
'请在此处列出需要查找的单词部分
tofindarr=阵列(“B400”、“A200”、“C300”)
ReDim filterarr(0到0)
j=0
对于i=2到最后一行
如果短单元格(i,11),则为findarr(0)和_
短单元格(i,11).到INDARR(1)的值和_
短单元格(i,11)。值tofindarr(2)然后
filterarr(j)=短单元格(i,11).值
j=j+1
ReDim保留筛选器RR(0到j)
如果结束
接下来我
'阵列上的过滤器
sht.Range($A$1:$P$”&lastrow)。自动筛选字段:=11,标准1:=数组(filterarr),运算符:=xlFilterValues
端接头
有一种比使用过滤器更容易实现的方法
Dim lRow As Long
With ThisWorkbook.Sheets(1)
lRow = .Range("K" & Rows.Count).End(xlUp).Row
For i = 2 To lRow
If .Cells(i, 11).Value = "A200" Or .Cells(i, 11).Value = "B400" Or .Cells(i, 11).Value = "C300" Then
.Cells(i, 11).EntireRow.Hidden = True
End If
Next i
End With
您仍然可以在某种反向模式下使用
AutoFilter()
:
请参阅我的答案,您可以使用反向逻辑构建
.AutoFilter
解决方案。您希望显示所有不等于B400
、A200
和C300
的值,对吗?是。你是correct@Ravi坎南,有什么反馈吗?
Dim myRng As Range ' helper range variable
With Range("A1:P1000") ' reference wanted range to filter, header row included
.AutoFilter field:=11, Criteria1:=Array("B400", "A200", "C300"), Operator:=xlFilterValues ' filter on "not wanted" values
If Application.Subtotal(103, .Resize(, 1)) > 1 Then ' if any filtered cell other than header row
Set myRng = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) ' temporarily set 'myRng' to referenced range "not wanted" rows
.Parent.AutoFilterMode = False ' remove filters and show all rows
myRng.EntireRow.Hidden = True ' hide referenced range "not wanted" rows, leaving "wanted" rows only visible
With .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) ' reference referenced range "wanted" rows
.Select
' do what you want with "wanted" rows
End With
.EntireRow.Hidden = False ' unhide all referenced range rows
Else
.Parent.AutoFilterMode = False ' remove filters
End If
End With