2016-10-28 6 views
1

Мне нужно знать, как идентифицировать ячейку с определенным специальным символом как (пример:!,. =] \ '), Столбец может содержать только числа (0-9), буквы (az) , как колпачки (AZ) и маркировать их как цвет.Идентифицировать специальный символ VBA

Пример: enter image description here

Я хочу, чтобы это автоматически, как код.

Спасибо за ваше время.

+2

Regex -> http://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops – DejaVuSansMono

+1

Кажется, что рядом буквы и цифры, ячейки могут иметь '-' тоже, верно? –

+0

Это также можно сделать без макроса VBA с условной формулой форматирования http://stackoverflow.com/questions/29855647/check-if-cell-contains-non-alpha-characters-in-excel – Slai

ответ

4

Вы можете использовать регулярное выражение для этой задачи.

Полезная конструкция регулярных выражений здесь negated character class: вы используете [^...] и вставляете диапазоны, которые вы не хотите сопоставлять там. Итак, чтобы сопоставить символ, отличный от ASCII букв, цифр и дефис, используйте [^a-zA-Z0-9-].

И использовать его как

Dim strPattern As String: strPattern = "[^a-z0-9-]" 
Dim regEx As Object 

Set regEx = CreateObject("VBScript.RegExp") 
regEx.Global = True 
regEx.IgnoreCase = True 
regEx.Pattern = strPattern 

For Each cell In ActiveSheet.Range("C:C") ' Define your own range here 
    If strPattern <> "" Then    ' If the cell is not empty 
     If regEx.Test(cell.Value) Then ' Check if there is a match 
      cell.Interior.ColorIndex = 6 ' If yes, change the background color 
     End If 
    End If 
Next 
1

Без регулярных выражений:

Этот макрос процессы колонки B:

Sub marine() 
    Dim r As Range, rng As Range, s As String 
    Dim i As Long, L As Long 

    Set rng = Intersect(Range("B:B"), ActiveSheet.UsedRange) 

    For Each r In rng 
     If r.Value <> "" Then 
      s = Replace(r.Text, "-", "") 
      L = Len(s) 
      For i = 1 To L 
       If Not Mid(s, i, 1) Like "[0-9a-zA-Z]" Then 
        r.Interior.Color = vbYellow 
       End If 
      Next i 
     End If 
    Next r 
End Sub 

Он будет принимать только цифры, верхний и строчные буквы , и тире.

+1

Недостатки ваших ответов путают меня, поэтому я +1, поскольку я не вижу никаких проблем. Downvoters, пожалуйста, дайте какой-либо намек на то, почему этот ответ не пригодится. – Slai

+0

@Slai Тебя может быть ошибка где-то там ............. Я повторно рассмотрю ответ. –

+0

Я не ответил на ваш ответ, спасибо за ваше время – Deluq

Смежные вопросы