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