Как посчитать кол-во ячеек в зависимости от цвета заливки, или цвета шрифта я уже научился. Теперь возник вопрос: можно ли посчитать кол-во ячеек в зависимости от типа шрифта? Курсив/не курсив, подчеркнутый/обычный.
Буду благодарен, если кто-нибудь выложит код, т.к. подозреваю, что такой функции по умолчанию нет.
Eugen_excel написал: Как посчитать кол-во ячеек в зависимости от цвета заливки, или цвета шрифта я уже научился
Отлично! Теперь просмотрите в Object Browser редактора VBA свойства объекта Font, получаемого по свойству Font объекта Range (переменная rCell в коде по ссылке). Успехов.
Sub Подсчитать()
Dim countItalic As Long, countNoItalic As Long
Dim countUnderline As Long, countGeneral As Long
Dim rng As Range, cel As Range
'здесь укажите нужный диапазон
Set rng = Range("A1:A5")
For Each cel In rng
If cel.Font.Italic = True Then
countItalic = countItalic + 1
Else
countNoItalic = countNoItalic + 1
End If
If cel.Font.Underline <> xlUnderlineStyleNone Then countUnderline = countUnderline + 1
If (cel.Font.Italic = False) And (cel.Font.Underline = xlUnderlineStyleNone) Then
countGeneral = countGeneral + 1
End If
Next cel
'здесь в переменных результат.
End Sub
Коды, которые я указывал (для подсчета кол-ва ячеек по цвету заливки/шрифта), я делал не сам. К сожалению, навыков совсем мало (или нет совсем), чтобы самому сделать код. Поэтому и обращаюсь здесь за помощью в поисках готового кода. Если кто-нибудь использует такую функцию, поделитесь, пожалуйста, готовым кодом.
Первая функция - подсчет ячеек по критерию "курсив/не курсив" Вторая функция - подсчет ячеек по критерию "подчеркнутый/не подчеркнутый" Третья функция - подсчет ячеек по критерию "полужирный/обычный".
Function СЧЁТСВШРИФТА(rng As Range, Optional cl As Range, Optional it As Boolean = False, Optional bld As Boolean = False, Optional ul = 0)
'rng - диапазон для подсчета ячеек, обязательный
'cl - ячейка со шрифтом-образцом, необязательный
'it - курсив(1)/не курсив(0), необязательный, по умолчанию False(0)
'blt - полужирный(1)/нет(0), необязательный, по умолчанию False(0)
'ul - подчеркнутый(1)/нет(0),необязательный, по умолчанию НЕТ(0)
Dim iCl As Range
If Not cl Is Nothing Then
With cl.Parent.Range(cl.Address).Font
it = .Italic: bld = .Bold: ul = .Underline
End With
End If
If ul = 0 Then
ul = xlUnderlineStyleNone
Else
ul = xlUnderlineStyleSingle
End If
For Each iCl In rng
With iCl.Font
If .Italic = it And .Bold = bld And .Underline = ul Then
СЧЁТСВШРИФТА = СЧЁТСВШРИФТА + 1
End If
End With
Next
End Function
Поясните, пожалуйста, что означают несколько точек с запятыми подряд и затем единица в формуле? =СЧЁТСВШРИФТА($A$1:$M$1;;;1)
Я просто привык видеть, как критерий обозначается адресом ячейки, напр. =СЧЁТСВШРИФТА($A$1:$M$1;A1) а тут не пойму Если критерием для подсчета полужирных ячеек указать ячеку А1, то функция не работает и возвращается 0.
Еще ведь нужно учитывать, что придется совмещать критерии, напр. посчитать кол-во ячеек одновременно с подчеркиванием+курсивом. Но, думаю, эту проблему решим по аналогии, как решили проблему с подсчетом одновременно заливки и цвета шрифта (там мы отдельные коды объединяли).
Eugen_excel написал: Я просто привык видеть, как критерий обозначается адресом ячейки, напр. =СЧЁТСВШРИФТА($A$1:$M$1;A1) а тут не пойму
Ну как еще объяснить...Все аналогично штатным функциям Excel, имеющим необязательные аргументы. Аргументы я расписал в комментариях Например =СЧЁТСВШРИФТА($A$1:$M$1;A1) - будет подсчитано количество ячеек в диапазоне $A$1:$M$1 у которых И наклон И жирность И подчеркивание как и шрифта ячейки A1. Если второй аргумент (ячейка-образец) ПРИсутствует в формуле, то все остальные аргументы игнорируются. Если второй аргумент (ячейка-образец) ОТсутсвует, то подсчитываются ячейки, шрифт которых удовлетворяет каждому из трех оставшихся аргументов. Например =СЧЁТСВШРИФТА($A$1:$M$1;;1) - второй аргумент опущен (его позиция между двух точек с запятой), но есть третий аргумент присутствует (курсив, равный ИСТИНА(1)). Будет подсчитано количество ячеек со шрифтом-курсивом =СЧЁТСВШРИФТА($A$1:$M$1;;1;1) - ----"---- со шрифтом курсивом И жирным =СЧЁТСВШРИФТА($A$1:$M$1;;;1) - ---"--- ТОЛЬКО с жирным шрифтом ну и т.д. Поэксперементируйте
Согласие есть продукт при полном непротивлении сторон
А вообще теоретически возможно сделать этот код (или отдельно коды для каждого стиля) наподобие кода, который подсчитывает кол-во ячеек по цвету заливки? Ну так понятней просто
Код
Public Function СЧЁТЗАЛИВКА(ДИАПАЗОН As Range, ЯЧЕЙКА) As Long
Dim S As Double
Dim rCell As Range
Dim ColCell As Long
ColCell = ЯЧЕЙКА.Interior.Color
S = 0
For Each rCell In ДИАПАЗОН
If rCell.Interior.Color = ColCell Then
S = S + 1
End If
Next
СЧЁТЗАЛИВКА = S
End Function
Теоретически, конечно ДА. Практически ЛЕНЬ. Это очень просто. Приведенная функция все это делает Вставьте в качестве второго аргумента ссылку на ячейку с нужными параметрами шрифта. В файле это есть