Как получить начальный и конечный rownum при использовании функции автофильтра EXCEL в VBA - PullRequest
1 голос
/ 24 августа 2011

Как получить начальный и конечный rownum при использовании функции автофильтрации Excel в VBA.

У меня есть набор из 500k + записей.и использовать фильтры для определенного столбца.Из-за этого из-за фильтров начальный rownum может измениться, так как другие записи скрыты в автофильтре

, поэтому при использовании автофильтра я могу закончить со значением startrow как 74562 и заканчивая 87000.

Может кто-то показатьмакрос, который может выводить startrow и endrow для каждого фильтра, который я использую.

Данные отсортированы так, что любой фильтр будет фиксированной последовательной связкой

EDIT: Я понялчто следующий код дает результат, но в диапазоне

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

Он показывает результат как $A$73351:$A$77343.Но мне просто нужна переменная 73351 в StartRow и 77343 в EndRow.Как это сделать?

Ответы [ 3 ]

2 голосов
/ 24 августа 2011

Вы спрашиваете, как вернуть номер строки первой и последней строки в диапазоне.Вот как:

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
0 голосов
/ 24 августа 2011

Вы можете попробовать этот кусок кода:

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

Адаптировано с здесь

0 голосов
/ 24 августа 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...