CounIf для отфильтрованного диапазона
Xpert
Дата: Вторник, 22.02.2022, 13:58 |
Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
Всем привет! Просьба подсказать, существуют ли какие-нибудь варианты применения функции CountIf в 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
Пример прилагаю.
Всем привет! Просьба подсказать, существуют ли какие-нибудь варианты применения функции CountIf в 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
Пример прилагаю. Xpert
Ответить
Сообщение Всем привет! Просьба подсказать, существуют ли какие-нибудь варианты применения функции 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 ; "Тechnical 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 = Тrue End With With .Range("G1") .Font.Color = -16776961 .Font.Bold = Тrue End With With .Range("J1") .Font.Color = -11489280 .Font.Bold = Тrue End With End WithEnd Sub
[/vba] Пример прилагаю. Автор - Xpert Дата добавления - 22.02.2022 в 13:58
Pelena
Дата: Вторник, 22.02.2022, 14:23 |
Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19521
Репутация:
4634
±
Замечаний:
±
Excel 365 & Mac Excel
Вроде работает. Сначала фильтр, потом макрос
Вроде работает. Сначала фильтр, потом макрос Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение Вроде работает. Сначала фильтр, потом макрос Автор - Pelena Дата добавления - 22.02.2022 в 14:23
Xpert
Дата: Вторник, 22.02.2022, 14:27 |
Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
Pelena , при фильтрации по дате выдаёт ошибку.
Pelena , при фильтрации по дате выдаёт ошибку.Xpert
Сообщение отредактировал Xpert - Вторник, 22.02.2022, 14:32
Ответить
Сообщение Pelena , при фильтрации по дате выдаёт ошибку.Автор - Xpert Дата добавления - 22.02.2022 в 14:27
Pelena
Дата: Вторник, 22.02.2022, 14:35 |
Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19521
Репутация:
4634
±
Замечаний:
±
Excel 365 & Mac Excel
Попробуйте так
Sub ttt()
Dim lrw&, plsd&, rs&, dcl&, prch&, Rng As Range
With Лист1
lrw = .Range("A" & Rows.Count).End(xlUp).Row
For Each Rng In .Range("A2:A" & lrw).SpecialCells(xlVisible).Areas
plsd = plsd + Application.WorksheetFunction.CountIf(Rng, "Order placed" )
rs = rs + Application.WorksheetFunction.CountIf(Rng, "Under consideration" ) + Application.WorksheetFunction.CountIf(Rng, "Under Customer's review" ) + Application.WorksheetFunction.CountIf(Rng, "Technical evaluation" )
dcl = dcl + Application.WorksheetFunction.CountIf(Rng, "Rejected*" ) + Application.WorksheetFunction.CountIf(Rng, "*unacceptable" )
prch = prch + Application.WorksheetFunction.CountIf(Rng, "*hold" ) + Application.WorksheetFunction.CountIf(Rng, "*refused*" )
Next Rng
.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
Попробуйте так
Sub ttt()
Dim lrw&, plsd&, rs&, dcl&, prch&, Rng As Range
With Лист1
lrw = .Range("A" & Rows.Count).End(xlUp).Row
For Each Rng In .Range("A2:A" & lrw).SpecialCells(xlVisible).Areas
plsd = plsd + Application.WorksheetFunction.CountIf(Rng, "Order placed" )
rs = rs + Application.WorksheetFunction.CountIf(Rng, "Under consideration" ) + Application.WorksheetFunction.CountIf(Rng, "Under Customer's review" ) + Application.WorksheetFunction.CountIf(Rng, "Technical evaluation" )
dcl = dcl + Application.WorksheetFunction.CountIf(Rng, "Rejected*" ) + Application.WorksheetFunction.CountIf(Rng, "*unacceptable" )
prch = prch + Application.WorksheetFunction.CountIf(Rng, "*hold" ) + Application.WorksheetFunction.CountIf(Rng, "*refused*" )
Next Rng
.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
Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение Попробуйте так [vba]
Sub ttt() Dim lrw &; plsd &; rs &; dcl &; prch &; Rng As Range With Лист1 lrw = .Range("A" & Rows.Count ).End(xlUp ).Row For Each Rng In .Range("A2:A" & lrw ).SpecialCells(xlVisible ).Areas plsd = plsd + Application.WorksheetFunction.CountIf(Rng ; "Order placed") rs = rs + Application.WorksheetFunction.CountIf(Rng ; "Under consideration") + Application.WorksheetFunction.CountIf(Rng ; "Under Customer's review") + Application.WorksheetFunction.CountIf(Rng ; "Тechnical evaluation") dcl = dcl + Application.WorksheetFunction.CountIf(Rng ; "Rejected*") + Application.WorksheetFunction.CountIf(Rng ; "*unacceptable") prch = prch + Application.WorksheetFunction.CountIf(Rng ; "*hold") + Application.WorksheetFunction.CountIf(Rng ; "*refused*") Next Rng .Range("D1") = "На рассмотрении: " & rs .Range("G1") = "Реализовано: " & plsd .Range("J1") = "Отклонено: " & dcl .Range("M1") = "Прочие: " & prch With .Range("D1") .Font.Color = -3407872 .Font.Bold = Тrue End With With .Range("G1") .Font.Color = -16776961 .Font.Bold = Тrue End With With .Range("J1") .Font.Color = -11489280 .Font.Bold = Тrue End With End WithEnd Sub
[/vba] Автор - Pelena Дата добавления - 22.02.2022 в 14:35
Xpert
Дата: Вторник, 22.02.2022, 16:02 |
Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
Pelena , Елена, спасибо огромное, работает как надо! Если не затруднит, поясните, пожалуйста, в чём фокус?
Pelena , Елена, спасибо огромное, работает как надо! Если не затруднит, поясните, пожалуйста, в чём фокус?Xpert
Сообщение отредактировал Xpert - Вторник, 22.02.2022, 16:03
Ответить
Сообщение Pelena , Елена, спасибо огромное, работает как надо! Если не затруднит, поясните, пожалуйста, в чём фокус?Автор - Xpert Дата добавления - 22.02.2022 в 16:02
Pelena
Дата: Вторник, 22.02.2022, 16:37 |
Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 19521
Репутация:
4634
±
Замечаний:
±
Excel 365 & Mac Excel
при фильтрации и использовании только видимых ячеек в общем случае у нас получается не непрерывный диапазон строк, а несколько областей (areas), поэтому пришлось сделать цикл по этим областям, в каждой отдельно посчитать CountIf и просуммировать
при фильтрации и использовании только видимых ячеек в общем случае у нас получается не непрерывный диапазон строк, а несколько областей (areas), поэтому пришлось сделать цикл по этим областям, в каждой отдельно посчитать CountIf и просуммироватьPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение при фильтрации и использовании только видимых ячеек в общем случае у нас получается не непрерывный диапазон строк, а несколько областей (areas), поэтому пришлось сделать цикл по этим областям, в каждой отдельно посчитать CountIf и просуммироватьАвтор - Pelena Дата добавления - 22.02.2022 в 16:37