Arrays 如何使用阵列加速此过程?
我想将两个计算值分配并存储到数组中的单个场景(“I”)。然后,一旦循环完成,我想在一列中转储其中一个值(对于每个“I”),在另一列中转储另一个值。如果你看“UI”,这就是我想要基本上完成的,但我希望它们在循环完成后立即吐出,而不是每个循环一次吐出一个。我听说阵列是最好/最快的方法,但我甚至不知道如何使用阵列 谢谢Arrays 如何使用阵列加速此过程?,arrays,excel,vba,Arrays,Excel,Vba,我想将两个计算值分配并存储到数组中的单个场景(“I”)。然后,一旦循环完成,我想在一列中转储其中一个值(对于每个“I”),在另一列中转储另一个值。如果你看“UI”,这就是我想要基本上完成的,但我希望它们在循环完成后立即吐出,而不是每个循环一次吐出一个。我听说阵列是最好/最快的方法,但我甚至不知道如何使用阵列 谢谢 Sub Test_Scenarios() Dim i As Long, Scenario_Count As Long Dim j As Integer
Sub Test_Scenarios()
Dim i As Long, Scenario_Count As Long
Dim j As Integer
'Delete current values on "Testing Output" tab
Sheets("Testing Output").Range("B1:B3").ClearContents
Sheets("Testing Output").Range("A6:AA1000000").ClearContents
'Test scenarios
Scenario_Count = Sheets("Testing Input").Range("B1").Value
For i = 1 To Scenario_Count
For j = 1 To 2
If j = 1 Then Sheets("AA").Range("ZC").Value = "No"
If j = 2 Then Sheets("AA").Range("ZC").Value = "Yes"
Calculate
'UI
If j = 1 Then Sheets("Testing Output").Range("R" & 5 + i).Value = Sheets("User Input").Range("B26").Value
If j = 2 Then Sheets("Testing Output").Range("S" & 5 + i).Value = Sheets("User Input").Range("B26").Value
Next j
Next i
End Sub
有一个很好的讨论使用数组来处理Excel范围,但我将在这里介绍一些基础知识 要将Excel范围中的数据读取到数组中,请执行以下操作:
Dim Arr() As Variant
Arr = Range("A1:B10")
要将数组中的数据写入Excel范围,请执行以下操作:
Range("E1:F10").Value = Arr
将数组写入范围时,数组的大小必须与范围的大小匹配。您可以使用UBound检查阵列的大小:
myRange.Resize(UBound(Arr, 1), UBound(Arr, 2))
可以通过指定每个维度中的位置来访问数组中的数据:
Arr(2, 3) = 7
由于有关问题的额外信息而进行编辑:
下面的示例创建一个空数组,并根据场景数调整其大小,然后在循环中存储值。循环完成后,循环中的值将写入输出范围:
Option Base 1
Sub Test_Scenarios()
Dim i As Long, Scenario_Count As Long
Dim j As Integer
'Delete current values on "Testing Output" tab
Sheets("Testing Output").Range("B1:B3").ClearContents
Sheets("Testing Output").Range("A6:AA1000000").ClearContents
'Test scenarios
Scenario_Count = Sheets("Testing Input").Range("B1").Value
Dim arr() As Variant
ReDim arr(Scenario_Count, 2)
Dim outputRange As Range
Set outputRange = Sheets("Testing Output").Range("R5")
Set outputRange = outputRange.Resize(Scenario_Count, 2)
For i = 1 To Scenario_Count
For j = 1 To 2
'Calculate
Sheets("User Input").Range("B26").Value = Sheets("User Input").Range("B26").Value + i + j
'UI
arr(i, j) = Sheets("User Input").Range("B26").Value
Debug.Print "i: " & i & " j: " & j & " value: " & arr(i, j)
Next j
Next i
outputRange.Value = arr
End Sub
循环仍在读取和写入电子表格,因为我们没有关于计算的任何其他信息 在你的问题中添加一个标签,说明你在问哪种语言会有帮助,因为许多编程语言都有数组。我了解你提供的所有基础知识,我也做了很多研究。我只是不知道如何制作一个与我拥有的数据相对应的数组。大多数发布的示例都很容易理解,但它们似乎并没有达到我想要的效果。不过我感谢你的帮助@抱歉,当你提到你不知道如何使用数组时,我误解了。你能再解释一下你需要从哪里获取数据,需要在哪里写出数据吗?没问题,我没有解释自己是错的。是的,所以我有一个包含多页数据的工作簿。通过一个大的过程,我得出了一个基于我运行的场景所需的计算/速率。每个场景(“i”)都有更改该计算的特定标准。对于我运行的每个场景,我需要两个不同的速率(“j=1,j=2”)。我想知道是否有一种方法可以使用数组来存储每个场景的这两个速率,并在循环完成后在两个不同的范围内一次将它们全部吐出。现在,利率是一次吐出一个场景。当我说吐出时,我的意思是写在excel表格上。我在测试期间运行了接近90000个场景。每个场景都有点不同,需要两个单独的计算/速率。我的目标是加快测试速度,提高测试效率。我听说数组有助于做到这一点。数组是数据容器,你把数据放在数组中,处理它,然后从数组中取出数据。我不知道你在想什么数组,但通常你不会把你的变量放在数组中,除非你有一个完整的变量表。如果不知道“计算”过程是什么,就不可能给出代码的数组版本,因为这是必须为数组添加的部分。