Excel VBA:高级筛选空白不起作用

时间:2016-10-07 19:00:40

标签: excel vba filter advanced-filter

我有一个userform,它使用一个复选框来过滤某个列的空白。要过滤的范围是Sheet 1 A1:C10,标准范围是Sheet 2 A1: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$1:$C$2").AutoFilter Field:=3, Criteria1:="="

所以,似乎过滤&#34; =&#34;是正确的,但它并不想与我合作。

旁注:只是为了踢,我认为标准单元格需要显示=&#34;&#34;,这意味着公式会读取=&#34; =& #34;&#34;&#34;&#34;&#34;,这意味着VBA会读取:

Else
    Sheets(2).Range("C2").Value = "=""="""""""""""

这也行不通。

编辑: @Scott,我有以下四行。这似乎都不起作用。链接页面显示了删除空白的示例,而不是仅显示它们。因此除了&gt; 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"""

1 个答案:

答案 0 :(得分:1)

好的,我们错过了一步。

  sheet 2上的

C1必须为空。

公式将处理过滤器部分。

然后代码是:

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