2012-11-19 9 views
5

Mam kilka zniekształconych znaków (lub nie zniekształconych, ale nieanglojęzycznych znaków, takich jak litery A ze skandynawskimi akcentami itp.) I muszę je wyrzucić z 80 000 wpisów.Zaznacz dowolną komórkę bez określonych znaków (małe litery az) wewnątrz

można napisać formułę, aby podnieść i flagi dowolną komórkę, która zawiera coś inne niż

abcdefghijklmnopqrstuvwxyz?

+1

A co z cyframi, myślnikami,!, @, #, $,%, ^, &, *, (,) Itd.? – PowerUser

+1

Nie, jest to lista anagramów, a więc tylko małe litery a-z. – Luke

Odpowiedz

2

następujące pracował dla mnie:

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 - Podoba mi się moje rozwiązanie, ponieważ jest całkiem zgrabne, jednak wydaje się, że jest szybsze, jeśli jest stosowane repetetatywnie. – Jook

1

Mój malutki Rozwiązaniem tego problemu byłoby użyciu RegExp:

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 

Umieść ten kod do modułu, a następnie użyć go jako wzoru dla formatu warunkowego na komórki, które chcesz przetestować.

Formuła wyglądałby tak proste, jak to: =demo(A1)

Jeśli potrzebujesz więcej informacji do tego: MSDN

Można obsługi kursu VBA do przetestowania używane komórki:

'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

Można użyć Conditional Formatting do tego, który zaprezentuje komórek in situ, zamiast konieczności przetestować każdą komórkę z seprate wzoru lub VBA

Ta formuła sprawdza, czy każda postać w A1 jest małe az

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

Powiązane problemy