Всем привет! Просьба подсказать, существуют ли какие-нибудь варианты применения функции CountIf в VBA таким образом, чтобы считались только видимые ячейки? Накропал макрос, но он не работает при использовании фильтра. [vba]
Код
Sub ttt() Dim lrw&, plsd&, rs&, dcl&, prch&, Rng As Range With Лист1 lrw = .Range("A" & Rows.Count).End(xlUp).Row Set Rng = .Range("A2:A" & lrw).SpecialCells(xlVisible) plsd = Application.WorksheetFunction.CountIf(Rng, "Order placed") rs = Application.WorksheetFunction.CountIf(Rng, "Under consideration") + Application.WorksheetFunction.CountIf(Rng, "Under Customer's review") + Application.WorksheetFunction.CountIf(Rng, "Technical evaluation") dcl = Application.WorksheetFunction.CountIf(Rng, "Rejected*") + Application.WorksheetFunction.CountIf(Rng, "*unacceptable") prch = Application.WorksheetFunction.CountIf(Rng, "*hold") + Application.WorksheetFunction.CountIf(Rng, "*refused*") .Range("D1") = "На рассмотрении: " & rs .Range("G1") = "Реализовано: " & plsd .Range("J1") = "Отклонено: " & dcl .Range("M1") = "Прочие: " & prch With .Range("D1") .Font.Color = -3407872 .Font.Bold = True End With With .Range("G1") .Font.Color = -16776961 .Font.Bold = True End With With .Range("J1") .Font.Color = -11489280 .Font.Bold = True End With End With End Sub
[/vba]
Пример прилагаю.
Всем привет! Просьба подсказать, существуют ли какие-нибудь варианты применения функции CountIf в VBA таким образом, чтобы считались только видимые ячейки? Накропал макрос, но он не работает при использовании фильтра. [vba]
Код
Sub ttt() Dim lrw&, plsd&, rs&, dcl&, prch&, Rng As Range With Лист1 lrw = .Range("A" & Rows.Count).End(xlUp).Row Set Rng = .Range("A2:A" & lrw).SpecialCells(xlVisible) plsd = Application.WorksheetFunction.CountIf(Rng, "Order placed") rs = Application.WorksheetFunction.CountIf(Rng, "Under consideration") + Application.WorksheetFunction.CountIf(Rng, "Under Customer's review") + Application.WorksheetFunction.CountIf(Rng, "Technical evaluation") dcl = Application.WorksheetFunction.CountIf(Rng, "Rejected*") + Application.WorksheetFunction.CountIf(Rng, "*unacceptable") prch = Application.WorksheetFunction.CountIf(Rng, "*hold") + Application.WorksheetFunction.CountIf(Rng, "*refused*") .Range("D1") = "На рассмотрении: " & rs .Range("G1") = "Реализовано: " & plsd .Range("J1") = "Отклонено: " & dcl .Range("M1") = "Прочие: " & prch With .Range("D1") .Font.Color = -3407872 .Font.Bold = True End With With .Range("G1") .Font.Color = -16776961 .Font.Bold = True End With With .Range("J1") .Font.Color = -11489280 .Font.Bold = True End With End With End Sub
при фильтрации и использовании только видимых ячеек в общем случае у нас получается не непрерывный диапазон строк, а несколько областей (areas), поэтому пришлось сделать цикл по этим областям, в каждой отдельно посчитать CountIf и просуммировать
при фильтрации и использовании только видимых ячеек в общем случае у нас получается не непрерывный диапазон строк, а несколько областей (areas), поэтому пришлось сделать цикл по этим областям, в каждой отдельно посчитать CountIf и просуммироватьPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816