Разбить данные на группы в Excel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Карамелька
Сообщения: 1
Зарегистрирован: 13 июн 2006, 18:56

Как можно разбить данные на несколько групп, удовлетворяющих определенным условиям (ограничения наложены на один из столбцов таблицы) и подсчитать количество строк в каждой группе?Как можно это сделать с помощью функции "ЕСЛИ"?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Отсортируйте таблицу по ключевому столбцу и воспользуйтесь меню Данные/Итоги.
Как таковая функция ЕСЛИ вам не подойдет (она работает с одной сторокой).

Если хотите просто подвессти итоги (не изменяя самой таблицы), то сформулируйте условия разбиения на группы (в одном столбце) а рядом используйте функцию СЧЕТЕСЛИ, чтобы получить количество для каждой группы.

см справку по функции СЧЕТЕСЛИ
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Предлагаю разбить ваши данные с помощью автофильтра, затем дать полученным диапазонам - имена

Действия...
1. включить автофильтр для вашей таблицы
2. записать все критерии с помощью редактора макросов, чтобы получить строчки определения критерия автофильтром
(по сути можно их сформировать и руками)

Код: Выделить всё

Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 14.06.2006 (HomePC)
'
    Selection.AutoFilter Field:=1, Criteria1:="2"
End Sub
3. разбить данные на группы - именованные диапазоны с помощью кнопки

Код: Выделить всё

Private Sub CommandButton1_Click()

Dim r1 As Range
Set r1 = Range("Лист1!_FilterDatabase")

r1.AutoFilter Field:=1, Criteria1:="<3", Operator:=xlAnd
ActiveWorkbook.Names.Add Name:="Name_r1", RefersToR1C1:=r1.SpecialCells(xlCellTypeVisible)

r1.AutoFilter Field:=1, Criteria1:="2"
ActiveWorkbook.Names.Add Name:="Name_r2", RefersToR1C1:=r1.SpecialCells(xlCellTypeVisible)

'  и т.д. 
End Sub
в итоге получаем именованные группы "Name_r1", "Name_r2" и т.д.

4. Количество строк определять при помощи пользовательской формулы, умеющей считать количество строк в дипазонах, состоящих из нескольких областей, ЧСТРОК что-то здезь не работает :(

вот один, не самый совершенный прример...

Код: Выделить всё

Public Function NumRows(Диапазон As Range)
Dim area_r1 As Range
s = 0
For Each area_r1 In Диапазон.Areas
    i = i + 1
    D_Start_R = area_r1.Row
    D_End_R = area_r1.Row + area_r1.Rows.Count - 1
    s = s + D_End_R - D_Start_R + 1
Next
NumRows = s
End Function
Ответить