如何循环读取行中新数据并偏移粘贴至新列(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
相关产品推荐
相关产品推荐

