VBA / Excelmacros – 尝试使用从一个工作表绘制并填充到多个工作表的数组来简化代码

我最初做的工作,但它很笨重,我很确定可以精简。 这是代码的一小部分(我重复了这个过程大约200次以上,我不得不把它分成两个macros):

Set rng = ws.Range("C11:AJ11") l = 13 For Each cell In rng Sheets(l).Range("D23") = cell.Value Sheets(l).Range("I23") = cell.Value l = l + 1 Next cell Set rng = ws.Range("C12:AJ12") l = 13 For Each cell In rng Sheets(l).Range("D24") = cell.Value Sheets(l).Range("I24") = cell.Value l = l + 1 Next cell 

所以这个工作,但现在我想弄清楚如何使用一个数组,可能精简(如果这是可能的?或者一个数组不是最好的方法吗?我很乐意提供更好的方法build议。):

 Dim row As Range Dim rng As Range, cell As Range Dim TestArray() As Variant TestArray = Range("C10:AJ54") l = 13 For Each cell In TestArray Sheets(l).Range("D22:D66") = cell.Value Sheets(l).Range("I22:I66") = cell.Value l = l + 1 Next cell 

所以我得到了“编译错误:对于数组上的每个控制variables都必须是Variant”,我已经看过,但是我不完全确定如何纠正它。 我也担心我不会以我想要的正确顺序填充表单。 它应该一次拉一行,并且一个单元格,以便每张纸首先。 然后它应该进入activesheet的下一行,并从该行的每个单元格中取值,并在每个表格中依次放置一个值等。

我希望这是我所问的很多细节,但如果不是,我很乐意尝试解释更多:)

做另一个循环遍历行的外部循环:

 Sub foo() Dim i As Long Dim rng As Range Dim l As Long Dim cell As Range For i = 10 To 54 Set rng = ws.Range("C" & i & ":AJ" & i) l = 13 For Each cell In rng Sheets(l).Range("D" & 12 + i) = cell.Value Sheets(l).Range("I" & 12 + i) = cell.Value l = l + 1 Next cell Next i End Sub 

如果你想使用一个数组,那么你仍然需要循环两次:

 Sub foo() Dim i As Long Dim rng As Range Dim l As Long Dim j As Long Dim testArr() As Variant Dim outarr() As Variant testArr = ActiveSheet.Range("C10:AJ54") ReDim outarr(LBound(testArr, 1) To UBound(testArr, 1)) As Variant For j = LBound(testArr, 2) To UBound(testArr, 2) l = 13 For i = LBound(testArr, 1) To UBound(testArr, 1) outarr(i) = testArr(i, j) Next j Sheets(l).Range("D22").Resize(UBound(outarr)).Value = outarr Sheets(l).Range("I22").Resize(UBound(outarr)).Value = outarr l = l + 1 Next i End Sub 

该arrays将会更快,因为它只与尽可能less的次数交互。