VBA - ищу решение для моего простого вычисления суммы цикла Dynami c - PullRequest
0 голосов
/ 30 мая 2020

Я новичок, пытаюсь изучить VBA. У меня зацикленный вопрос: у меня есть простой набор чисел, сгруппированных в ряды по три. Я надеюсь суммировать их по отдельности в столбце f. Как я могу создать динамический c диапазон, чтобы через него l oop получить итоги?

макет и работа ниже - я тоже не думаю, что моя формула диапазона Dynami c верна. Любая помощь приветствуется:

basi c тестовые данные

Sub testing1000b()

Dim rng As Range
Dim lAnswer As Long
Dim lastrow As Long
Dim firstrow As Long

Dim addrow As Long

Range("e:f").ClearContents
addrow = 6
firstrow = Range("b" & addrow).Row
lastrow = Range("b" & firstrow).End(xlDown).Row
Range("b & firstrow" & "b & lastrow") = rng
lAnswer = WorksheetFunction.Sum(rng)
Range("f6").Value = lAnswer

End Sub

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Вы можете создать динамический диапазон c с помощью приведенного ниже кода. Вам нужно использовать [Set], когда объект присваивается переменной.

Set rng = Range("b" & firstrow & ":" & "b" & lastrow)

это пример кода.

Sub testing1000b()

  Dim rng As Range
  Dim lAnswer As Long
  Dim lastrow As Long
  Dim firstrow As Long

  Dim addrow As Long: addrow = 6

  Range("e:f").ClearContents

  firstrow = Range("b" & addrow).Row
  lastrow = Range("b" & firstrow).End(xlDown).Row

  For i = 0 To 3
    Set rng = Range("b" & firstrow & ":" & "b" & lastrow)
    Range("f" & firstrow) = WorksheetFunction.Sum(rng)
    firstrow = Range("b" & lastrow).End(xlDown).Row
    lastrow = Range("b" & firstrow).End(xlDown).Row
  Next i

End Sub
0 голосов
/ 30 мая 2020

Суммирование последовательных ячеек

Sub SumConsecutive()

    Const SourceCol As Long = 2
    Const ResultCol As Long = 6
    Const InitialRow As Long = 6
    Const Consecutive As Long = 3

    Dim rng As Range
    Dim FirstRow As Long
    Dim LastRow As Long
    Dim Result As Long
    Dim RowDiff As Long

    Columns(ResultCol).ClearContents

    FirstRow = InitialRow
    LastRow = Cells(FirstRow, SourceCol).End(xlDown).Row
    RowDiff = LastRow - FirstRow

    Do Until RowDiff <> Consecutive - 1
        Set rng = Range(Cells(FirstRow, SourceCol), Cells(LastRow, SourceCol))
        Result = WorksheetFunction.Sum(rng)
        Cells(FirstRow, ResultCol).Value = Result
        FirstRow = Cells(LastRow, SourceCol).End(xlDown).Row
        LastRow = Cells(FirstRow, SourceCol).End(xlDown).Row
        RowDiff = LastRow - FirstRow
    Loop

    MsgBox "Done"

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