如何在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
。怎么做?
答案 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