2015-05-10 73 views
0

我在使用Excel VBA中的自動篩選器時遇到問題。我需要過濾一列包含文本的單元格以顯示「IT」的實例,但不包含包含字母「it」的單詞 - 即我要過濾包含「Commercial,IT」但不包含「Commercial,Committee」的單元格。Excel VBA - 使用數組,空格和逗號進行篩選

我使用數組作爲每一個問題:Use autofilter on more than 2 criteria

它工作時,我使用此代碼:

Worksheets("AssembledData").Range("A1").AutoFilter _ 
    field:=NewTeamCol, _ 
    Criteria1:=Array("IT", "IT, *"), _ 
    Operator:=xlFilterValues 

但是,如果我添加第三個選項陣列捕捉細胞,其中IT在字符串Criteria1:=Array("IT", "IT, *", "* IT"), _的末尾,我得到的結果與我剛纔的結果相同Criteria1:=Array("IT"), _

我在做什麼錯了?這裏新的,VBA的新手 - 盡我所能搜索,不要問這個項目,但現在難倒了!提前致謝。

+0

不能在一個寬陣列的與'xlFilterValues'過濾器標準使用通配符。如果這樣做,那麼只考慮陣列中的前兩個標準;就好像您使用'Criteria1'和'Criteria2'一樣使用'Operator:= xlAnd'。唯一的選擇是循環遍歷單元格,並將您自己的條件數組構建到數組中,然後將其提交到'.AutoFilter'命令中。 – Jeeped

+0

謝謝@Jeeped - 這與我所看到的相符。猜猜我必須正確地構建一個數組(或者通過行可見性來緩存數據...)。 – daffdy

回答

0

可以總是「過濾器由手:」

Sub qwerty() 
    Dim N As Long, i As Long, v As String 
    Dim r As Range 
    N = Cells(Rows.Count, "A").End(xlUp).Row 

    For i = 2 To N 
     Set r = Cells(i, "A") 
     v = r.Text 
     If Right(v, 3) = " IT" Or Left(v, 4) = "IT, " Or v = "IT" Then 
      r.EntireRow.Hidden = False 
     Else 
      r.EntireRow.Hidden = True 
     End If 
    Next i 
End Sub 
+1

謝謝!它工作,我喜歡'手工'的代碼。如果InStr(1,v,「IT」,vbTextCompare)<> 0或InStr(1,v,「IT」,vbTextCompare)<> 0或InStr(1, v,「IT」,vbTextCompare)<> 0或v =「IT」Then'確保所有可能的「IT」組合都被拾取。 – daffdy

0

嘗試省略Operator:=xlFilterValues

由於您使用的是帶有xlFilterValues一起通配符,Excel似乎從字面上ITIT, ** IT比較,而不是使用通配符*

例如,利用這個數據集:

Name 
1 john 
2 nathjohn 
3 test 
4 abletest 
5 testing 
6 Commercial, IT 
7 Commercial, Committee 
8 IT, * 

使用:

ActiveSheet.Range("$A$1:$A$15").AutoFilter _ 
     Field:=1, _ 
     Criteria1:=Array("IT", "IT, *", "* IT") 

結果Commercial, IT因爲標準的通配符正確與不選擇IT, *之外使用。由於這種價值並不是你當前的問題,因此我們現在將方便地跳過這個角落案例。

使用:

ActiveSheet.Range("$A$1:$A$15").AutoFilter _ 
    Field:=1, _ 
    Criteria1:=Array("IT", "IT, *", "* IT"), _ 
    Operator:=xlFilterValues 

結果IT, *因爲xlFilterValues使用的IT, *文字值。

給它一個鏡頭,看看事情是如何工作的。

+0

謝謝。嘗試它沒有運營商:= xlFilterValues',但沒有匹配 - 懷疑我是否沒有正確應用您的解決方案?但@ Jeeped關於通配符的評論表明這可能是不可能的。 – daffdy