Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
Excel 使用我不知道的值筛选范围';我不想要 ThisWorkbook.Sheets(1).范围(“A1:AR1”)。自动筛选字段:=27_ 准则1:=数组(“DRCA”、“DREX”、“DRFU”、“DRIN”_ “DRIR”、“DRND”、“DRPN”、“DRPR”、“DRRE”、“DRUN”_ “REXC”、“EXCD”、“RFUR”、“RINV”、“RIRC”、“RNDR”_ “RPNA”、“RPRO”、“RRET”、“RUND”、“RUNF”、“EXC”、“C”)_ 运算符:=xlFilterValues_Excel_Vba - Fatal编程技术网

Excel 使用我不知道的值筛选范围';我不想要 ThisWorkbook.Sheets(1).范围(“A1:AR1”)。自动筛选字段:=27_ 准则1:=数组(“DRCA”、“DREX”、“DRFU”、“DRIN”_ “DRIR”、“DRND”、“DRPN”、“DRPR”、“DRRE”、“DRUN”_ “REXC”、“EXCD”、“RFUR”、“RINV”、“RIRC”、“RNDR”_ “RPNA”、“RPRO”、“RRET”、“RUND”、“RUNF”、“EXC”、“C”)_ 运算符:=xlFilterValues

Excel 使用我不知道的值筛选范围';我不想要 ThisWorkbook.Sheets(1).范围(“A1:AR1”)。自动筛选字段:=27_ 准则1:=数组(“DRCA”、“DREX”、“DRFU”、“DRIN”_ “DRIR”、“DRND”、“DRPN”、“DRPR”、“DRRE”、“DRUN”_ “REXC”、“EXCD”、“RFUR”、“RINV”、“RIRC”、“RNDR”_ “RPNA”、“RPRO”、“RRET”、“RUND”、“RUNF”、“EXC”、“C”)_ 运算符:=xlFilterValues,excel,vba,Excel,Vba,这没有返回我想要的正确的筛选器数据。我想要的是,如果数组没有找到任何值,那么跳过它并检查下一步 我该怎么做?Excel不允许您在自动筛选中使用所需的数组。但还有其他选择吗?对! 逻辑如果我要求您在0和10之间选择数字,包括0和10,但您不能选择0、5、8和10。因此,你可以说我想要1,2,3,4,6,7,9,而不是过滤掉数字,然后说我不想要0、5、8和10 同样,在您的情况下,我们不会过滤我们不想要的值。我们将筛选我们想要的值 那么,我们如何找到该列表并将其存储在数组中呢 在相关列中查找最后一行

这没有返回我想要的正确的筛选器数据。我想要的是,如果数组没有找到任何
,那么跳过它并检查下一步


我该怎么做?

Excel不允许您在
自动筛选中使用所需的数组。但还有其他选择吗?对!

逻辑如果我要求您在
0
10
之间选择数字,包括
0
10
,但您不能选择
0
5
8
10
。因此,你可以说
我想要1,2,3,4,6,7,9
,而不是过滤掉数字,然后说我不想要
0
5
8
10

同样,在您的情况下,我们不会过滤我们不想要的值。我们将筛选我们想要的值

