2017-02-23 87 views
0

我有一個Excel表(24列,5000行)。在VBA中,我篩選該表根據性判據(目前我用硬編碼cretiria值試圖測試代碼),找到一行:Excel VBA - 獲得多個過濾器後的列值

With Worksheets("test") 
    .AutoFilterMode = False 
    With .Range("A1:X1") 
     .AutoFilter 
     .AutoFilter Field:=2, Criteria1:="2024" 
     .AutoFilter Field:=3, Criteria1:="T351" 
     .AutoFilter Field:=4, Criteria1:="ABS5032A" 
     .AutoFilter Field:=11, Criteria1:="7" 
     .AutoFilter Field:=12, Criteria1:="8" 
     .AutoFilter Field:=14, Criteria1:="1002" 
     .AutoFilter Field:=15, Criteria1:="YES" 
     .AutoFilter Field:=17, Criteria1:="NO" 
     .AutoFilter Field:=18, Criteria1:="12" 
    End With 
End With 

這工作得很好,在我的Excel表格中我可以看到正確的行可見,其他隱藏。

問題從這裏開始。我希望能夠獲得可見行的最後一列(列「X」)的值。要做到這一點我想這(我的過濾器後):

Dim rsltRng As Range 
Set rsltRng = Worksheets("test").AutoFilter.Range.SpecialCells(xlCellTypeVisible) 

當我在另一個工作表複製rslRng,它工作正常,右排被複制的表:

rsltRng.Copy Worksheets("sheet").Range("A1") 

不過,我想喜歡避免使用其他工作表,並直接獲取我想要的列的值。

任何想法,我怎麼能做到這一點?

謝謝你的幫助!

Neira

回答

1

所以你想在最後一個可見行的列X中的值?試試這個:

Dim rsltRng As Range 
Dim result As String 
Dim rowNum As Integer 
Dim colNum As Integer 

With Worksheets("test") 
    .AutoFilterMode = False 
    With .Range("A1:X1") 
     .AutoFilter 
     .AutoFilter Field:=2, Criteria1:="2024" 
     .AutoFilter Field:=3, Criteria1:="T351" 
     .AutoFilter Field:=4, Criteria1:="ABS5032A" 
     .AutoFilter Field:=11, Criteria1:="7" 
     .AutoFilter Field:=12, Criteria1:="8" 
     .AutoFilter Field:=14, Criteria1:="1002" 
     .AutoFilter Field:=15, Criteria1:="YES" 
     .AutoFilter Field:=17, Criteria1:="NO" 
     .AutoFilter Field:=18, Criteria1:="12" 
    End With 


    Set rsltRng = .AutoFilter.Range.SpecialCells(xlCellTypeVisible) 

    rowNum = .Range("B1").End(xlDown).Row 
    colNum = 24 'column X 

    result = .Cells(rowNum, colNum).Text 

End With 
+0

謝謝Steve! – Neira

+0

rowNum = .Range(「B1」)。End(xlDown).Row - 這應該是'X1',但最終結果是一樣的:) –