How to get value of visible row data in specialCell(xlCellTypeVisible)
我有列参考、计数和代码。我正在一一过滤列代码,过滤数据后,我只想获取可见行的值。有了这个,我使用了 SpecialCells(xlCellTypeVisible)。
在列代码中,过滤器中的第一个选择是"IG"。所以这只会留下我的数据的第一行,其余的都会隐藏在它下面。以下是我的数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |---------------------|------------------|------------------| | Reference | Count | Code |---------------------|------------------|------------------| | A1 | 4 | IG |---------------------|------------------|------------------| | A2 | 3 | IH |---------------------|------------------|------------------| | A2 | 5 | IH |---------------------|------------------|------------------| | A2 | 6 | IH |---------------------|------------------|------------------| | A2 | 8 | IH |---------------------|------------------|------------------| | A2 | 8 | IH |---------------------|------------------|------------------| | A2 | 8 | IH |---------------------|------------------|------------------| | A3 | 8 | II |---------------------|------------------|------------------| | A3 | 10 | II |---------------------|------------------|------------------| | A3 | 11 | II |---------------------|------------------|------------------| | A4 | 15 | VO |---------------------|------------------|------------------| |
这是我试过的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Sub Try() Dim cl As Range, rng As Range Dim LastRow As Long Dim LastColumn As Long Dim StartCell As Range Set StartCell = Range("B2") LastRow = Cells(Rows.Count, StartCell.Column).End(xlUp).Row Set rng = Range(StartCell, Cells(LastRow, 2)) For Each cl In rng.SpecialCells(xlCellTypeVisible) MsgBox cl Next cl End Sub |
上面的代码适用于其余的过滤数据,例如 "IH"、"II" 和 "VO",因为隐藏的行介于两者之间。与"IG"不同,其余隐藏行位于其下方。
当我首先尝试过滤"IG"时,它只显示值"参考"、"计数"、"代码",并且永远不会停止循环。
我将如何调整我的代码以适应这种情况,因为我很可能会在未来的数据中遇到同样的情况。
您可以从
在这里试试这个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Sub Try() Dim cl As Range, rng As Range Dim LastRow As Long Dim LastColumn As Long Dim rw As row Dim StartCell As Range Set StartCell = Range("B1") LastRow = Cells(Rows.count, StartCell.Column).End(xlUp).row Set rng = Range(StartCell, Cells(LastRow, 2)) For Each cl In rng.SpecialCells(xlCellTypeVisible) If Not cl.row = 1 Then MsgBox cl Next cl End Sub |