如何快速查找最后(最右侧)隐藏列
实例需求:定位工作表中的最后(最右侧)隐藏列,处理其中的数据。
通常思路是从工作表最后列开始,倒序检查每个列,直到找到隐藏列或者检查完毕(无隐藏列)。
Sub LastColumn()
Dim visRng As Range, c As Range, i As Long, LastCol As Long
For i = Columns.Count To 1 Step -1
If Columns(i).Hidden Then
LastCol = i
Exit For
End If
Next
If LastCol > 0 Then
Debug.Print "最后要藏列的列号:" & LastCol
Debug.Print "最后要藏列的列名:" & Split(Cells(1, LastCol).Address, "$")(1)
Else
Debug.Print "没有隐藏列"
End If
End Sub
其实可以借助VBA的一些特殊方法更快速实现这个需求。
Sub LastColumn()
Dim visRng As Range, c As Range, i As Long, LastCol As Long
Set c = Columns(Columns.Count)
If c.Hidden Then
LastCol = Columns.Count
Else
Set visRng = ActiveSheet.Rows(1).SpecialCells(xlCellTypeVisible)
Set c = visRng.Areas(visRng.Areas.Count)
LastCol = c.Column - 1
End If
If LastCol > 0 Then
Debug.Print "最后要藏列的列号:" & LastCol
Debug.Print "最后要藏列的列名:" & Split(Cells(1, LastCol).Address, "$")(1)
Else
Debug.Print "没有隐藏列"
End If
End Sub
【代码解析】
第3行代码获取工作表的最后一列,Columns.Count
作为索引号,可以确保适配不同的Exel版本(Excel 2003工作表列数较少)。
第4行代码判断最后一列是否被隐藏。
如果最后列为隐藏列,第5行代码保存列号,用于后续输出。
如果最后列不是隐藏列,第7行代码查找第一行中的可见单元格。
第8行代码获取可见单元格中的最后一个区域(Area)。
第9行代码中c.Column
获取c
中第一个单元格的列号,其左侧一列即为最后隐藏列。
第11~16行代码输出查找的列信息。
最后一列被隐藏的情况,需要单独判断,否则后续代码获取的结果是错误的。