gpt4 book ai didi

arrays - 使用数组的 VBA 自动筛选 - 如果不在筛选列表中则忽略条件

转载 作者:行者123 更新时间:2023-12-04 21:17:01 24 4
gpt4 key购买 nike

我一直在寻找解决这个 VBA 自动过滤问题的方法,欢迎任何想法:

我在命名范围“FslList”中有一个自动筛选条件的静态列表 - 我已将其转换为一维数组,用于自动筛选数据工作表中的第 14 列:

   Dim FSLArray As Variant
Dim rngFSL As Range
Set rngFSL = RawData.Worksheets(1).Range("FslList")
FSLArray = rngFSL.Value

With NewBook.Worksheets(1)
.Cells.AutoFilter Field:=14, Criteria1:=Application.Transpose(FSLArray), Operator:=xlFilterValues

一旦我从数组中过滤掉值 - 我需要删除它们

          With .AutoFilter.Range
Set DeleteRange = .Offset(1, 0).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
End With

DeleteRange.EntireRow.Delete
NewBook.Worksheets(1).AutoFilterMode = False
End With

我的问题是我的数据列表一直在变化,并不是 FSLArray 中的所有值都在要过滤的列中。因此,一旦遇到不在列表中的条件,自动过滤器就会停止 - 并且在过滤时不包括任何后续条件。

我想做的是,如果在要过滤的数据中找不到数组中的一个或多个元素,自动过滤器将继续使用其他数组条件进行过滤。

编辑:我已将数组中的数据从数字(它是)更改为字母 - 现在它可以很好地处理字母。

我已经尝试重写代码并按照建议定义命名范围:

数组中的元素(范围 C11:C14)是:

Acc
9158
11958 (this one is not present in the list of data)
15938
15940

命名范围“PODCustList”定义如下:

=OFFSET(Acc,1,0,COUNTA(Settings!$C:$C)-1,1)

代码是一样的:

Dim PODCustArray As Variant
Dim rngPODCust As Range
Set rngPODCust = RawData.Worksheets(1).Range("PODCustList")
PODCustArray = rngPODCust.Value

With Worksheets(1)
.Cells.AutoFilter Field:=7, Criteria1:=Application.Transpose(PODCustArray), Operator:=xlFilterValues

我在过滤后得到的返回只是其中过滤了“9158”元素的行。

已解决:我需要通过这个运行我的数组 - Criteria1:=Split(Join(Application.Transpose(PODCustArray))) 以便自动过滤器将其中的数据正确解释为字符串数组。

我可以调整我的代码,还是需要使用不同的方法?

提前谢谢你,

最佳答案

My issue is that my list of data is allways changing, and not all the values from FSLArray are in the column to be filtered. Thus the autofilter stops, once it encounters a criteria that is not on the list - and does not include any following criteria when filtering.

这取决于您如何定义您的 Range("FslList")

看这个例子

我有一个包含 Sheet1Sheet5 的工作簿。 Sheet1 有列表,Sheet5 有需要过滤的数据。工作簿可以从HERE下载。

enter image description here

现在选择 Sheet1 中的 A1 并为其命名,比如 Criterias。接下来在名称管理器中创建一个名为 FslList 的名称,并将公式设置为 =OFFSET(Criterias,1,0,COUNTA(Sheet1!$A:$A)-1,1)

enter image description here

现在运行这段代码

Option Explicit

Sub Sample()
Dim FslList As Variant
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rngCritList As Range, rngSh5 As Range

Set ws1 = Worksheets("Sheet5")
Set ws2 = Worksheets("Sheet1")

Set rngSh5 = ws1.Range("$A$1").CurrentRegion
Set rngCritList = ws2.Range("FslList")

FslList = rngCritList.Value

rngSh5.AutoFilter Field:=1, _
Criteria1:=Application.Transpose(FslList), _
Operator:=xlFilterValues
End Sub

即使 eee 在条件列表中但不在需要过滤的列表中,您也会看到列表被过滤。

这是运行宏后 Sheet5 被过滤的方式

enter image description here

关于arrays - 使用数组的 VBA 自动筛选 - 如果不在筛选列表中则忽略条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18868332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com