VBA - 循环数组,为不同的数组赋值

时间:2016-11-29 23:34:05

标签: arrays excel vba excel-vba

我根据Excel表单中的范围创建了两个数组: AdjustedProductionValues, ProductionTargetValues

我正在创建第三个数组来保存新值: FinalProductionValues

我想循环调整AdjustedProductionValues;如果值为0,我想将ProductionTargetValues的值赋给新的数组FinalProductionValues。否则,我想将AdjustedProductionValues的值赋给FinalProductionValues。

我不断收到下标超出范围的错误。我以不同的方式尝试过ReDim但没有成功。我在If语句中得到错误。

我该如何解决这个问题?

Sub TEST()

    Dim AdjustedProductionValues()          As Variant
    Dim ProductionTargetValues()            As Variant
    Dim FinalProductionValues()             As Variant
    ReDim FinalProductionValues(1 To 1)     As Variant
    Dim i                                   As Integer

    'Assigning Adjusted Production and Production Target numbers into lists
    Worksheets("SUMMARY").Activate

    AdjustedProductionValues = Range(Range("E35"), Range("E35").End(xlToRight))
    ProductionTargetValues = Range(Range("E34"), Range("E34").End(xlToRight))

    'checking each Adjusted Production value
    'if it's 0 then assigns the Adjusted Production value to a new list
    'if it's not 0 it assignes the Production Target to the new list

    For i = 0 To UBound(AdjustedProductionValues)
        ReDim Preserve FinalProductionValues(1 To UBound(FinalProductionValues) + 1) As Variant
        If AdjustedProductionValues(i) = 0 Then
            FinalProductionValues(UBound(FinalProductionValues)) = ProductionTargetValues(i)
        Else
            FinalProductionValues(UBound(FinalProductionValues)) = AdjustedProductionValues(i)
        End If
    Next i

End Sub

更新W / FIX 我修改了我的代码:

For i = 1 To UBound(AdjustedProductionValues, 2)
    ReDim Preserve FinalProductionValues(1 To UBound(FinalProductionValues) + 1) As Variant
    If AdjustedProductionValues(1, i) = 0 Then
        FinalProductionValues(UBound(FinalProductionValues)) = ProductionTargetValues(1, i)
    Else
        FinalProductionValues(UBound(FinalProductionValues)) = AdjustedProductionValues(1, i)
    End If
Next i

我使用以下内容检查了我的工作:

Worksheets("Sheet2").Activate
Dim NumRows As Long
Dim NumCols As Long
NumRows = 1
NumCols = UBound(FinalProductionValues, 1) - LBound(FinalProductionValues, 1) + 1
Range("A1").Resize(NumRows, NumCols).Value = FinalProductionValues

通过this link.

帮助检查我的代码

0 个答案:

没有答案