excel - 按条件自动筛选,如果特定列中没有数据,应停止继续执行其中一项条件

标签 excel vba autofilter

我的目标是创建一个过程,它始终对一个条件进行过滤(在 I 列中),但如果条件存在,则对下一个条件进行过滤(在 T 列中)。

首先,我是初学者,感谢您的耐心和理解。

这篇文章很长,因为我介绍了屏幕如何工作以及我希望它如何工作。它帮助我解释我的问题。 我想对这个简单的单元格范围实现我的程序:

enter image description here

因此,我们有这个单元格范围,我们需要根据条件过滤来选择一些值:

Sub Filter1()
    
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Sheet1")
    sh.AutoFilterMode = False
    sh.Range("C7:U7").AutoFilter Field:=7, Criteria1:="Lukasz" 
    If WorksheetFunction.CountIf(sh.Range("T:T"), "Check") > 0 Then
       sh.Range("C7:U7").AutoFilter Field:=18, Criteria1:="Check" 
    
    End If
End Sub

如果在 I 列中我们有值(例如“Lukasz”)并且在 T 列中我们有值“Check”,因为我的程序已创建,则它可以正常工作。 enter image description here

然后,这是主要问题,正如您在 I 列中看到的 Lukasz,T 列中没有“检查”值: enter image description here 不幸的是,运行我的宏后,它显示空单元格,如果我们在 I 列中有名称“Lukasz”的数据,但在“数据”的 T 列中没有条件“Lukasz”的数据,我运行宏并结果是:

enter image description here

但是,在这种情况下,我想实现它:

enter image description here

因此,如果该列中没有“检查”值,我不知道如何修改或创建我的程序来停止根据标准过滤列 T。

是否可以修改我的宏或创建新的宏来实现我的目标?如果是这样,您能否修改我的程序并分享以实现我的目标?我会测试一下。

如果您能做到,我将不胜感激。

最佳答案

问题是 WorksheetFunction.CountIf(sh.Range("T:T"), "Check")T 列中的所有 Check 进行计数 不仅仅是可见的。

Sub Filter1()
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Sheet1")
    sh.AutoFilterMode = False
    sh.Range("C7:U7").AutoFilter Field:=7, Criteria1:="Lukasz" 

    Dim FilteredRange As Range  'get only visible cells in column T
    Set FilteredRange = sh.Range("T:T").SpecialCells(xlCellTypeVisible)

    'search if Check can be found (we don't need to count them, one is enough!)
    If Not FilteredRange.Find(What:="Check", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchByte:=True) Is Nothing Then
        sh.Range("C7:U7").AutoFilter Field:=18, Criteria1:="Check"
    End If
End Sub

请注意,CountIf 不适用于非连续范围,例如 FilteredRange 返回。但我们可以使用Range.Find method因为我们只对 Check 的存在感兴趣,而不对 Check 的数量感兴趣。如果未找到 CheckFind 将返回 Nothing

关于excel - 按条件自动筛选,如果特定列中没有数据,应停止继续执行其中一项条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65952156/

相关文章:

excel - 自动过滤器不返回行 : skip next steps

.net - 有谁知道 MS Excel 求解器的更好替代品吗?

arrays - VBA:尝试返回数组但只获取第一个值

Excel VBA : How to Unfilter Only One Autofilter Range at a Time? 提供代码

VBA 如何 : Prompt When ActiveInspector. 当前项目在 Outlook 中为空?

excel - 如何安全地从 VBA 项目中删除所有 Option Base 1 语句

vba - 自动过滤器可以从字典键中获取包含和非包含通配符吗?

excel - 复制列中的单元格范围直到空白单元格,然后粘贴到新工作簿中

json - ExcelJS 节点 : is there a method/module for converting xlsx to json in exceljs

vba - 如何在Excel工作簿的所有工作表中搜索字符串?