2012-11-19 5 views
5

Ho alcuni caratteri incomprensibili (o non confusi, ma caratteri non inglesi come A con accenti scandinavi, ecc.) E ho bisogno di farli fuori dai guai 80.000 voci.Evidenzia qualsiasi cella senza caratteri specifici (lettere minuscole az) all'interno di

Posso scrivere una formula per raccogliere e bandiera qualsiasi cella che contiene qualcosa di altro oltre

abcdefghijklmnopqrstuvwxyz?

+1

E i numeri, i trattini,!, @, #, $,%, ^, &, *, (,), Ecc.? – PowerUser

+1

No, è un elenco di anagrammi, quindi solo lettere minuscole a-z. – Luke

risposta

2

Il seguente ha funzionato per me:

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 - Mi piace la mia soluzione, in quanto è abbastanza ordinata, tuttavia la tua sembra essere più veloce, se applicata in modo ripetitivo. – Jook

1

mio piccolo soluzione a questo, sarebbe utilizzando 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 

inserire questo codice in un modulo, quindi utilizzarlo come una formula per un formato condizionale per le celle che si desidera testare.

formula sarà semplice come questo: =demo(A1)

Se avete bisogno di più informazioni a questo: MSDN

È possibile di utilizzo naturalmente VBA per testare tutte le celle utilizzate:

'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

È possibile utilizzare Conditional Formatting per questo che metterà in evidenza le cellule in situ piuttosto che dover testare ogni cella con una formula seprate o VBA

Questa formula convalida che ogni carattere in A1 è minuscolo 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

Problemi correlati