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

求助:VBA代码选取非连续Range最后单元格结果不符

非连续Range最后一个单元格选取问题排查与解决

问题原因

你的代码逻辑存在错误:通过累加所有区域的列数得到r,再用finalRange.Cells(1, r)选取单元格的方式,不适用于非连续区域。核心问题在于:

  • finalRange.Cells(行, 列)中的“列”参数,是基于非连续区域自身的列集合顺序(按工作表列号排序,而非你定义区域的顺序),并非你累加的区域列数总和对应的位置。
  • 非连续区域的Cells索引规则无法直接通过累加列数定位到工作表的目标列,导致选取结果与预期不符。

修正代码

要精准选取非连续区域的最后一个单元格,最可靠的方式是直接定位到最后一个区域(Area)的最后一个单元格:

Sub Make_Selection1()
    Dim sh As Worksheet: Set sh = ActiveSheet
    
    Dim finalRange As Range
    Set finalRange = sh.Range("A3:C3,E3:F3,H3,J3,L3,N3:S3")
    
    ' 获取最后一个区域的最后一个单元格
    Dim lastCell As Range
    Set lastCell = finalRange.Areas(finalRange.Areas.Count).Cells(finalRange.Areas(finalRange.Areas.Count).Cells.Count)
    
    lastCell.Select
End Sub

简化写法

也可以用更简洁的语句实现相同效果:

Sub Make_Selection1()
    Dim sh As Worksheet: Set sh = ActiveSheet
    
    Dim finalRange As Range
    Set finalRange = sh.Range("A3:C3,E3:F3,H3,J3,L3,N3:S3")
    
    ' 直接选取最后一个区域的最后一个单元格
    finalRange.Areas(finalRange.Areas.Count).Cells(finalRange.Areas(finalRange.Areas.Count).Columns.Count).Select
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 16:05:25