写入更短的For Loop for Array

时间:2014-08-19 16:22:42

标签: excel-vba vba excel

我写了以下For Loop来将几个范围从一个工作表复制并粘贴到另一个工作表。我用了一个数组。程序运行正常,但我一直在寻找一种更短的方法来做同样的事情。

Dim copyRange(1 To 3) As String
Dim pasteRange(1 To 3) As String
Dim refRange(1 To 3) As String
Dim i As Long

copyRange(1) = "A5"
copyRange(2) = "G5"
copyRange(3) = "H5"

refRange(1) = "A"
refRange(2) = "G"
refRange(3) = "H"

pasteRange(1) = "BE3"
pasteRange(2) = "CA2"
pasteRange(3) = "CD2"

For i = 1 To 3

         refApplicantFlow.Range(copyRange(i), refApplicantFlow.Range(refRange(i) & Rows.Count).End(xlUp)).Copy _
            calcCalculations.Range(pasteRange(i))

Next i

2 个答案:

答案 0 :(得分:2)

首先,我强烈建议将对单元格的引用存储为宏中的硬编码字符串。在您的工作簿结构略微调整的那一刻,您的宏将失败/复制错误的东西!

相反,使用命名范围。即点击A5并为其指定名称Source_1左右。 G5将成为Source_2H5 Source_1G5 Target_1等。

使用此代码:

lngRows = Rows.Count
For i = 1 To 3
   Range("Target_"&i).Resize(lngRows).Value = Range("Source_"&i).Resize(lngRows).Value
Next

这样,即使工作簿结构发生变化,您的宏仍然可以正常工作!你的代码行变短了! ; - )

答案 1 :(得分:0)

如果意图是包含循环和数组,那么你的宏非常有效。同样的事情可以用3行完成:

refApplicantFlow.Range("A5", refApplicantFlow.Range("A" & Rows.Count).End(xlUp)).Copy _
calcCalculations.Range("BE3")
refApplicantFlow.Range("G5", refApplicantFlow.Range("G" & Rows.Count).End(xlUp)).Copy _
calcCalculations.Range("CA2")
refApplicantFlow.Range("H5", refApplicantFlow.Range("H" & Rows.Count).End(xlUp)).Copy _
calcCalculations.Range("CD2")