Как мне заполнить ряд в VBA от большего числа к другому?

#excel #vba #excel-formula

#excel #vba #excel-формула

Вопрос:

Я пытаюсь заполнить ряд от большего числа в ячейке G2 (например, «512») до меньшего числа в ячейке H2 (например, «500»). Мне нужно, чтобы код VBA выполнялся в столбце J, создавая следующий этот ряд в качестве примера 512, 511, 510, 509, 508 … вниз по столбцу.

Вот скриншот, который описывает, что мне нужно введите описание изображения здесь

Большинство примеров, которые я нашел, похоже, построены для возрастающего ряда (512, 513, 514….)

Любая помощь, чтобы сделать это правильно, будет полезна

Комментарии:

1. Есть так много способов сделать это. Один из способов — вычесть единицу из ячейки выше. Итак, J3 содержит = J2 - 1 . Не уверен, что вы ищете. Кроме того, в тексте вашего сообщения указан код VBA, в то время как сообщение помечено формулой excel. Пожалуйста, выберите один. Я предполагаю, что вам, вероятно, не нужен тег.

2. Я использовал это для цикла, но я думаю, что ответ Криса тоже работает нормально

3. Пожалуйста, не публикуйте код в комментариях. Отредактируйте свой вопрос и опубликуйте то, что вы пробовали.

Ответ №1:

Для общего решения VBA попробуйте следующее

 Sub CreateSequence(StartValue As Long, EndValue As Long, OutputStart As Range, Optional ByVal StepBy As Long = 1)
    Dim NumValues As Long
    Dim dat As Variant
    Dim i As Long
    
    StepBy = Abs(StepBy)
    If StepBy <= 0 Then Exit Sub
    NumValues = Abs(StartValue - EndValue)  StepBy   1
    ReDim dat(1 To NumValues, 1 To 1)
    
    For i = 0 To NumValues - 1
        dat(i   1, 1) = StartValue   i * IIf(StartValue > EndValue, -StepBy, StepBy)
    Next
    
    OutputStart.Resize(UBound(dat, 1), 1).Value = dat
End Sub
  

Используйте это так

 Sub Demo()
    CreateSequence Range("G2").Value, Range("H2").Value, Range("K2")
End Sub
  

Решение по формуле (версия 365 Excel)

 =SEQUENCE(G2-H2 1,1,G2,-1)
  

Ответ №2:

 hlRange = Sheets(2).Cells(2, 7).Value - Sheets(2).Cells(2, 8).Value   1

' Fill series from max to min value
For j = 1 To hlRange
    Sheets(2).Cells(j   1, 10).Value = Sheets(2).Cells(2, 7).Value - j   1
Next j
  

Ответ №3:

Вы можете использовать следующий код, он позволяет добавлять значения a для указания шагов, которые вы хотите выполнить.

https://i.stack.imgur.com/vSan5.jpg

 Sub createNumList()
Dim i As Integer
Dim count As Integer
Dim cellValue As Integer

count = (ActiveSheet.Cells(2, 1).Value - ActiveSheet.Cells(2, 2).Value) / ActiveSheet.Cells(2, 3).Value

For i = 1 To count   1
    If i = 1 Then
        ActiveSheet.Cells(i   2, 5).Value = ActiveSheet.Cells(2, 1).Value
    Else
        ActiveSheet.Cells(i   2, 5).Value = ActiveSheet.Cells(i   1, 5).Value - ActiveSheet.Cells(2, 3).Value
    End If
Next i
  

End Sub