如何使用阵列加速此过程?

时间:2015-07-06 15:28:21

标签: arrays excel-vba vba excel

我想将两个计算值分配并存储到数组中的单个场景(“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

1 个答案:

答案 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

循环仍在读取和写入电子表格,因为我们没有任何有关计算的其他信息。