Как я могу усечь эти блоки кода в один вложенный цикл for? - PullRequest
1 голос
/ 19 апреля 2019

У меня есть 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 ]

2 голосов
/ 19 апреля 2019

Я думаю, что этот код должен помочь:

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
2 голосов
/ 19 апреля 2019

Поместите значения в массив:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...