excel - 在 for 循环中复制列范围

标签 excel vba loops copy-paste

我正在运行以下运行良好的代码,但我找不到任何解决方案来简化它。已尝试以多种不同方式重新排列语法以将代码缩短为两行,但它们似乎不起作用,任何人都可以建议如何简化此代码:

'export results to columns
Worksheets(analysis_sheet & " Analysis").Columns(9).Copy Columns(9 + (5 * (i - 6)))
Worksheets(analysis_sheet & " Analysis").Columns(10).Copy Columns(10 + (5 * (i - 6)))
Worksheets(analysis_sheet & " Analysis").Columns(11).Copy Columns(11 + (5 * (i - 6)))
Worksheets(analysis_sheet & " Analysis").Columns(12).Copy Columns(12 + (5 * (i - 6)))

谢谢!

最佳答案

...different ways to shorten the code to two lines...

这是一个 1 行,它将从 Worksheets(analysis_sheet & "Analysis") 复制到 ActiveSheet

Worksheets(analysis_sheet & " Analysis").Columns("I:L").Copy Columns(9 + (5 * (i - 6)))

如果要复制到同一张纸,则将上面的代码更改为

Worksheets(analysis_sheet & " Analysis").Columns("I:L").Copy _
Worksheets(analysis_sheet & " Analysis").Columns(9 + (5 * (i - 6)))

编辑

That won't work because the OP is copying from columns 9 to 12 – freeflow 16 mins ago

No. In the term Columns(9/10/11/12 +(5*(i-6))) how does excel know how to update the 9 to 10,11,12 – freeflow 11 mins ago

假设 i 的值为 10,所以 9 + (5 * (i - 6)) = 29。同意吗?所以 Col I (9) 将被粘贴到 Col AC (29) 中。同样,Col J (10) 将作为 10 + (5 * (10 - 6)) = 30 发布到 Col AD​​ (30)等等……

这两段代码是一样的

Sub SampleA()
    Dim i As Long
    
    i = 10
    Sheet1.Columns(9).Copy Columns(9 + (5 * (i - 6)))
    Sheet1.Columns(10).Copy Columns(10 + (5 * (i - 6)))
    Sheet1.Columns(11).Copy Columns(11 + (5 * (i - 6)))
    Sheet1.Columns(12).Copy Columns(12 + (5 * (i - 6)))
End Sub

Sub SampleB()
    Dim i As Long
    
    i = 10

    Sheet1.Columns("I:L").Copy Sheet1.Columns(9 + (5 * (i - 6)))
End Sub

enter image description here

关于excel - 在 for 循环中复制列范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64985669/

相关文章:

vba - 转置大型数据集

arrays - 在 Excel 中将类型字符串数组复制到范围 - 限定符无效

excel - 防止 VBA 选择不同的工作表

带有数据循环的 SQL Server 2005 递归查询 - 这可能吗?

javascript - 使用循环在 JavaScript 中将行与列相乘

arrays - 从字典返回类属性的数组

excel - 仅对两列中的匹配值求和

vba - 有没有办法以编程方式读取宏描述?

excel - 从vba中的syslog文件中提取数据

c++ - 如何避免在同一行打印?