当前位置: 首页 > article >正文

如何快速查找最后(最右侧)隐藏列

实例需求:定位工作表中的最后(最右侧)隐藏列,处理其中的数据。

通常思路是从工作表最后列开始,倒序检查每个列,直到找到隐藏列或者检查完毕(无隐藏列)。

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行代码输出查找的列信息。

最后一列被隐藏的情况,需要单独判断,否则后续代码获取的结果是错误的。


http://www.kler.cn/a/157869.html

相关文章:

  • [oeasy]python0002_终端_CLI_GUI_编程环境_游戏_真实_元宇宙
  • webWorker解决单线程中的一些小问题和性能优化
  • 国家图书馆论文检索证明申请步骤
  • Unity 关于SetParent方法的使用情况
  • IPD|企业产品研发的致胜法宝——TR技术评审
  • MySQL的多表查询
  • C++现代模板元编程
  • JDBC操作
  • SAP_MM_实现当期研发费用统计方案
  • c++--运算符重载
  • 无需繁琐编程 开启高效数据分析之旅!
  • 神经网络常用归一化和正则化方法解析(一)
  • 深入了解JavaScript事件绑定:实现高效可靠的事件处理
  • SAP ABAP Table Control的制作
  • 关于前端学习的思考-vertical-align的用法
  • JDK8新特性——Stream流
  • 基于Java SSM酒店客房管理系统
  • Flask 快速入门
  • 在JDBC中使用DataSource获取连接
  • 配置texstudio编译器