Страницы: 1
RSS
Условное форматирование или макрос если ячейка не содержит, Покрасить ячейки с непечатными символами
 
Доброго времени суток уважаемые форумчане!
Имеется у меня столбец А, в котором нужно найти непечатные символы.
Если точнее, те, которых нет в списке ниже:
абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩ­ЪЫЬЭЮЯ0123456789 ._-
Можно как-то макросом, формулой, условным форматированием покрасить ячейки, которые не содержат вышеперечисленные символы?
Если например попадется в содержимом ячейки `~@#$%^&(*)†’}, то ячейка окрашивается красным цветом.
Пытаюсь через условное форматирование решить, но нет понимания как в условие добавить несколько символов.
Гарантированная благодарность обеспечена!
Изменено: Владислав - 23.05.2017 12:09:06 (уточнение в описании темы)
 
В стандартный модуль вставьте функцию:
Код
Function pecS(strIn As String) As Boolean
pecS = strIn Like "*[!абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ0123456789._-]*"
End Function
После чего можете использовать ее в условиях условного форматирования.
Если еще какие-нибудь символы отлавливать раздумаете - добавляйте в условие для Like.
Изменено: PerfectVam - 23.05.2017 13:17:28
Следствие из третьего закона Чизхолма:
"Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
 
Цитата
PerfectVam написал:
В стандартный модуль вставьте функцию:
Спасибо огромное!
А как добавить в стандартный модуль?
 
Владислав, идём в "Приёмы" и читаем про макросы. Там и про стандартный модуль найдёте - не пересказывать же Вам уже написанное...
 
Еще один вариант решения
Процедура анализирующая диаппазон ячеек активной книги. активного листа (ActiveWorkbook.ActiveSheet).
Анализируемый диаппазон 20 ячеек в данном случае при желании можно менять .Range("A1:A20") или .Range("A1:B20") или .Range("A1:H2000") и тд.
Также можно использовать .Range("A1").CurrentRegion и ActiveSheet.UsedRange или Selection всё зависит от поставленных задач.
Тестируйте.
Код
Sub Покрасить_ячейки_с_непечатными_символами()
Dim objRegExp, Vl
Set objRegExp = CreateObject("VBScript.RegExp") 
objRegExp.Global = False
objRegExp.IgnoreCase = True            ' Игонорируем регистр
objRegExp.Pattern = "[^А-я0-9_\,\ \-]" ' Не входит в шаблон (сравниваемый текст) "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩ­ЪЫЬЭЮЯ0123456789 ._-"
With ActiveWorkbook
  With .ActiveSheet
      For Each Vl In .Range("A1:A20")  ''' Анализ 
        If objRegExp.test(Vl.Value) Then Vl.Interior.Color = 255
      Next
  End With
 End With
Set objRegExp = Nothing
End Sub
Изменено: TSN - 23.05.2017 15:13:18
 
Цитата
TSN написал:
Тестируйте.
Спасибо огромное!
Подскажите пожалуйста, как можно добавить символы исключения, например / \ [
 
замените в коде
Код
objRegExp.Pattern = "[^А-я0-9_\,\ \-]"
на
Код
objRegExp.Pattern = "[^А-я0-9_\,\ \-\/\\\[]"
 
Что понимать под символами-исключениями?
Проще сравнивать с тем, что уже определено. Если это те символы, которые Вы хотите проявлять наряду со спецсимволами, то их как раз в условие и не надо. Если Вы их хотите разрешить наряду с буквами и цифрами, то внутри скобок символы теряют свою специальность. Все, кроме одного. Это дефис. Чтобы он воспринимался как дефис, он должен стоять либо первым, либо последним. Если не так, то он воспринимается как разделитель интервала, а не дефис.
Еще тонкость. При задании интервала "а-я" в диапазон не попадает "ё".
Таким образом, с укорочением условия и добавлением обозначенных Вами новых символов функция может выглядеть так:
Код
Function pecS(strIn As String) As Boolean
pecS = strIn Like "*[!а-яёА-ЯЁ0-9[/\._-]*"
End Function

Я еще и закрывающую квадратную скобку добавил.

Э-э-э, нет, с закрывающей квадратной я погорячился... Пришлось убрать.
Изменено: PerfectVam - 23.05.2017 16:06:55
Следствие из третьего закона Чизхолма:
"Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
 
Чтобы наряду с русскими буквами-цифрами разрешить еще и закрывающую скобку, придется усложнить:
Код
Function pecS(strIn As String) As Boolean
pecS = (strIn Like "*[!а-яёА-ЯЁ0-9[/\._-]*") And (Not (strIn Like "*]*"))
End Function
Изменено: PerfectVam - 23.05.2017 16:12:55
Следствие из третьего закона Чизхолма:
"Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
 
Мой вариант: примитивный макрос, решающий Вашу проблему.
Цитата
Владислав написал:
абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩ­­ЪЫЬЭЮЯ0123456789 ._-
В макросе есть строка:
Код
text = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ0123456789._-"
В нее можно добавить символы в любой позиции.
Страницы: 1
Наверх