我有一个Excel文件,我根据三列中的标准进行过滤,这意味着从13 K行下降到100(99 +标题),这部分工作正常。
接下来我需要做的是从列F中提取一个值列表,但不能开始工作(这些值是包含字母、数字和连字符的字符串-不知道这是否重要),删除所有过滤并再次过滤同一文件基于从列F提取的列表(其然后将向我示出99个原始行+包含针对所有这些行的附加信息的附加行)来计算(通过列F)。下面是我无法使用的代码部分。
有人知道我哪里做错了吗?
Dim LR As Long, ws As Worksheet, Criteria As Variant
Set ws = ActiveSheet
LR = ws.Range("A" & Rows.Count).End(xlUp).Row
Criteria = ws.Range("F2:F" & LR).SpecialCells(xlCellTypeVisible).Value
Cells.AutoFilter
LR = ws.Range("A" & Rows.Count).End(xlUp).Row
ActiveSheet.Range("A1:BY" & LR).AutoFilter Field:=6, Criteria1:=Application.Transpose(Criteria), _
Operator:=xlFilterValues
我的过滤只包括我想从F列中提取的值列表中的第一个值。MsgBox (Criteria)
似乎确认它只拾取了第一个值。
2条答案
按热度按时间n53p2ov01#
所以我找到了一个解决方法,我只是将F列的值列表复制到新创建的第二个工作表(我的文件最初只有一个工作表),然后从那里定义我的变体,称为criteria。
但是,如果有人有想法的话,我仍然会对我在原始代码中做错了什么感兴趣。
kq4fsx7k2#
在过滤数据之前,请确保它尚未被过滤。如果已经过滤,代码将添加一个额外的过滤器,而不替换现有的过滤器。在第一个过滤器之前添加此选项以删除任何现有的过滤器:
If ws.AutoFilterMode Then ws.AutoFilterMode = False
尝试将过滤后的数据复制到单独的工作表中,这样管理可能更容易。
一些变化:
Select
和Activate
。.Copy
方法中使用了Destination:=
参数。这绕过了剪贴板,效率更高。Criteria
而不是Variant
指定了特定类型。这样更有描述性和效率。