2012-11-19 30 views
5

Tôi có một số ký tự bị cắt xén (hoặc không bị cắt xén, nhưng không phải tiếng Anh như chữ A với dấu Scandinavian, v.v.) và tôi cần phải loại bỏ chúng 80.000 mục nhập.Làm nổi bật bất kỳ ô nào không có ký tự cụ thể (chữ thường chữ thường az) bên trong

Tôi có thể viết một công thức để đón và cờ bất kỳ tế bào có chứa bất cứ điều gì khác hơn

ABCDEFGHIJKLMNOPQRSTUVWXYZ?

+1

Điều gì về số, dấu gạch ngang,!, @, #, $,%, ^, &, *, (,), V.v ...? – PowerUser

+1

Không, đây là danh sách các đảo chữ cái, nên chỉ viết hoa a-z thấp hơn. – Luke

Trả lời

2

Các làm việc sau cho tôi:

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 - Tôi thích giải pháp của tôi, vì nó khá gọn gàng, tuy nhiên bạn dường như nhanh hơn, nếu được áp dụng lặp lại. – Jook

1

giải pháp nhỏ của tôi vào đó, sẽ được sử dụng 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 

Đặt mã này vào một mô-đun, sau đó sử dụng nó như là một công thức cho một định dạng có điều kiện vào các ô bạn muốn thử nghiệm.

Formula sẽ trông như đơn giản như thế này: =demo(A1)

Nếu bạn cần biết thêm thông tin thế này: MSDN

Bạn có thể dĩ nhiên sử dụng VBA để kiểm tra tất cả các tế bào sử dụng:

'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

Bạn có thể sử dụng Conditional Formatting cho việc này sẽ làm nổi bật các tế bào tại chỗ chứ không cần phải kiểm tra mỗi tế bào với một công thức seprate hoặc VBA

Công thức này xác nhận rằng mỗi nhân vật trong A1 là chữ thường 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

Các vấn đề liên quan