Автор Тема: Excel VBA Макросы: Суммирование строк по условию.  (Прочитано 102 раз)

Оффлайн Monk

  • Посетитель форума
  • Сообщений: 2
Нужна помощь в создании кода.
Мне нужно задать 2 условия на столбик B, i<=6 и i>=22. И все значения, входящие в этот интервал, должны просуммироваться.
Данные на листе1, значение нужно вывести на лист2.

Оффлайн Администратор

  • Administrator
  • Сообщений: 1641
Re: Суммирование по условию
« Ответ #1 : 09 Июнь 2019, 10:33 »
Написал вам письмо на почту с заголовком "Письмо с форума". Написал именно на почту, а не на форум.

Оффлайн Администратор

  • Administrator
  • Сообщений: 1641
Макрос
Sub Макрос()

    Dim sh_src As Worksheet, sh_res As Worksheet
    Dim сумма As Double
    Dim lr As Long, lc As Long, i As Long
   
   
    '1. Присваиваем имена листам, с которым надо работать.
        ' Далее в коде будем обращаться к листам по этим именам.
        ' Может быть так будет удобнее писать и читать код.
    Set sh_src = Worksheets("Лист1")
    Set sh_res = Worksheets("Лист2")
   
    '2. Поиск последней строки и столбца на листе-источнике.
        ' End не ищет в скрытых строках и столбцах.
    ' Поиск последней строки на листе-источнике в столбце B.
    lr = sh_src.Cells(sh_src.Rows.Count, "B").End(xlUp).Row
    ' Поиск последнего столбца на листе-источнике в строке 2.
    lc = sh_src.Cells(2, sh_src.Columns.Count).End(xlToLeft).Column
   
    '3. Подсчёт суммы согласно заданию.
    For i = 3 To lr
        Select Case sh_src.Cells(i, "B").Value
            Case Is <= 6, Is >= 22
                сумма = сумма + WorksheetFunction.Sum(sh_src.Range(sh_src.Cells(i, "D"), sh_src.Cells(i, lc)))
        End Select
    Next i
   
    '4. Вставка суммы на лист-результат.
    sh_res.Range("C3").Value = сумма
   
    '5. Сообщение, чтобы юзер понял, что макрос завершил работу.
    MsgBox "Готово.", vbInformation

End Sub

Оффлайн Monk

  • Посетитель форума
  • Сообщений: 2
Большое спасибо. Код работает.

Оффлайн Администратор

  • Administrator
  • Сообщений: 1641
написал вам ещё письмо на почту (с другим содержимым)