2016-10-28 4 views
1

Ich muss wissen, wie man eine Zelle identifiziert, die ein bestimmtes Sonderzeichen als (Beispiel:!,. =] \ ') Die Spalte kann nur Zahlen (0-9), Buchstaben (az) enthalten , als Kappen (AZ) und markieren sie als Farbe.Identifizieren Sonderzeichen VBA

Beispiel: enter image description here

Ich möchte diese automatisch als Code.

Danke für Ihre Zeit.

+2

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

+1

Es scheint, dass neben die Buchstaben und Ziffern, die Zellen können auch "-" haben, oder? –

+0

Es kann auch ohne VBA-Makro mit Bedingter Formatierungsformel gemacht werden http://stackoverflow.com/questions/29855647/check-if-cell-contains-non-alpha-characters-in-excel – Slai

Antwort

4

Sie können eine Regex für diese Aufgabe verwenden.

Ein nützliches Regex-Konstrukt hier ist ein negated character class: Sie verwenden [^...] und fügen Sie die Bereiche, die Sie nicht übereinstimmen möchten, dort ein. Verwenden Sie also [^a-zA-Z0-9-], um ein anderes Zeichen als ASCII-Zeichen, Ziffern und einen Bindestrich zu verwenden.

Und es verwenden, wie

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

Ohne regex:

Diese Makroprozesse Spalte 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 

Es nur Ziffern akzeptiert, Groß- und Kleinbuchstaben und der Strich.

+1

Die Downvotes auf Ihre Antworten verwirren mich, also ich +1, da ich kein Problem sehe. Downwoters bitte geben Sie einen Hinweis, warum diese Antwort nicht sinnvoll ist. – Slai

+0

@Slai Thee kann irgendwo drin ein Fehler sein ............. Ich werde die Antwort noch einmal überprüfen. –

+0

Ich habe deine Antwort nicht abgelehnt, danke für deine Zeit – Deluq