Здравствуйте. Прошу помощи. Во вложении таблица состоит из блоков (для наглядности выделил разными цветами), номера которых в столбце "А". Если скрыть строки макросом (кнопка фильтр) - нумерация становится некорректной. Необходимо макросом сделать новую нумерацию по блокам для видимых строк (количество видимых строк может менятся. Заранее спасибо.
Здравствуйте. Прошу помощи. Во вложении таблица состоит из блоков (для наглядности выделил разными цветами), номера которых в столбце "А". Если скрыть строки макросом (кнопка фильтр) - нумерация становится некорректной. Необходимо макросом сделать новую нумерацию по блокам для видимых строк (количество видимых строк может менятся. Заранее спасибо.Amator
Sub fil() Dim rws As Range Application.ScreenUpdating = 0 r0_ = 11 n_ = Cells(Rows.Count, 2).End(3).Row - r0_ ar1 = Cells(r0_ + 1, 5).Resize(n_) ar2 = Cells(r0_ + 1, 19).Resize(n_) ar0 = Cells(r0_ + 1, 1).Resize(n_, 2) For i = 1 To n_ If ar2(i, 1) = 0 And (ar1(i, 1) = 0 Or ar1(i, 1) = "") Then If rws Is Nothing Then Set rws = Cells(i + r0_, 1) Else Set rws = Union(rws, Cells(i + r0_, 1)) End If ar0(i, 1) = "" Else If k_ Then If UCase(Left(ar0(i, 2), 6)) <> "ВСЕГО " Then If ar0(i, 2) <> z_ Or ar0(i, 1) Then k_ = k_ + 1 ar0(i, 1) = k_ z_ = ar0(i, 2) End If End If Else k_ = 1 ar0(i, 1) = k_ z_ = ar0(i, 2) End If End If Next i Cells(r0_ + 1, 1).Resize(n_) = ar0 rws.EntireRow.Hidden = 1 Application.ScreenUpdating = 1 End Sub
[/vba]
И есть такая функция СУММЕСЛИ, ее иногда очень удобно использовать. См. красные ячейки в столбце V
Так нужно? [vba]
Код
Sub fil() Dim rws As Range Application.ScreenUpdating = 0 r0_ = 11 n_ = Cells(Rows.Count, 2).End(3).Row - r0_ ar1 = Cells(r0_ + 1, 5).Resize(n_) ar2 = Cells(r0_ + 1, 19).Resize(n_) ar0 = Cells(r0_ + 1, 1).Resize(n_, 2) For i = 1 To n_ If ar2(i, 1) = 0 And (ar1(i, 1) = 0 Or ar1(i, 1) = "") Then If rws Is Nothing Then Set rws = Cells(i + r0_, 1) Else Set rws = Union(rws, Cells(i + r0_, 1)) End If ar0(i, 1) = "" Else If k_ Then If UCase(Left(ar0(i, 2), 6)) <> "ВСЕГО " Then If ar0(i, 2) <> z_ Or ar0(i, 1) Then k_ = k_ + 1 ar0(i, 1) = k_ z_ = ar0(i, 2) End If End If Else k_ = 1 ar0(i, 1) = k_ z_ = ar0(i, 2) End If End If Next i Cells(r0_ + 1, 1).Resize(n_) = ar0 rws.EntireRow.Hidden = 1 Application.ScreenUpdating = 1 End Sub
[/vba]
И есть такая функция СУММЕСЛИ, ее иногда очень удобно использовать. См. красные ячейки в столбце V_Boroda_