我想将两个计算值分配并存储到数组中的单个场景(“i”)。然后,我希望在循环完成后,将其中一个值(对于每个“i”)转储到一列中,将另一个值转储到另一列中。如果你看看'UI,那就是我想要实现的目标,但我想让它们在循环完成后立即吐出,而不是每次吐出一个。我听说阵列是最好/最快的方法,但我不知道如何使用它。
由于
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
答案 0 :(得分:0)
在http://www.cpearson.com/excel/ArraysAndRanges.aspx上使用数组与Excel范围进行了很好的讨论,但我会在这里介绍一些基础知识。
要将Excel范围内的数据读入数组:
Dim Arr() As Variant
Arr = Range("A1:B10")
将数组中的数据写入Excel范围:
Range("E1:F10").Value = Arr
将数组写回范围时,数组的大小必须与Range的大小相匹配。您可以使用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
循环仍在读取和写入电子表格,因为我们没有任何有关计算的其他信息。