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

Excel VBA复制C3:C122到间隔70行单元格报错450,求解决方案

VBA代码报错450的问题解决

咱们先明确:当前你的方案是不可行的,报错450完全是代码里的语法和逻辑错误导致的,我给你拆解下问题,再提供修正后的代码:

你的代码里的核心问题

  • 语法错误触发450报错:你写的Cells.Value(i, 3)完全不符合VBA的语法规范。Cells的正确调用方式是Cells(行号, 列号),要访问单元格值的话应该是Cells(i, 3).Value(甚至可以直接写Cells(i,3),因为Value是单元格的默认属性)。你现在的写法相当于给Cells.Value传递了两个参数,这就会触发“参数数量错误”的450提示。
  • 赋值逻辑错误:你用"c" & n是把字符串(比如"c3"、"c4")写入目标单元格,而不是复制C3到C122里的实际内容,正确的应该是引用源单元格的值Cells(n, 3).Value。
  • 循环嵌套逻辑错误:你现在的外层循环控制目标行,内层循环遍历源行,这样每个目标行都会被覆盖120次,最后只会留下C122的内容,完全达不到复制整个C3:C122区域的目的。

修正后的代码(两种方案)

方案1:逐行赋值(适合理解逻辑)

Option Explicit

Sub Titles()
    Dim targetRow As Long
    Dim sourceRow As Integer
    Dim rowOffset As Integer
    
    ' 遍历所有目标起始行:从150开始,每70行一次,直到8791
    For targetRow = 150 To 8791 Step 70
        ' 遍历源区域C3:C122,计算当前源行相对于起始行的偏移量
        For sourceRow = 3 To 122
            rowOffset = sourceRow - 3
            ' 把源单元格的值赋值给对应的目标单元格
            Cells(targetRow + rowOffset, 3).Value = Cells(sourceRow, 3).Value
        Next sourceRow
    Next targetRow
End Sub

方案2:批量复制(更高效,推荐)

如果数据量较大,直接用区域复制的方法会快很多,不用逐行循环:

Option Explicit

Sub Titles()
    Dim targetRow As Long
    Dim sourceRange As Range
    
    ' 先定义好要复制的源区域C3:C122
    Set sourceRange = ThisWorkbook.ActiveSheet.Range("C3:C122")
    
    ' 遍历所有目标起始行
    For targetRow = 150 To 8791 Step 70
        ' 一次性把源区域复制到目标起始行的C列位置
        sourceRange.Copy Destination:=Cells(targetRow, 3)
    Next targetRow
End Sub

补充说明

  • 我把循环变量i改成了targetRow,n改成了sourceRow,这样变量名更直观,方便你后续维护。
  • 用Long类型存储目标行号,因为Excel的行号可能超过Integer的最大值(Integer最大是32767,虽然你的8791没超,但养成好习惯总是没错的)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:12:52