2015-08-20 39 views
0

如果標題有多行,並且它也不能分配給特定列,Excel自動過濾器工作不正常。所以我想用VBA宏來過濾。最有效的方法來隱藏出現某個值的所有行

Sheet2.Range("A1:A40").Find(what:="Software", _ 
After:=Cells(4, 1), _ 
LookIn:=xlValues, _ 
LookAt:=xlPart, _ 
SearchOrder:=xlByRows, _ 
SearchDirection:=xlNext, _ 
MatchCase:=False _ 
).EntireRow.Hidden = True 

但這樣只會隱藏的行與「軟件」中第一次出現。有沒有辦法使用.find的,或者我必須使用循環?

+1

這是什麼意思,它不適用於多個標題行?如果只突出顯示數據區域和底行,然後點擊過濾按鈕,則只會過濾選定的數據。 –

+1

當隱藏行或列時,我會避免使用Find(),因爲Find()*不會在隱藏的行或列中找到單元格*:這會使您的過程更難以管理。對於非常大的範圍@布魯斯韋恩的建議應該沒問題。 –

+0

@ Scott Craner:我必須糾正自己:事實上,您可以將過濾器放在第三行,第四行或更低行的列中,但只有在頭部單元未合併時纔可以。你不能把過濾器放在單獨的非相鄰的列上。好,但是,你不必選擇「最後一行」 - 誰可以說,哪一個可能(來)? ;-) @ Tim Williams:是的,我知道這件事,但要求的目的不受此限制的影響。該腳本將在進行後續過濾之前取消隱藏所有行。 – Robbit

回答

2

如果你的範圍是不是超級大牌,你總是可以發現,如果通過循環它,檢查值,並藏:

Sub test() 
Application.ScreenUpdating = False 
Dim lastRow As Integer, i As Integer 
Dim rng As Range, cel As Range 

lastRow = Sheet2.UsedRange.Rows.Count 

For i = lastRow To 1 Step -1 
    If Cells(i, 1).Value = "Software" or cells(i,1).Value = "software" Then 
    Cells(i, 1).EntireRow.Hidden = True 
    End If 
Next i 
Application.ScreenUpdating = True 
End Sub 

注:software部分是區分大小寫的,這就是爲什麼我使用Or

+0

非常感謝您的腳本。雖然我真的很想知道,但如果Find方法可以選擇所有匹配結果,即使它們不相鄰,也是有幫助的。當然,這會使參數SearchOrder和SearchDirection變爲消耗性的。 – Robbit

+0

使用find,如果你想查找所有單元格的單元格地址,我可能會創建一個數組,然後獲取像myCellAddress = Cells.Find(What:=「software」,MatchCase:= False)的單元格。 。 [這是一個](http://stackoverflow.com/questions/19504858/find-all-matches-in-workbook-using-excel-vba)SO線程,給出了一個很好的例子。 – BruceWayne

相關問題