Страницы: 1
RSS
Подсчет количества ячеек в столбце по цвету заливки
 
Доброго времени всем!
Задача: в столбце  "А" заполнен диапазон (всегда разный, но пустых ячеек до конца диапазона не бывает).
Ячейки столбца "А" заливаются цветом (не УФ) в зависимости от значения соседней ячейки столбца "В" (макросом), т.е. например если в ячейке столбца "В" - ДА, то соседняя столбца "А" заливается зеленым, если НЕТ - красным, если в "В" нет текста - в "А" нет заливки.
Нашел макрос от New (очень мне подходит по поставленной задаче) ссылка https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=8&TID=7104&TITLE_SEO=7104&MID=49894&tags=&q=подсчет+ячеек+без+заливки&FORUM_ID%5B0%5D=0&DATE_CHANGE=0&order=relevance&s=Найти#message49894
Вот сам код:
Код
Option Explicit

Sub CountColours()
'считает количество цветов заливки в выделенном диапазоне
Dim Rng As Range, iCell As Range
Dim iLastRow, TotalSum As Long
Dim UsedColours As New Collection, i As Long
    
    'различные проверки
    If TypeName(Selection) <> "Range" Then
        MsgBox "Выделите ячейки на листе Excel!", 48, "Ошибка"
        Exit Sub
    End If
    Set Rng = Selection.Cells
    If Rng.Columns.Count > 1 Then
        MsgBox "Выделите диапазон ячеек в одном столбце!", 48, "Ошибка"
        Exit Sub
    End If
    If Rng.Cells.Count = 1 Then
        MsgBox "Выделите диапазон ячеек!", 48, "Ошибка"
        Exit Sub
    End If
    If Application.CountA(Rng) = 0 Then
        MsgBox "Выделенный диапазон пуст!", 48, "Ошибка"
        Exit Sub
    End If
    
    'заполняем коллекцию номерами цветов без задвоений. Ячейка без цвета -4142
    On Error Resume Next
    For Each iCell In Rng
        UsedColours.Add iCell.Interior.ColorIndex, CStr(iCell.Interior.ColorIndex)
    Next iCell
    On Error GoTo 0
    
    'результаты будем проставлять ниже на 2 ячейки
    iLastRow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row + 3
    'считаем количество каждого цвета в выделенном диапазоне и проставляем в нужную ячейку
    For i = 1 To UsedColours.Count
        Cells(iLastRow, ActiveCell.Column).Interior.ColorIndex = UsedColours(i)
        For Each iCell In Rng
            If iCell.Interior.ColorIndex = UsedColours(i) Then TotalSum = TotalSum + 1
        Next iCell
        Cells(iLastRow, ActiveCell.Column) = TotalSum
        TotalSum = 0
        iLastRow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row + 1
    Next i
    MsgBox "Цвета посчитаны", 64, "Конец"
End Sub
Проблема в том, что мне нужно, чтобы подсчет пустых и закрашенных ячеек столбца "А" велся в строке 1 начиная с ячейки "М1" и вправо (в шапке таблицы). При этом было бы неплохо не выделять диапазон для подсчета цветов, а брать его автоматически с ячейки "А2"  и вниз до последней заполненной (чтобы подсчет цветов вёлся по изменению (появлению) текста в столбце "В" по Worksheet_Change (появился текст в ячейке столбца "В", соседняя ячейка столбца "А" закрасилась цветом, в ячейке "N1" (например) пересчиталось число ячеек с данным цветом, в ячейке "М1"  уменьшилось количество ячеек без заливки). В каких ячейках первой строки какие цвета не важно, но желательно количество ячеек без заливки поместить в "М1"
Прошу прощения, файл приложить не имею возможности - корпоративный инет, скачать можно, выложить нельзя.
Изменено: evg_glaz - 01.12.2022 11:02:10
 
Если
Цитата
evg_glaz написал:
Ячейки столбца "А" заливаются цветом (не УФ) в зависимости от значения соседней ячейки столбца "В" (макросом),
, тогда зачем
Цитата
evg_glaz написал:
подсчет пустых и закрашенных ячеек столбца "А"
?
Другими словами - если А красится по значениям В, то зачем нам работать потом с раскраской из А, если можно работать со значениями из В?
Скажи мне, кудесник, любимец ба’гов...
 
_Boroda_, тоже верно, но полностью всегда заполнен диапазон столбца "А", а в столбце "В" может быть определенный текст в начале, середине и т.д..., но не обязательно в последней ячейке диапазона, тогда весь диапазон наверное не получится вычислить)
Цитата
А так- по большому счету не важно откуда брать данные - из заливки, или из данных, главное посчитать правильно))) и поместить в строку 1 полученные цифры!
Формула не подходит - диапазоны всегда меняются.
Изменено: evg_glaz - 01.12.2022 11:33:09
Страницы: 1
Наверх