3

Функция countif имеет аргумент критерия - как указать критерий на основе форматирования ячеек?

У меня есть список вопросов по математике с домашними заданиями, содержащих на странице номера вопросов (например, в строке для страницы 12 строка будет содержать числа от 17 до 32, каждый в своей ячейке), и я хочу отметить специальные значения, используя форматирование: Сложные вопросы будут выделены жирным шрифтом, обязательные вопросы будут выделены желтым фоном, и, конечно же, ячейки с номерами жестких и обязательных вопросов будут выделены жирным шрифтом с желтым фоном.

Теперь я хочу посчитать вопросы и их классы: скажем, 16 вопросов на этой странице, из которых 5 трудные, но необязательные, 3 обязательные, но простые, а 2 обязательные и сложные?

Конечно, я мог бы добавить еще три строки на страницу: одна будет служить "жестким" флагом, а другая будет "обязательным". Третьим будет 1, если включены оба флага: hard и обязательный. Но я хочу, чтобы лист Excel был визуально приятным, без такого беспорядка, и добавление еще трех строк на страницу домашней работы уродливо и не интуитивно понятно.

Спасибо! Avi

PS Альтернативные методы решения этой проблемы будут великолепны. Может быть, я лаю не на том дереве ..

1 ответ1

2

Насколько я знаю, COUNTIF принимает только ссылки на ячейки, числа, строки и подстановочные знаки (все, что относится к значениям внутри ячеек, а не к форматам). Вот несколько вещей, которые вы можете попробовать.

Вариант 1: Фильтр данных и подведение итогов

Вы можете использовать Фильтры данных вместе с SUBTOTAL, как в примере ниже. Однако это работает только с фоновыми цветами, а не со шрифтами. Вместо жирного шрифта для сложных вопросов вы можете использовать оттенки желтого и красного. С другой стороны, вам придется вручную применять фильтр каждый раз, когда вы хотите посчитать свои вопросы.


Вариант 2: Пользовательская функция

Public Function COUNTF(w As Boolean, h As Boolean, rng As Range) As Integer

Dim cHard, cMand, cBoth As Integer

For Each c In rng
    If c.Font.Bold Then cHard = cHard + 1
    If c.Interior.Color = RGB(255, 255, 0) Then cMand = cMand + 1
    If c.Font.Bold And c.Interior.Color = RGB(255, 255, 0) Then cBoth = cBoth + 1
Next c

If w And Not (h) Then
    COUNTF = cHard
ElseIf Not (w) And h Then
    COUNTF = cMand
ElseIf w And h Then
    COUNTF = cBoth
Else
    COUNTF = rng.Count - (cHard + cMand - cBoth)
End If

End Function

Использовать:

=COUNTF(a, b, B5:B13)

где:
a & b может быть TRUE или FALSE (1 или 0)
B5:B13 содержит вопросы

пример:
Чтобы подсчитать все сложные вопросы: =COUNTF(1, 0, questions)
Для подсчета всех обязательных вопросов: =COUNTF(0, 1, questions)
Для подсчета необязательных сложных вопросов: =COUNTF(1, 0, questions)-COUNTF(1, 1, questions)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .