2012-11-19 5 views
5

Ich habe einige verstümmelte Zeichen (oder nicht verstümmelt, aber nicht englische Zeichen wie A mit skandinavischen Akzenten, etc), und ich muss sie aus der Umgebung herausfand 80.000 Einträge.Markieren Sie eine beliebige Zelle ohne spezielle Zeichen (Kleinbuchstaben az) innerhalb

Kann ich schreiben, eine Formel zu holen und Flagge jede Zelle, die etwas andere als

abcdefghijklmnopqrstuvwxyz enthält?

+1

Was ist mit Zahlen, Bindestrichen,!, @, #, $,%, ^, &, *, (,) Usw.? – PowerUser

+1

Nein, es ist eine Liste von Anagrammen, also nur Kleinbuchstaben a-z. – Luke

Antwort

2

Die Folgendes hat für mich funktioniert:

Option Explicit 
Sub NonAscii() 
    Dim UsedCells As Range, _ 
     TestCell As Range, _ 
     Position As Long, _ 
     StrLen  As Long, _ 
     CharCode As Long 

    Set UsedCells = ActiveSheet.Range("A1:A4271").CurrentRegion 
    For Each TestCell In UsedCells 
     StrLen = Len(TestCell.Value) 
     For Position = 1 To StrLen 
      CharCode = Asc(Mid(TestCell, Position, 1)) 
      If CharCode < 97 Or CharCode > 122 Then 
       TestCell.Interior.ColorIndex = 36 
       Exit For 
      End If 
     Next Position 
    Next TestCell 
End Sub 
+0

+1 - Ich mag meine Lösung, wie es ziemlich ordentlich ist, jedoch scheinen Ihre schneller zu sein, wenn sie wiederholt angewendet werden. – Jook

1

Meine kleine Lösung dieses Problems wäre RegExp mit:

Public Function demo(ByRef rngTarget As Range) As Boolean 
    Dim objRE As Object 
    Set objRE = CreateObject("vbscript.regexp") 
    With objRE 
    .Pattern = "[^a-z]" 
    .Global = True 

    'test will resolve true on any character other than a-z 
    demo = .Test(rngTarget.Value) 
    End With 
    Set objRE = nothing 
End Function 

Setzen Sie diesen Code in ein Modul, das dann als eine Formel auf die Zellen für eine bedingte Format verwenden Sie testen möchten.

Formel aussehen würde, so einfach wie diese: =demo(A1)

Wenn Sie weitere Informationen dazu benötigen: MSDN

Sie können natürlich Verwendung VBA alle verwendeten Zellen zu testen:

'This code needs to be placed as a worksheet macro, 
'or a worksheet needs to be specified for UsedRange 
Public Sub TestAll() 
    Dim rngCell as Range 

    For Each rngCell In UsedRange.Cells 
    if demo(rngCell) then 
     rngCell.interior.color = RGB(125,125,125) 
    end if 
    Next rngCell 
End Sub 
1

Sie können Conditional Formatting verwenden diese für die Zellen in situ hervorheben, anstatt um jede Zelle mit einer seprate Formel zu testen oder VBA

dieser Formel bestätigt, dass jedes Zeichen in A1 Klein az ist

SUMPRODUCT(--((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>=97)),--(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<=122))<>LEN(A1)

enter image description here

Verwandte Themen