Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 我想过滤除数组中的值以外的所有值_Vba_Excel - Fatal编程技术网

Vba 我想过滤除数组中的值以外的所有值

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

我想过滤除数组中的值以外的所有值,即“B400”、“A200”、“C300”。 我尝试了以下代码,没有一个代码是有效的

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