Добрый день
Помогите чайнику
Даны первые две колонки
по номеклатуре "а" было 3 продажи кол-вом 1,2,3. надо посчитать общее кол-во проданного товара по всем номенклатурам и получить итоговый столбец 3. Кол-во продаж может быть разное.
Заранее спасибо.
Первый столбец -
a
b
d
c
Второй столбец -
1
2
3
3
3
1
2
3
1
1
1
Третий столбец (который необходимо получить)
6
12
2
1
Суммировать пока не "условие"
Модератор: Naeel Maqsudov
Можно применить пользовательскую функцию
1-й аргумент - имя по номенклатуре (что ищем).
2-й аргумент - диапазон, содержащий эти имена.
3-й аргумент - диапазон суммирования.
Пример использования см. во вложении. 1-й аргумент можно задавать как ссылкой (см. формулу в ячейке "C1"), так и значением (см. формулу в ячейке "C4").
Код: Выделить всё
Function CountNom(Nom As String, rng As Range, Sales As Range) As Long
Dim x As Range, i As Long
If Nom = "" Then Exit Function
Set x = rng.Find(what:=Nom, LookAt:=xlWhole)
If x Is Nothing Then
CountNom = 0
Else
i = x.End(xlDown).Row
CountNom = Application.Sum(Intersect(Rows(x.Row & ":" & x.End(xlDown).Row - 1), Sales))
End If
End Function
2-й аргумент - диапазон, содержащий эти имена.
3-й аргумент - диапазон суммирования.
Пример использования см. во вложении. 1-й аргумент можно задавать как ссылкой (см. формулу в ячейке "C1"), так и значением (см. формулу в ячейке "C4").
-
- Сообщения: 4
- Зарегистрирован: 26 мар 2011, 01:50
Вы просто мой спаситель!!!! Огромное спасибо!!!!
Завтра удивлю начальство)))
Завтра удивлю начальство)))
-
- Сообщения: 4
- Зарегистрирован: 26 мар 2011, 01:50
Правда возникли небольшие трудности, если по номенклатуре была одна продажа.
См. Книга1.xls
См. Книга1.xls
- Вложения
-
- Книга1..zip
- (9.46 КБ) 54 скачивания
Да. Вы правы. То, что по одной продаже может быть две номенклатуры подряд, этот момент функция не учитывала. Измените ее на следующую:
Код: Выделить всё
Function CountNom(Nom As String, rng As Range, Sales As Range) As Long
Dim x As Range, i As Long
If Nom = "" Then Exit Function
Set x = rng.Find(what:=Nom, LookAt:=xlWhole)
If x Is Nothing Then
CountNom = 0
Else
i = IIf(x.Offset(1) = "", x.End(xlDown).Row, x.Offset(1).Row)
CountNom = Application.Sum(Intersect(Rows(x.Row & ":" & i - 1), Sales))
End If
End Function
-
- Сообщения: 4
- Зарегистрирован: 26 мар 2011, 01:50
Спасибо огромное, все работает как часы))) Надо потихоньку осваивать VBA. Чтобы я без Вас делал?))