循环遍历数据并按列偏移粘贴至其他工作表的VBA问题
VBA循环列偏移粘贴问题修正方案
问题背景
操作逻辑:从WAKA工作表的表格中复制日期到Dynamisch Voorblad工作表,触发计算后,将该表G24:G27区域的结果复制到Formule van Groei per week工作表,要求从B5开始,每完成一次循环向右偏移一列(依次粘贴至B5、C5、D5……)。原代码无法实现预期的列偏移效果。
原代码问题分析
原代码中Sheets("Blad13").Range(i, 5).PasteSpecial xlPasteValues的定位逻辑错误:Range(i,5)表示第i行第5列(E列),完全不符合从B5开始逐列偏移的需求。
修正后的代码
Sub ggg() Dim wsWaka As Worksheet Dim wsDynamic As Worksheet Dim wsGrowth As Worksheet Dim i As Integer ' 提前定义工作表对象,避免重复查找,提升效率 Set wsWaka = ThisWorkbook.Sheets("WAKA") Set wsDynamic = ThisWorkbook.Sheets("Dynamisch Voorblad") Set wsGrowth = ThisWorkbook.Sheets("Formule van Groei per week") ' 替换原代码的Blad13,与需求统一 For i = 2 To 21 ' 直接赋值替代复制粘贴,更高效稳定 wsDynamic.Range("C2").Value = wsWaka.Range("C" & i).Value wsDynamic.Range("C3").Value = wsWaka.Range("D" & i).Value ' 将G24:G27的值粘贴到目标工作表,从B5开始逐列偏移 ' Offset(0, i-2):i从2开始,第一次偏移0列(B5),之后每次+1列 wsGrowth.Range("B5").Offset(0, i - 2).Resize(4, 1).Value = wsDynamic.Range("G24:G27").Value Next i End Sub
关键修正点
- 目标区域定位:使用
Range("B5").Offset(0, i-2)实现列偏移,i-2保证第一次循环对应B5,后续每次向右移动一列;Resize(4,1)匹配源区域G24:G27的4行1列尺寸。 - 优化赋值方式:删除
Copy/PasteSpecial,直接通过.Value赋值,避免依赖剪贴板,减少运行错误。 - 工作表对象定义:提前绑定工作表对象,减少重复查找工作表的开销,同时避免因工作表名称拼写错误导致的问题。
内容的提问来源于stack exchange,提问作者Thom Haasert
相关产品推荐
相关产品推荐

