Excel VBA – 将一行单元格值传递给数组,然后将该数组粘贴到单元格的相对引用

使用Excel(2010)VBA,我试图复制(传递)一个恒定范围的单元格(其值重新计算)到一个数组。 然后我试图将这个数组传递给它下面一个新的单元格区域。 在完成这个之后,我想再次将常量范围的新值复制(传递)到数组中,并将这些新值传递到之前传递的值的正下方。

我知道这个代码是非常残酷的(我是VBA中的数组的新手)。

Sub ARRAYER() Dim anARRAY(5) As Variant Number_of_Sims = 10 For i = 1 To Number_of_Sims anARRAY = Range("C4:G4") Range("C4").Select ActiveCell.Offset(Number_of_Sims, 0).Select ActiveCell = anARRAY Range("C4").Select Next End Sub 

我当然感谢你的帮助!

谢谢。

尊敬,

乔纳森

你在这里有一些小事情,所以希望以下的帮助。

首先,你不需要select范围来访问他们的属性,你可以指定他们的地址等等。其次,除非你正在操作范围内的值,你实际上并不需要将它们设置为变体。 如果你想操纵这些值,你可以省略数组的边界,因为当你定义范围的时候它将被设置。

在模块的顶部使用Option Explicit来强制variables声明也是一个很好的做法。

以下将做你以后的事情:

 Sub ARRAYER() Dim Number_of_Sims As Integer, i As Integer Number_of_Sims = 10 For i = 1 To Number_of_Sims 'Do your calculation here to update C4 to G4 Range(Cells(4 + i, "C"), Cells(4 + i, "G")).Value = Range("C4:G4").Value Next End Sub 

如果你想操纵数组中的值,那么做到这一点:

 Sub ARRAYER() Dim Number_of_Sims As Integer, i As Integer Dim anARRAY as Variant Number_of_Sims = 10 For i = 1 To Number_of_Sims 'Do your calculation here to update C4 to G4 anARRAY= Range("C4:G4").Value 'You can loop through the array and manipulate it here Range(Cells(4 + i, "C"), Cells(4 + i, "G")).Value = anARRAY Next End Sub 

不需要arrays。 只要使用这样的东西:

 Sub ARRAYER() Dim Rng As Range Dim Number_of_Sims As Long Dim i As Long Number_of_Sims = 10 Set Rng = Range("C4:G4") For i = 1 To Number_of_Sims Rng.Offset(i, 0).Value = Rng.Value Worksheets("Sheetname").Calculate 'replacing Sheetname with name of your sheet Next End Sub 

由于您正在将相同的数据复制到所有行,所以实际上并不需要循环。 尝试这个:

 Sub ARRAYER() Dim Number_of_Sims As Long Dim rng As Range Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Number_of_Sims = 100000 Set rng = Range("C4:G4") rng.Offset(1, 0).Resize(Number_of_Sims) = rng.Value Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub 

当我尝试你的代码我得到了错误,当我想填补arrays。

你可以尝试像这样填充数组。

 Sub Testing_Data() Dim k As Long, S2 As Worksheet, VArray Application.ScreenUpdating = False Set S2 = ThisWorkbook.Sheets("Sheet1") With S2 VArray = .Range("A1:A" & .Cells(Rows.Count, "A").End(xlUp).Row) End With For k = 2 To UBound(VArray, 1) S2.Cells(k, "B") = VArray(k, 1) / 100 S2.Cells(k, "C") = VArray(k, 1) * S2.Cells(k, "B") Next End Sub