Excel VBA:高级过滤空白不起作用
Excel VBA: Advanced Filtering Blanks Not Working
我有一个用户表单,它使用复选框过滤掉特定列的空白。过滤范围为Sheet1A1:C10,条件范围为Sheet2A1:C2.
如果选中:不筛选 C 列
如果未选中:过滤掉列 C
上的空白
我环顾四周,发现在高级过滤器上过滤空白的运算符是“=”。因此,当我在用户窗体上按下按钮时处理过滤器时,我将 Sheet 2 C2 设置为 "="
If Checkbox1.Value Then
Sheets(2).Range("C2").Value = ""
Else
Sheets(2).Range("C2").Value = "="
End If
Sheets(1).Range("A1:C10").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sheets(2).Range("A1:C2"), Unique:=False
当我处理这个时,所有条目都消失了,甚至是空白。如果我使用也是如此:
Else
Sheets(2).Range("C2").Value = "<>"
这应该显示非空白,但它隐藏了所有行。
这是关键;为了排除故障,我录制了一个自动过滤空白的宏,它给了我这个:
ActiveSheet.Range("$A:$C").AutoFilter Field:=3, Criteria1:="="
所以,过滤“=”好像是对的,只是不想和我一起工作
旁注: 只是为了好玩,我认为标准单元格需要显示 ="",这意味着公式将显示为 ="=""""" ,这意味着 VBA 将显示为:
Else
Sheets(2).Range("C2").Value = "=""="""""""""""
这也不行。
编辑: @Scott,我有以下四行。 None 其中似乎有效。链接页面显示了一个删除空白的示例,而不是专门显示它们。因此,除了 >0.
之外,我还尝试了 =0
Else
Sheets(2).Range("C2").Value = "=LEN(Sheet1!C2)=0"
Else
Sheets(2).Range("C2").Value = "=""=LEN(Sheet1!C2)=0"""
Else
Sheets(2).Range("C2").Value = "=LEN(Sheet1!C2)>0"
Else
Sheets(2).Range("C2").Value = "=""=LEN(Sheet1!C2)>0"""
好的,我们错过了一步。
C1 on sheet2 needs to be empty.
公式将处理过滤部分。
那么代码是:
If Checkbox1.Value Then
Sheets(2).Range("C2").Value = ""
Else
Sheets(2).Range("C2").Formula = "=LEN(Sheet1!C2)=0"
End If
Sheets(1).Range("A1:C10").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sheets(2).Range("A1:C2"), Unique:=False
我有一个用户表单,它使用复选框过滤掉特定列的空白。过滤范围为Sheet1A1:C10,条件范围为Sheet2A1:C2.
如果选中:不筛选 C 列 如果未选中:过滤掉列 C
上的空白我环顾四周,发现在高级过滤器上过滤空白的运算符是“=”。因此,当我在用户窗体上按下按钮时处理过滤器时,我将 Sheet 2 C2 设置为 "="
If Checkbox1.Value Then
Sheets(2).Range("C2").Value = ""
Else
Sheets(2).Range("C2").Value = "="
End If
Sheets(1).Range("A1:C10").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sheets(2).Range("A1:C2"), Unique:=False
当我处理这个时,所有条目都消失了,甚至是空白。如果我使用也是如此:
Else
Sheets(2).Range("C2").Value = "<>"
这应该显示非空白,但它隐藏了所有行。
这是关键;为了排除故障,我录制了一个自动过滤空白的宏,它给了我这个:
ActiveSheet.Range("$A:$C").AutoFilter Field:=3, Criteria1:="="
所以,过滤“=”好像是对的,只是不想和我一起工作
旁注: 只是为了好玩,我认为标准单元格需要显示 ="",这意味着公式将显示为 ="=""""" ,这意味着 VBA 将显示为:
Else
Sheets(2).Range("C2").Value = "=""="""""""""""
这也不行。
编辑: @Scott,我有以下四行。 None 其中似乎有效。链接页面显示了一个删除空白的示例,而不是专门显示它们。因此,除了 >0.
之外,我还尝试了 =0Else
Sheets(2).Range("C2").Value = "=LEN(Sheet1!C2)=0"
Else
Sheets(2).Range("C2").Value = "=""=LEN(Sheet1!C2)=0"""
Else
Sheets(2).Range("C2").Value = "=LEN(Sheet1!C2)>0"
Else
Sheets(2).Range("C2").Value = "=""=LEN(Sheet1!C2)>0"""
好的,我们错过了一步。
C1 on sheet2 needs to be empty.
公式将处理过滤部分。
那么代码是:
If Checkbox1.Value Then
Sheets(2).Range("C2").Value = ""
Else
Sheets(2).Range("C2").Formula = "=LEN(Sheet1!C2)=0"
End If
Sheets(1).Range("A1:C10").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sheets(2).Range("A1:C2"), Unique:=False