Предлагаю разбить ваши данные с помощью автофильтра, затем дать полученным диапазонам - имена
Действия...
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