Страницы: 1
RSS
Посчитать количество ячеек в зависимости от типа шрифта (курсив, подчеркнутый)
 
Всем привет!

Как посчитать кол-во ячеек в зависимости от цвета заливки, или цвета шрифта я уже научился.
Теперь возник вопрос: можно ли посчитать кол-во ячеек в зависимости от типа шрифта? Курсив/не курсив, подчеркнутый/обычный.

Буду благодарен, если кто-нибудь выложит код, т.к. подозреваю, что такой функции по умолчанию нет.
Excel 2010
 
Цитата
Eugen_excel написал: если кто-нибудь выложит код
А сами не хотите попробовать 'допилить' один из кодов по Вашей-же ссылке?
Согласие есть продукт при полном непротивлении сторон
 
Доброе время суток.
Цитата
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
Изменено: Karataev - 06.02.2017 17:55:00
 
Коды, которые я указывал (для подсчета кол-ва ячеек по цвету заливки/шрифта), я делал не сам. К сожалению, навыков совсем мало (или нет совсем), чтобы самому сделать код. Поэтому и обращаюсь здесь за помощью в поисках готового кода. Если кто-нибудь использует такую функцию, поделитесь, пожалуйста, готовым кодом.
Excel 2010
 
Цитата
Eugen_excel написал:
можно ли посчитать кол-во ячеек в зависимости от типа шрифта? Курсив/не курсив, подчеркнутый/обычный.
Вам три функции нужно?
Согласие есть продукт при полном непротивлении сторон
 
Да, получается 3 функции.

Первая функция - подсчет ячеек по критерию "курсив/не курсив"
Вторая функция - подсчет ячеек по критерию "подчеркнутый/не подчеркнутый"
Третья функция - подсчет ячеек по критерию "полужирный/обычный".
Excel 2010
 
Потестируйте такую функцию (три в одном)
Код
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
Изменено: Sanja - 07.02.2017 17:23:28
Согласие есть продукт при полном непротивлении сторон
 
@Sanja
Спасибо за код!

Поясните, пожалуйста, что означают несколько точек с запятыми подряд и затем единица в формуле? =СЧЁТСВШРИФТА($A$1:$M$1;;;1)

Я просто привык видеть, как критерий обозначается адресом ячейки, напр. =СЧЁТСВШРИФТА($A$1:$M$1;A1) а тут не пойму  :) Если критерием для подсчета полужирных ячеек указать ячеку А1, то функция не работает и возвращается 0.

Еще ведь нужно учитывать, что придется совмещать критерии, напр. посчитать кол-во ячеек одновременно с подчеркиванием+курсивом. Но, думаю, эту проблему решим по аналогии, как решили проблему с подсчетом одновременно заливки и цвета шрифта (там мы отдельные коды объединяли).
Excel 2010
 
Цитата
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

Excel 2010
 
Цитата
Eugen_excel написал: теоретически возможно
Теоретически, конечно ДА. Практически ЛЕНЬ. Это очень просто. Приведенная функция все это делает
Вставьте в качестве второго аргумента ссылку на ячейку с нужными параметрами шрифта. В файле это есть
Цитата
Eugen_excel написал: Ну так понятней просто
Растите над собой  ;)
Изменено: Sanja - 07.02.2017 22:31:28
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Читают тему
Наверх