You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel含合并单元格场景下可靠获取最后一列的VBA实现方案

原代码问题原因

  1. 仅校验第1行对应列的单元格是否合并,当有内容的合并单元格不在第1行时逻辑完全不生效
  2. 合并区域列号计算逻辑错误,直接取MergeArea.Columns.Count忽略了合并区域的起始列位置,会返回错误的列号结果

修正后的完整代码

Public Sub Test_LCol()
    Debug.Print Get_lCol(ActiveSheet)
    ' 如需返回字母格式列标(如D而非4),可使用下方代码转换
    ' Debug.Print Split(Cells(1, Get_lCol(ActiveSheet)).Address, "$")(1)
End Sub

Public Function Get_lCol(WS As Worksheet) As Long
    Dim lastCell As Range
    ' 定位工作表内最后一个存在内容的单元格
    Set lastCell = WS.Cells.Find(What:="*", After:=WS.Range("A1"), _
        SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
    
    ' 处理空工作表场景
    If lastCell Is Nothing Then
        Get_lCol = 1
        Exit Function
    End If
    
    ' 判断单元格是否属于合并区域,是则取合并区域最右列号,否则取单元格自身列号
    If lastCell.MergeCells Then
        Get_lCol = lastCell.MergeArea.Column + lastCell.MergeArea.Columns.Count - 1
    Else
        Get_lCol = lastCell.Column
    End If
End Function

修改点说明

  • 移除了原函数仅检查第1行合并单元格的错误逻辑,改为直接判断Find定位到的最后一个有内容的单元格本身是否属于合并区域,兼容合并单元格在任意行的场景
  • 修正了合并区域列号计算逻辑,避免忽略合并区域起始列导致的结果偏差
  • 移除了对IsWorksheetEmpty自定义函数的依赖,直接判断Find返回的单元格对象是否为空即可处理空工作表场景
  • 返回值改为Long类型,兼容高版本Excel最大16384列的规格

内容的提问来源于stack exchange,提问作者FreeSoftwareServers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:36:09