Формулы и макросы
Шпаргалка по Excel-формулам и VBA-макросам для работы с таблицами уязвимостей (CVSS).
Критичность по CVSS-баллу (одна строка в ячейке)
=ЕСЛИ(
ЗНАЧЕН(ПОДСТАВИТЬ(B2;".";","))>=9; "Критический";
ЕСЛИ(
ЗНАЧЕН(ПОДСТАВИТЬ(B2;".";","))>=7; "Высокий";
ЕСЛИ(
ЗНАЧЕН(ПОДСТАВИТЬ(B2;".";","))>=4; "Средний";
ЕСЛИ(
ЗНАЧЕН(ПОДСТАВИТЬ(B2;".";","))>0; "Низкий"; "None"
))))
Генератор — поменяй ячейку и пороги, формула ниже перестроится сама:
=ЕСЛИ(ЗНАЧЕН(ПОДСТАВИТЬ({cell};".";","))>={c};"Критический";ЕСЛИ(ЗНАЧЕН(ПОДСТАВИТЬ({cell};".";","))>={h};"Высокий";ЕСЛИ(ЗНАЧЕН(ПОДСТАВИТЬ({cell};".";","))>={m};"Средний";ЕСЛИ(ЗНАЧЕН(ПОДСТАВИТЬ({cell};".";","))>0;"Низкий";"None"))))
Критичность по CVSS-баллу (ячейка с переносом строки)
Берёт значение после первого переноса строки в ячейке, если он есть, иначе — всю ячейку:
=ЕСЛИ(
ЕСЛИОШИБКА(НАЙТИ(СИМВОЛ(10);B2);0)>0;
ЕСЛИ(
ЗНАЧЕН(ПОДСТАВИТЬ(ПРАВСИМВ(B2;ДЛСТР(B2)-НАЙТИ(СИМВОЛ(10);B2));".";","))>=9; "Критический";
ЕСЛИ(
ЗНАЧЕН(ПОДСТАВИТЬ(ПРАВСИМВ(B2;ДЛСТР(B2)-НАЙТИ(СИМВОЛ(10);B2));".";","))>=7; "Высокий";
ЕСЛИ(
ЗНАЧЕН(ПОДСТАВИТЬ(ПРАВСИМВ(B2;ДЛСТР(B2)-НАЙТИ(СИМВОЛ(10);B2));".";","))>=4; "Средний";
ЕСЛИ(
ЗНАЧЕН(ПОДСТАВИТЬ(ПРАВСИМВ(B2;ДЛСТР(B2)-НАЙТИ(СИМВОЛ(10);B2));".";","))>0; "Низкий"; "None"
))));
ЕСЛИ(
ЗНАЧЕН(ПОДСТАВИТЬ(B2;".";","))>=9; "Критический";
ЕСЛИ(
ЗНАЧЕН(ПОДСТАВИТЬ(B2;".";","))>=7; "Высокий";
ЕСЛИ(
ЗНАЧЕН(ПОДСТАВИТЬ(B2;".";","))>=4; "Средний";
ЕСЛИ(
ЗНАЧЕН(ПОДСТАВИТЬ(B2;".";","))>0; "Низкий"; "None"
))))
)
=ЕСЛИ(ЕСЛИОШИБКА(НАЙТИ(СИМВОЛ(10);{cell});0)>0; ЕСЛИ(ЗНАЧЕН(ПОДСТАВИТЬ(ПРАВСИМВ({cell};ДЛСТР({cell})-НАЙТИ(СИМВОЛ(10);{cell}));".";","))>={c};"Критический";ЕСЛИ(ЗНАЧЕН(ПОДСТАВИТЬ(ПРАВСИМВ({cell};ДЛСТР({cell})-НАЙТИ(СИМВОЛ(10);{cell}));".";","))>={h};"Высокий";ЕСЛИ(ЗНАЧЕН(ПОДСТАВИТЬ(ПРАВСИМВ({cell};ДЛСТР({cell})-НАЙТИ(СИМВОЛ(10);{cell}));".";","))>={m};"Средний";ЕСЛИ(ЗНАЧЕН(ПОДСТАВИТЬ(ПРАВСИМВ({cell};ДЛСТР({cell})-НАЙТИ(СИМВОЛ(10);{cell}));".";","))>0;"Низкий";"None")))); ЕСЛИ(ЗНАЧЕН(ПОДСТАВИТЬ({cell};".";","))>={c};"Критический";ЕСЛИ(ЗНАЧЕН(ПОДСТАВИТЬ({cell};".";","))>={h};"Высокий";ЕСЛИ(ЗНАЧЕН(ПОДСТАВИТЬ({cell};".";","))>={m};"Средний";ЕСЛИ(ЗНАЧЕН(ПОДСТАВИТЬ({cell};".";","))>0;"Низкий";"None")))) )
VBA: автоподбор высоты строк
Без переменных — работает с текущим выделением, генератор тут не нужен.
Sub AutoFitSelectedRows()
' Автоподбор высоты для выделенного диапазона
Selection.EntireRow.AutoFit
End Sub
VBA: раскраска ячеек по критичности
Sub ColorizeCVE()
Dim cell As Range
' Проходим по всем выделенным ячейкам
For Each cell In Selection
Select Case cell.Value
Case "Критический"
cell.Interior.Color = RGB(255, 0, 0) ' Красный
cell.Font.Color = RGB(255, 255, 255) ' Белый текст для контраста
Case "Высокий"
cell.Interior.Color = RGB(255, 192, 0) ' Оранжевый
cell.Font.Color = RGB(0, 0, 0)
Case "Средний"
cell.Interior.Color = RGB(255, 255, 0) ' Желтый
cell.Font.Color = RGB(0, 0, 0)
Case "Низкий"
cell.Interior.Color = RGB(146, 208, 80) ' Зеленый
cell.Font.Color = RGB(0, 0, 0)
Case Else
' Оставляем без изменений, если текст другой
End Select
Next cell
End Sub
Подсчёт по уровням критичности
=СЧЁТЕСЛИ(C:C; "Критический")
=СЧЁТЕСЛИ(C:C; "Высокий")
=СЧЁТЕСЛИ(C:C; "Средний")
=СЧЁТЕСЛИ(C:C; "Низкий")
=СЧЁТЕСЛИ(C:C; "None")
=СЧЁТЕСЛИ({range}; "Критический")
=СЧЁТЕСЛИ({range}; "Высокий")
=СЧЁТЕСЛИ({range}; "Средний")
=СЧЁТЕСЛИ({range}; "Низкий")
=СЧЁТЕСЛИ({range}; "None")
Regex для IPv4
Статический паттерн, переменных нет:
\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
Поиск по подстроке (СЧЁТЕСЛИ с маской)
=СЧЁТЕСЛИ(A:A; "*" & B1 & "*")
=СЧЁТЕСЛИ({range}; "*" & {crit} & "*")
Фильтрация по вхождению подстроки
Первая возвращает адреса подходящих ячеек, вторая — сами значения:
=ФИЛЬТР(АДРЕС(СТРОКА(A1:A1000); 1); ЕЧИСЛО(ПОИСК(B1; A1:A1000)); "Ничего не найдено")
=ФИЛЬТР(A1:A1000; ЕЧИСЛО(ПОИСК(B1; A1:A1000)); "Ничего не найдено")
=ФИЛЬТР(АДРЕС(СТРОКА({range}); 1); ЕЧИСЛО(ПОИСК({crit}; {range})); "Ничего не найдено")
=ФИЛЬТР({range}; ЕЧИСЛО(ПОИСК({crit}; {range})); "Ничего не найдено")