那么,我们如何找到该列表并将其存储在数组中呢

  • 在相关列中查找最后一行
  • 将该列中的所有记录存储在唯一的集合中
  • 检查该集合中的哪些项不在“排除”列表中,并创建一个数组
  • 筛选所需值(数组)的范围!这样我们就不必过滤我们不想要的值
  • 代码(在Excel 2013中测试,记录数为50k)

    我已经对代码进行了注释,但如果您还有任何问题,请随时提问:)

    将数组作为变量
    Const deLim As String=“|”
    子样本()
    将Ws设置为工作表
    暗淡的lRow尽可能长,i尽可能长,n尽可能长,lCol尽可能长
    Dim Col作为新系列,itm
    暗淡的光线作为变体
    变暗rng As范围
    将tmpString设置为字符串
    “~~>此数组包含所有要忽略的值
    忽略数组=数组(“DRCA”、“DREX”、“DRFU”、“DRIN”、“DRIR”、“DRND”_
    “DRPN”、“DRPR”、“DRRE”、“DRUN”、“REXC”、“EXCD”、“RFUR”_
    “RINV”、“RIRC”、“RNDR”、“RPNA”、“RPRO”、“RRET”、“RUND”_
    “RUNF”、“EXC”、“C”)
    “~~>这是要筛选出的列
    lCol=27
    “~~>将此更改为相关工作表
    设置Ws=ThisWorkbook.Sheets(“Sheet1”)
    与Ws
    “~~>查找最后一行
    lRow=.Range(“A”&.Rows.Count).End(xlUp).Row
    “~~>这是应用过滤器的范围
    设置rng=.Range(“A1:AR”和lRow)
    “~~>将第27列中的所有值保存到唯一的集合中
    对于i=2至lRow
    出错时继续下一步
    列加单元格(i,lCol).Value,CStr(.Cells(i,27).Value)
    错误转到0
    接下来我
    “~~>现在循环遍历集合并将值存储在字符串中
    “~~>用“忽略数组”中不存在的分隔符分隔
    对于每个itm,以Col为单位
    如果不是IsInArray(itm,省略数组),则
    如果tmpString=“”,则
    tmpString=itm
    其他的
    tmpString=tmpString&deLim&itm
    如果结束
    如果结束
    下一个itm
    如果tmpString“”则
    “~~>根据分隔符拆分值以创建数组
    INCLUDEARY=拆分(tmpString,deLim)
    “~~>删除任何筛选器
    .AutoFilterMode=False
    “~~>对其余值进行筛选
    带rng
    .AutoFilter字段:=lCol,准则1:=includeArray,运算符:=xlFilterValues
    以
    如果结束
    以
    端接头
    “~~>函数检查数组中是否有项
    函数IsInArray(StringToBeford作为变量,arr作为变量)作为布尔值
    Dim bDimen作为字节,i作为长度
    出错时继续下一步
    如果IsError(UBound(arr,2))则bDimen=1,否则bDimen=2
    错误转到0
    选择案例bDimen
    案例1
    出错时继续下一步
    IsInArray=Application.Match(StringToBeford,arr,0)
    错误转到0
    案例2
    对于i=1至UBound(arr,2)
    出错时继续下一步
    IsInArray=Application.Match(stringToBeFound,Application.Index(arr,i),0)
    错误转到0
    如果IsInArray=True,则退出以获取
    下一个
    结束选择
    端函数
    
    Excel不允许您在
    自动筛选中使用所需的数组。但还有其他选择吗?对!

    逻辑如果我要求您在
    0
    10
    之间选择数字,包括
    0
    10
    ,但您不能选择
    0
    5
    8
    10
    。因此,你可以说
    我想要1,2,3,4,6,7,9
    ,而不是过滤掉数字,然后说我不想要
    0
    5
    8
    10

    同样,在您的情况下,我们不会过滤我们不想要的值。我们将筛选我们想要的值

    那么,我们如何找到该列表并将其存储在数组中呢

  • 在相关列中查找最后一行
  • 将该列中的所有记录存储在唯一的集合中
  • 检查该集合中的哪些项不在“排除”列表中,并创建一个数组
  • 筛选所需值(数组)的范围!这样我们就不必过滤我们不想要的值
  • 代码(在Excel 2013中测试,记录数为50k)

    我已经对代码进行了注释,但如果您还有任何问题,请随时提问:)

    将数组作为变量
    Const deLim As String=“|”
    子样本()
    将Ws设置为工作表
    像我一样昏暗
    
    ThisWorkbook.Sheets(1).Range("A1:AR1").AutoFilter Field:=27, _
    Criteria1:=Array("<>DRCA", "<>DREX", "<>DRFU", "<>DRIN", _
    "<>DRIR", "<>DRND", "<>DRPN", "<>DRPR", "<>DRRE", "<>DRUN", _
    "<>REXC", "<>EXCD", "<>RFUR", "<>RINV", "<>RIRC", "<>RNDR", _
    "<>RPNA", "<>RPRO", "<>RRET", "<>RUND", "<>RUNF", "<>EXC", "<>C"), _
    Operator:=xlFilterValues
    
    Dim OmitArray As Variant
    Const deLim As String = "|"
    
    Sub Sample()
        Dim Ws As Worksheet
        Dim lRow As Long, i As Long, n As Long, lCol As Long
        Dim Col As New Collection, itm
        Dim includeArray As Variant
        Dim rng As Range
        Dim tmpString As String
    
        '~~> This array has all the values that you want to ignore
        OmitArray = Array("DRCA", "DREX", "DRFU", "DRIN", "DRIR", "DRND", _
                    "DRPN", "DRPR", "DRRE", "DRUN", "REXC", "EXCD", "RFUR", _
                    "RINV", "RIRC", "RNDR", "RPNA", "RPRO", "RRET", "RUND", _
                    "RUNF", "EXC", "C")
    
        '~~> This is the column where you want to filter out
        lCol = 27
    
        '~~> Change this to the relevant worksheet
        Set Ws = ThisWorkbook.Sheets("Sheet1")
    
        With Ws
            '~~> Find lastrow
            lRow = .Range("A" & .Rows.Count).End(xlUp).Row
    
            '~~> This is the range where the filter will be applied
            Set rng = .Range("A1:AR" & lRow)
    
            '~~> All all the values from col 27 to a unique collection
            For i = 2 To lRow
                On Error Resume Next
                Col.Add .Cells(i, lCol).Value, CStr(.Cells(i, 27).Value)
                On Error GoTo 0
            Next i
    
            '~~> Now loop though the collection and store the values in a string
            '~~> delimited with a delimiter which arenot present in the "OmitArray"
            For Each itm In Col
                If Not IsInArray(itm, OmitArray) Then
                    If tmpString = "" Then
                        tmpString = itm
                    Else
                        tmpString = tmpString & deLim & itm
                    End If
                End If
            Next itm
    
            If tmpString <> "" Then
                '~~> Split the values based on the delimiter to create array
                includeArray = Split(tmpString, deLim)
    
                '~~> Remove any filters
                .AutoFilterMode = False
    
                '~~> Filter on the rest of the values
                With rng
                  .AutoFilter Field:=lCol, Criteria1:=includeArray, Operator:=xlFilterValues
                End With
            End If
        End With
    End Sub
    
    '~~> Function to check if there is an item in the array
    Function IsInArray(stringToBeFound As Variant, arr As Variant) As Boolean
        Dim bDimen As Byte, i As Long
    
        On Error Resume Next
        If IsError(UBound(arr, 2)) Then bDimen = 1 Else bDimen = 2
        On Error GoTo 0
    
        Select Case bDimen
        Case 1
            On Error Resume Next
            IsInArray = Application.Match(stringToBeFound, arr, 0)
            On Error GoTo 0
        Case 2
            For i = 1 To UBound(arr, 2)
                On Error Resume Next
                IsInArray = Application.Match(stringToBeFound, Application.Index(arr, , i), 0)
                On Error GoTo 0
                If IsInArray = True Then Exit For
            Next
        End Select
    End Function
    
    Public Sub Demo()
        Const HIDE = ".DRCA.DREX.DRFU.DRIN.DRIR.DRND.DRPN.DRPR.DRRE.DRUN.REXC.EXCD.RFUR.RINV.RIRC.RNDR.RPNA.RPRO.RRET.RUND.RUNF.EXC.C."
        Dim c As Range
        With ThisWorkbook.Sheets(1)
            For Each c In .Range("AR1:AR" & .Range("AR" & .Rows.Count).End(xlUp).Row)
                If InStr(HIDE, "." & c & ".") Then
                    c.EntireRow.Hidden = True
                End If
            Next
        End With
    End Sub