Доброго времени суток уважаемые форумчане! Имеется у меня столбец А, в котором нужно найти непечатные символы. Если точнее, те, которых нет в списке ниже: абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ0123456789 ._- Можно как-то макросом, формулой, условным форматированием покрасить ячейки, которые не содержат вышеперечисленные символы? Если например попадется в содержимом ячейки `~@#$%^&(*)†’}, то ячейка окрашивается красным цветом. Пытаюсь через условное форматирование решить, но нет понимания как в условие добавить несколько символов. Гарантированная благодарность обеспечена!
Изменено: Владислав - 23.05.2017 12:09:06(уточнение в описании темы)
Function pecS(strIn As String) As Boolean
pecS = strIn Like "*[!абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ0123456789._-]*"
End Function
После чего можете использовать ее в условиях условного форматирования. Если еще какие-нибудь символы отлавливать раздумаете - добавляйте в условие для Like.
Следствие из третьего закона Чизхолма: "Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
Еще один вариант решения Процедура анализирующая диаппазон ячеек активной книги. активного листа (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
Что понимать под символами-исключениями? Проще сравнивать с тем, что уже определено. Если это те символы, которые Вы хотите проявлять наряду со спецсимволами, то их как раз в условие и не надо. Если Вы их хотите разрешить наряду с буквами и цифрами, то внутри скобок символы теряют свою специальность. Все, кроме одного. Это дефис. Чтобы он воспринимался как дефис, он должен стоять либо первым, либо последним. Если не так, то он воспринимается как разделитель интервала, а не дефис. Еще тонкость. При задании интервала "а-я" в диапазон не попадает "ё". Таким образом, с укорочением условия и добавлением обозначенных Вами новых символов функция может выглядеть так:
Код
Function pecS(strIn As String) As Boolean
pecS = strIn Like "*[!а-яёА-ЯЁ0-9[/\._-]*"
End Function
Я еще и закрывающую квадратную скобку добавил.
Э-э-э, нет, с закрывающей квадратной я погорячился... Пришлось убрать.
Следствие из третьего закона Чизхолма: "Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
Следствие из третьего закона Чизхолма: "Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."