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

求助:使用VBA复制不连续单元格的代码问题

修正你的不连续区域复制代码

你的代码存在几个语法和逻辑问题,导致无法正确复制目标不连续区域,下面是修正后的版本及问题说明:

问题点解析

  • 子过程缺少合法名称:Sub () 是语法错误,必须给宏定义一个有效名称
  • 未显式绑定工作表:直接使用Range会默认指向当前激活表,即使提前激活了目标表,也可能因后续操作导致引用混乱,最好明确指定工作表对象
  • Rng1.End(xlDown) 仅返回单个单元格:你大概率是要获取从B24:K24往下到连续数据最后一行的整行区域,而不是单个单元格
  • 可以简化不连续单元格的写法:多个同列不连续单元格直接用Range("C9,C11,C13,C15")即可,无需多次调用Range

修正后的代码

Sub CopyDiscontinuousRange()
    ' 显式绑定目标工作表,避免引用混乱
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Name")
    
    Dim Rng1 As Range
    Set Rng1 = ws.Range("B24:K24")
    
    ' 获取从B24:K24到下方连续数据最后一行的整个区域
    Dim Rng2 As Range
    Set Rng2 = ws.Range(Rng1, Rng1.End(xlDown))
    
    ' 合并所有需要复制的不连续区域
    Dim Rng3 As Range
    Set Rng3 = Union(ws.Range("C9,C11,C13,C15"), Rng2)
    
    ' 执行复制操作
    Rng3.Copy
End Sub

额外优化提示

如果你的需求是复制Rng1所在列的最后一行有效数据单元格(而非整个连续区域),且要避免空数据时跳到表底的问题,可以用以下方式安全获取最后一行:

' 安全获取B列最后一行有数据的行号,再对应到K列区域
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
Set Rng2 = ws.Range("B" & lastRow & ":K" & lastRow)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:57:30