Код VBA, который будет вычитать число из одной строки в нескольких столбцах - PullRequest
0 голосов
/ 14 февраля 2020

enter image description here

У меня есть такой лист, он спускается на множество строк, но это всего лишь фрагмент. Я хочу, чтобы пользователь ввел значение, назвал его «x», и в первой строке, начиная с марта, я хочу вычесть «x» из значения в марте. Если в марте значение в марте становится равным 0, я хочу перейти к февралю и вычесть любую сумму, оставшуюся в X с февраля. Это продолжается до тех пор, пока мы не достигнем января.

Остановитесь, если x равен 0 или если больше не осталось вычесть из марта, февраля и января. С января по март значения не могут go ниже 0. У меня есть опыт кодирования в python, но я не знаком с синтаксисом VBA. Моя проблема связана с аспектом рекурсии.

Sub variance_sub()

Dim reduce As Double

reduce = InputBox("what is the Variance required?")

If reduce = 0 Then

    MsgBox ("No further action required")

ElseIf reduce > 0 Then

    subtraction_factor = Range("T7").Value

    Range("T7").Value = WorksheetFunction.Max(Range("T7").Value - reduce, 0)

    reduce = WorksheetFunction.Max(reduce - subtraction_factor, 0)

Else

    Range("T7").Value = Range("T7").Value + reduce

End If

End Sub

1 Ответ

0 голосов
/ 15 февраля 2020

Здесь просто l oop - рекурсия не требуется:

Sub variance_sub()

    Dim reduce As Double, c As Range, diff As Double

    reduce = InputBox("what is the Variance required?")

    Set c = ActiveSheet.Range("T7") 'march cell

    If reduce = 0 Then
        MsgBox "No further action required"
    ElseIf reduce > 0 Then
        Do
            If c.Value >= reduce Then
                c.Value = c.Value - reduce
                reduce = 0
            Else
                diff = reduce - c.Value
                c.Value = 0
                reduce = diff
            End If
            If c.Column > 1 Then Set c = c.Offset(0, -1) 'move left if we can
        Loop While reduce > 0 And c.Column >= 18
    Else
        c.Value = c.Value + reduce
    End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...