如何将这些代码块截断为一个嵌套的for循环?

时间:2019-04-19 13:25:12

标签: excel vba algorithm if-statement

我有4个代码块,它们从一行中获取值并进行偏移+1, +2, +3, +4并将这些单元格下的值相乘(跨3列)。

该代码采用我在工作表2中列出的值,并根据rIterator变量(仅显示我需要更新的唯一键)进行更新。

输入初始值后,必须进行偏移乘法。我该如何截断它:

        wsA.Cells(fndRow, 3).Value = rIterator.Offset(, 2).Value
        wsA.Cells(fndRow, 4).Value = rIterator.Offset(, 3).Value
        wsA.Cells(fndRow, 5).Value = rIterator.Offset(, 4).Value

        wsA.Cells(fndRow + 1, 3).Value = rIterator.Offset(, 2).Value * 1.1
        wsA.Cells(fndRow + 1, 4).Value = rIterator.Offset(, 3).Value * 1.1
        wsA.Cells(fndRow + 1, 5).Value = rIterator.Offset(, 4).Value * 1.1

        wsA.Cells(fndRow + 2, 3).Value = rIterator.Offset(, 2).Value * 1.15
        wsA.Cells(fndRow + 2, 4).Value = rIterator.Offset(, 3).Value * 1.15
        wsA.Cells(fndRow + 2, 5).Value = rIterator.Offset(, 4).Value * 1.15

        wsA.Cells(fndRow + 3, 3).Value = rIterator.Offset(, 2).Value * 1.2
        wsA.Cells(fndRow + 3, 4).Value = rIterator.Offset(, 3).Value * 1.2
        wsA.Cells(fndRow + 3, 5).Value = rIterator.Offset(, 4).Value * 1.2

        wsA.Cells(fndRow + 4, 3).Value = rIterator.Offset(, 2).Value * 1.3
        wsA.Cells(fndRow + 4, 4).Value = rIterator.Offset(, 3).Value * 1.3
        wsA.Cells(fndRow + 4, 5).Value = rIterator.Offset(, 4).Value * 1.3

变成类似的东西:

        For i = 0 To 4
            For j = 3 To 5
                wsA.Cells(fndRow + i, j).Value = rIterator.Offset(, j - 1).Value
            Next j
        Next i

仅执行某种Case语句来处理偏移量之前的原始值的1.1 1.15 1.2 1.3乘数?

可以根据需要提供其余代码

worksheet example

编辑:理想情况下,我希望它看起来像这样

        For i = 0 To 4
            For j = 3 To 5
            Select Case i
              Case 0
                j = 1
              Case 1
                j = 1.1
              Case 2
                j = 1.15
              Case 3
                j = 1.2
              Case 4
                j = 1.3
            End Select
            wsA.Cells(fndRow, 3 + i).Value = rIterator.Offset(, 2).Value * j
            Next j
        Next i

但那里不是100%

2 个答案:

答案 0 :(得分:2)

将值放入数组中

Dim multplr as Variant
multplr = array(1,1.1,1.15,1.2,1.3)

然后在基于i的结束通话中

wsA.Cells(fndRow + i, j).Value = rIterator.Offset(, j - 1).Value * multplr(i)

答案 1 :(得分:2)

我认为这段代码可以解决问题:

Dim multiplier(0 To 4) As Double
multiplier(0) = 1
multiplier(1) = 1.1
multiplier(2) = 1.15
multiplier(3) = 1.2
multiplier(4) = 1.3

For i = 0 To 4
    For j = 3 To 5
        wsA.Cells(fndRow + i, j).Value = rIterator.Offset(, j - 1).Value * multiplier(i)
    Next j
Next i