【发布时间】:2017-03-14 15:25:24
【问题描述】:
我正在尝试在 Excel 中返回过滤表的第 n 个可见元素。 Current methods 告诉我使用 SpecialCells(xlCellTypeVisible) 方法,然后循环遍历元素,同时使用 For Each... Next 循环计算它们。
这似乎不是最理想的;我不想知道前 19 个范围,只知道第 20 个。有没有办法直接跳到循环的第 20 个元素?
或者也许循环遍历.Areas 并计算它们的大小;这意味着您只需进入包含第 n 个元素的Area,然后在 that 区域内进行子循环以精确定位元素。这会更快吗?
当然,如果你能想出更好的方法来获取过滤表的第 n 个元素,那也很好!
我获取表格范围的代码是:
Dim inptTbl As Range
Set inptTbl = ThisWorkbook.Sheets("compiled").ListObjects("Table2").ListColumns("Company").Range.SpecialCells(xlCellTypeVisible)
然后循环,好吧,我还没有写,但我猜:
i=0
Dim r As Range
For Each r in inptTbl
i=i+1
If i = 20 Then Exit For
Next r
Debug.Print r.Address
按所述循环遍历区域:
Set inptTbl = ThisWorkbook.Sheets("compiled").ListObjects("Table2")
Set test = inptTbl.ListColumns("Company").Range.SpecialCells(xlCellTypeVisible)
runningTot = 0
arIndex = 1
Do Until test.Areas(arIndex).Cells.Count + runningTot > 20
runningTot = runningTot + test.Areas(arIndex).Cells.Count
arIndex = arIndex + 1
Loop
i = 0
Dim r As Range
For Each r In test.Areas(arIndex)
If i = 20 - runningTot Then Exit For
i = i + 1
Next r
Debug.Print r.Address
【问题讨论】:
-
从您拥有多区域范围的那一刻起,我认为您需要逐个迭代区域或可见单元格。