在VBA中使用EXCEL自动过滤功能时如何获得开始和结束rownum

时间:2011-08-24 07:21:05

标签: excel excel-vba vba

如何在VBA中使用excel自动过滤功能时获取开始和结束rownum。

我有一组500k +记录。并在特定列上使用过滤器。由于这个过滤器,起始rownum可能会改变,因为其他记录隐藏在自动过滤器中

所以在使用自动过滤器时,我可能会以startrow为74562并以87000结束。

有人可以显示一个宏,它可以为我使用的每个过滤器输出startrow和endrow。

对数据进行排序,以便任何过滤器都是固定的连续束

修改 我已经意识到以下代码给出了结果但是在范围

 MsgBox ActiveSheet.Range("A2:A81000").Rows.SpecialCells(xlCellTypeVisible).Address

它将结果显示为$A$73351:$A$77343。但我只想要StartRow变量中的73351和77343变量中的EndRow。怎么做?

3 个答案:

答案 0 :(得分:2)

您询问如何返回范围中第一行和最后一行的行号。这是如何:

Dim r As Range
Dim StartRow As Long
Dim EndRow As Long

Set r = ActiveSheet.Range("A2:A81000").Rows.SpecialCells(xlCellTypeVisible)
' r is now $A$73351:$A$77343

StartRow = r.Row ' returns 73351
EndRow = r.Row + r.Rows.Count - 1 ' returns 77343

答案 1 :(得分:0)

dim rRange as Range
    Set rRange = Range("A1")    
    Debug.Print rRange.Offset(1, 0).Row
    Debug.Print rRange.Offset(ActiveSheet.Rows.Count - 1, 0).End(xlUp).Row

答案 2 :(得分:0)

你可以尝试这段代码:

Sub Get_Filtered_Range()
Dim oWS As Worksheet
Dim oRng As Range
Dim oColRng As Range
Dim oInRng As Range

oWS = ActiveSheet
'Trigger any autofilter if needed
'oWS.UsedRange.AutoFilter(Field:=2, Criteria1:="Test")
oRng = oWS.Cells.SpecialCells(xlCellTypeVisible)
oColRng = oWS.Range("A2:A"&ActiveSheet.Rows.Count)
oInRng = Intersect(oRng, oColRng)

'display the values in the VBEditor
Debug.Print("Filtered Range is " & oInRng.Address)
Debug.Print("First Row Filtered Range is " & oInRng.Rows(1).Row)
End Sub

改编自here