Доброго времени суток.
Пользователи форума попросили ясно выразить суть проблемы. Думаю следующее объяснение будет понятно
Нужно с помощью VBA посчитать суммы по определенным критериям.
Например, есть два поля: Категория и Кол-во. Напротив каждой категории есть кол-во.
Шапки 100 шт
Шарфы 150 шт
Шапки 78 шт
Брюки 20 шт
Шарфы 10 шт
Брюки 18 шт
В результате должно получится три ячейки с суммами по каждой категории, то есть:
Шапки 178
Шарфы 160
Брюки 38
Это своего рода очень похоже на сводную таблицу, но сводной пользоваться запрещено и задачу проделать нужно с помощью макроса с использованием вложенных циклов и предусмотреть возможность добавления новой категории, то есть например если появится новая категория то должна появится новая ячейка с суммой по этой категории (все в точности как в сводной). Специальными функциями в роде worksheet.sum пользоваться нельзя, все только через циклы.
С помощью гугла получилось сделать следующее, но как оказалось промежуточная сумма sum должна быть только одна, а не несколько, плюс я подозреваю тут есть много лишнего:) :
Очень надеюсь на вашу помощь.
Спасибо заранее.
Пользователи форума попросили ясно выразить суть проблемы. Думаю следующее объяснение будет понятно
Нужно с помощью VBA посчитать суммы по определенным критериям.
Например, есть два поля: Категория и Кол-во. Напротив каждой категории есть кол-во.
Шапки 100 шт
Шарфы 150 шт
Шапки 78 шт
Брюки 20 шт
Шарфы 10 шт
Брюки 18 шт
В результате должно получится три ячейки с суммами по каждой категории, то есть:
Шапки 178
Шарфы 160
Брюки 38
Это своего рода очень похоже на сводную таблицу, но сводной пользоваться запрещено и задачу проделать нужно с помощью макроса с использованием вложенных циклов и предусмотреть возможность добавления новой категории, то есть например если появится новая категория то должна появится новая ячейка с суммой по этой категории (все в точности как в сводной). Специальными функциями в роде worksheet.sum пользоваться нельзя, все только через циклы.
С помощью гугла получилось сделать следующее, но как оказалось промежуточная сумма sum должна быть только одна, а не несколько, плюс я подозреваю тут есть много лишнего:) :
| Код |
|---|
Private Sub CommandButton3_Click()
Dim i As Integer, j As Integer, k As Integer
Dim sumsc As Double
Dim sumc As Double
Dim sumf As Double
Dim iLastRow As Long
sumsc = 0
sumc = 0
sumf = 0
iLastRow = Cells(Rows.Count, 2).End(xlUp).Row
With Worksheets("Sheet1")
For i = 2 To iLastRow
If Cells(i, 1) = [E1] And IsNumeric(Cells(i, 2)) Then
sumsc = sumsc + Cells(i, 2)
End If
Next i
For j = 2 To iLastRow
If Cells(j, 1) = [F1] And IsNumeric(Cells(j, 2)) Then
sumc = sumc + Cells(j, 2)
End If
Next j
For k = 2 To iLastRow
If Cells(k, 1) = [G1] And IsNumeric(Cells(k, 2)) Then
sumf = sumf + Cells(k, 2)
End If
Next k
[E2] = sumsc
[F2] = sumc
[G2] = sumf
End With
End Sub |
Спасибо заранее.
Изменено: - 03.02.2018 14:17:49
(Доступное разьяснение проблемы)