Цикл Excel VBA Вставить строку на основе значения ячейки - PullRequest
0 голосов
/ 06 марта 2019

Я много пытался заставить цикл сделать это, но я не могу заставить его работать.Кто-нибудь есть идея, я могу попробовать, это работает, но это очень грязный код?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range

Set KeyCells = Range("D2")

Range("D3:D23").ClearContents

If Range("D25").Value >= 2 Then Range("D3").Value = Range("D2").Value + 1
If Range("D25").Value >= 3 Then Range("D4").Value = Range("D3").Value + 1
If Range("D25").Value >= 4 Then Range("D5").Value = Range("D4").Value + 1
If Range("D25").Value >= 5 Then Range("D6").Value = Range("D5").Value + 1
If Range("D25").Value >= 6 Then Range("D7").Value = Range("D6").Value + 1
If Range("D25").Value >= 7 Then Range("D8").Value = Range("D7").Value + 1
If Range("D25").Value >= 8 Then Range("D9").Value = Range("D8").Value + 1
If Range("D25").Value >= 9 Then Range("D10").Value = Range("D9").Value + 1
If Range("D25").Value >= 10 Then Range("D11").Value = Range("D10").Value + 1
If Range("D25").Value >= 11 Then Range("D12").Value = Range("D11").Value + 1
If Range("D25").Value >= 12 Then Range("D13").Value = Range("D12").Value + 1
If Range("D25").Value >= 13 Then Range("D14").Value = Range("D13").Value + 1
If Range("D25").Value >= 14 Then Range("D15").Value = Range("D14").Value + 1
If Range("D25").Value >= 15 Then Range("D16").Value = Range("D15").Value + 1
If Range("D25").Value >= 16 Then Range("D17").Value = Range("D16").Value + 1
If Range("D25").Value >= 17 Then Range("D18").Value = Range("D17").Value + 1
If Range("D25").Value >= 18 Then Range("D19").Value = Range("D18").Value + 1
If Range("D25").Value >= 19 Then Range("D20").Value = Range("D19").Value + 1
If Range("D25").Value >= 20 Then Range("D21").Value = Range("D20").Value + 1
If Range("D25").Value >= 21 Then Range("D22").Value = Range("D21").Value + 1
If Range("D25").Value >= 22 Then Range("D23").Value = Range("D22").Value + 1

End If

End Sub

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

без петли (не проверено):

...
If Range("D25").Value >= 2 Then
    Range("D3").Resize(Int(Range("D25").Value) - 1).Formula = "=D$2 + (ROW() - 2)"
End If
0 голосов
/ 06 марта 2019

Игнорирование проблемы с событием изменения (это, кажется, другой вопрос, и поиск на этом сайте даст вам ответы на ваши вопросы).Вам нужно взглянуть на паттерны вашей логики.

Предполагая, что D25 может быть только целым числом от 2 до 22 включительно, попробуйте:

Dim i as long
For i = 2 to Range("D25").Value
    Range("D" & i + 1).Value = Range("D" & i).Value + 1
Next i

Тем не менее, как @W-hit сказал, что было бы полезно узнать, чего вы пытаетесь достичь, поскольку мы вполне можем столкнуться с проблемой XY здесь

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