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

标签 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%

最佳答案

将值放入数组中:

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)

关于excel - 如何将这些代码块截断为一个嵌套的 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55762584/

相关文章:

vba - Excel VBA For-Loop 仅在 Debug模式下运行

excel - VBA:Sub Workbook_BeforeClose 用于删除数据

excel - 关于没有错误的错误 VBA 行事件

c++ - 图形硬件上的最近邻搜索

algorithm - 通过矩形网格的两条路径的最大赏金

excel - 如何在azure数据工厂中将excel文件转换为csv

excel - 在 Excel 中将范围传递给迷你图

c# - 使用 OpenXML 读取列中的 Excel 工作表数据

vba - 从行数组填充列表框

c - 垂直翻转位图图像(一维数组)