2016-07-29 113 views
0

我需要從列N2和M2中獲取值,使用自動篩選器後,賦值只給出了整個工作表中不存在於自動篩選器範圍內的值。excel vba將單元格值賦給變量來自自動篩選器結果

Sub mainSub() 
Dim fRngb as Range 

For Each key In fCatId.Keys 
With wshcore 
    llastrow = wshcore.Range("A" & Rows.Count).End(xlUp).Row 
    .AutoFilterMode = False 
    .Range("A1:N" & llastrow).AutoFilter 
    .Range("A1:N" & llastrow).AutoFilter Field:=1, Criteria1:=fCatId(key) 
    min = WorksheetFunction.Subtotal(5, Range("H:H")) 
    max = WorksheetFunction.Subtotal(4, Range("H:H")) 

    'This does not work. it gives the first 13,2 value not the filtered one. 
    Set fRngb = wshcore.AutoFilter.Range.SpecialCells(xlCellTypeVisible) 
    'MsgBox fRngb.Cells(13, 2) 
    'I've also tried this: 
    'Range("K2:K2").CurrentRegion.Value(2) 

    Debug.Print fRngb.Cells(13, 2) & " - " & Range("K2:K2").CurrentRegion.Value(2) 
End With 
Next key 
End Sub 

有什麼建議嗎?

+0

的過濾器後,你可以複製列範圍(例如'.Range(「N2:M」&llastrow).Copy'並將其粘貼到某處。這將複製可見單元格。 – Slai

回答

0

編輯 OP的澄清後:

  • 使用.Areas()財產Range對象返回其是由

  • 得到它的第一個「區域」索引1所有連續範圍的集合:.Areas(1)

  • 將其第一個單元格調整爲一行:.Areas(1).Resize(1)

這裏如下全碼:

Sub mainSub() 
    Dim fRngb As range 

    With wshcore 
     With .range("A1:N" & .Cells(.Rows.Count, 1).End(xlUp).Row) 
      For Each Key In fCatId.Keys 
       .AutoFilter field:=1, Criteria1:=fCatId(Key) 
       Min = WorksheetFunction.Subtotal(5, .Columns("H")) 
       Max = WorksheetFunction.Subtotal(4, .Columns("H")) 
       Set fRngb = .Columns("N").Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) '<--| get all column "N" (relative to considered range) filtered values excluded header row 
       MsgBox fRngb.Areas(1).Resize(1).Address '<--| get its first cell 
       .AutoFilter 
      Next Key 
     End With 
    End With 
End Sub 

我猜fCatId是Dictionary類型的一些Public變量...否則,您必須將其傳遞給mainSub作爲參數

+0

最小和最大值是在過濾範圍內獲取該列中的最小/最大值。 fcatId是一個字典,我必須控制其他信息。我測試了它給出了一個「運行時錯誤5」的代碼。無效的過程調用或參數在這裏:「With .Range(」A1:N「&.Cells(」A「&.Rows.Count).End(xlUp)。 Row)「 – sys73r

+0

是的,它必須是」With .Cells(.Rows.Count,1).End(xlUp).Row「。請參閱編輯的代碼 – user3598756

+0

我認爲我們已經差不多了,它現在返回標題名稱,如何獲取它返回數據中的第一行(過濾器中的第二行)?謝謝。順便說一句我使用Msgbox fRngb.Value,因爲我需要單元格中的值是一個字符串。我嘗試過使用fRngb.Address(RowAbsolute:= False),但它給我的範圍不是數值。 – sys73r