Как подсчитать количество ячеек с текстом, написанным жирным шрифтом?

Как правильно подсчитать количество строк со жирным шрифтом в столбце после отметки явки на мероприятие? Как настроить систему так, чтобы при отметке жирным шрифтом в одной ячейке (например, с помощью Ctrl+B), в соседнем столбце автоматически устанавливалось значение "1"? Или может быть есть более правильный способ отметки для последующего подсчета?
Изображение к вопросу
  • 4 февраля 2024 г. 13:29
Ответы на вопрос 2
Для подсчета ячеек с определенным форматированием, например жирным шрифтом, в электронных таблицах Excel не существует встроенной формулы. Вам нужно использовать либо визуальный подсчет, что неэффективно для больших данных, либо написать макрос на VBA, который выполнит эту задачу.

Ниже приведен пример макроса на VBA, который позволит вам подсчитать количество ячеек с жирным шрифтом в заданном диапазоне:

```vba
Function CountBoldCells(rng As Range) As Integer
    Dim cell As Range
    Dim count As Integer
    count = 0
    For Each cell In rng
        If cell.Font.Bold = True Then
            count = count + 1
        End If
    Next cell
    CountBoldCells = count
End Function
```

Чтобы использовать этот макрос, выполните следующие шаги:

1. Откройте Excel и перейдите в нужную книгу.
2. Нажмите `Alt + F11`, чтобы открыть редактор VBA.
3. В меню выберите `Insert` > `Module`, чтобы создать новый модуль.
4. Скопируйте и вставьте код функции в окно редактора.
5. Нажмите `F5` или `Run` для запуска кода, чтобы добавить эту функцию в Excel.
6. Теперь вы можете использовать эту функцию в вашей книге, как обычную формулу Excel: `=CountBoldCells(A1:A10)`, где `A1:A10` – это диапазон ячеек, в котором вы хотите выполнить подсчет.

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

Вот пример такого макроса:

```vba
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = Range("A1:A10") ' Диапазон, где ожидается изменение

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then
        If Target.Font.Bold = True Then
            Target.Offset(0, 1).Value = 1 ' Устанавливаем "1" в соседней ячейке
        Else
            Target.Offset(0, 1).Value = 0 ' Устанавливаем "0" если не жирный шрифт
        End If
    End If
End Sub
```

Этот код нужно будет вставить в объект листа, где вы хотите отслеживать изменения. Обратите внимание, что макросы могут быть отключены в вашем Excel по соображениям безопасности, и их использование не всегда приветствуется в рабочих средах.

В случае, если автоматизация на уровне VBA неприемлема, можно использовать альтернативные способы отметки: например, ввести специальный символ или текст ("x", "присутствовал", и т.п.) и затем использовать условное форматирование для выделения этих ячеек жирным. Подсчет таких значений уже можно реализовать с помощью стандартных функций Excel, например COUNTIF.
Это можно сделать с помощью макроса VBA. 
Нужно использовать функцию .Find с поиском по форматированию текста.
Работать будет только на Windows (на MacOS этот макрос работать не будет).
Похожие вопросы