我正在运行以下运行良好的代码,但我找不到任何解决方案来简化它。已尝试以多种不同方式重新排列语法以将代码缩短为两行,但它们似乎不起作用,任何人都可以建议如何简化此代码:
'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
关于excel - 在 for 循环中复制列范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64985669/