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

如何循环读取行中新数据并偏移粘贴至新列(VBA)

解决VBA循环粘贴时无法自动偏移到下一个空单元格的问题

问题原因

你的代码里c = Lcol1 + 1只在循环开始前赋值了一次,整个For D循环过程中c的数值完全没变化,所以每次粘贴都会往同一个单元格里塞,自然不会偏移到下一列。

修复方案

只需要在每次完成粘贴操作后,让c自增1,这样下一次循环就会定位到下一个空列。另外可以把复制粘贴改成直接赋值,代码更简洁高效:

Sub Testnewname()
    Dim Nw2 As Integer
    Dim c As Long, D As Long
    Dim Lcol1 As Long, Lrow2 As Long
    
    ' 找到第3行最后一个有内容的列
    Lcol1 = Cells(3, Columns.Count).End(xlToLeft).Column
    ' 找到第10列最后一个有内容的行(数据来自UNIQUE函数生成的列表)
    Lrow2 = Cells(Rows.Count, 10).End(xlUp).Row
    ' 获取上次循环结束的位置
    Nw2 = Sheets("Cost Table").Range("$H$10").Value
    
    ' 初始化目标列:第3行最后列的下一列
    c = Lcol1 + 1
    
    For D = Nw2 To Lrow2
        ' 直接赋值替代复制粘贴,更高效
        Cells(3, c).Value = Cells(D, 10).Value
        ' 每次粘贴后,目标列向右偏移1位
        c = c + 1
    Next D
    
    ' 更新下次循环的起始位置
    Sheets("Cost Table").Range("$H$10").Value = Sheets("Cost Table").Range("$H$11").Value
    
    Application.CutCopyMode = False
End Sub

为什么你尝试的双重循环没用?

你写的双重循环逻辑是先遍历列,再遍历所有行,结果会把所有行的内容都重复粘贴到同一列两次,完全不符合你"逐个行对应逐个列"的需求,反而会造成重复数据,自然没效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:15:40