求助: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
相关产品推荐
相关产品推荐

