2013-03-30 17 views
9

Tôi cần xóa tất cả các ký tự không phải chữ và số từ một chuỗi trừ khoảng thời gian và khoảng trắng trong Excel. Một giải pháp sử dụng VBA chứ không phải là các hàm excel thuần túy là tốt.Làm thế nào để loại bỏ tất cả các ký tự không phải chữ và số từ một chuỗi ngoại trừ dấu chấm và dấu cách trong excel?

+0

Xem câu hỏi này, ngoại trừ một phần thời gian/không gian. Mẫu của bạn sẽ giống như [AZ, az, 0-9, \., \ S] http://stackoverflow.com/questions/10789948/remove-non-numeric-characterst-from-excel – Alexander

Trả lời

26

Chèn chức năng này vào một module mới trong Visual Basic Editor:

Function AlphaNumericOnly(strSource As String) As String 
    Dim i As Integer 
    Dim strResult As String 

    For i = 1 To Len(strSource) 
     Select Case Asc(Mid(strSource, i, 1)) 
      Case 48 To 57, 65 To 90, 97 To 122: 'include 32 if you want to include space 
       strResult = strResult & Mid(strSource, i, 1) 
     End Select 
    Next 
    AlphaNumericOnly = strResult 
End Function 

Bây giờ bạn có thể sử dụng điều này như một tài Xác định chức năng, tức là nếu dữ liệu của bạn là trong phòng giam A1, đặt công thức này trong một sản phẩm nào ô =AlphaNumericOnly(A1).

Nếu bạn muốn chuyển đổi một phạm vi rộng lớn trực tiếp, tức là thay thế tất cả các ký tự không phải chữ mà không để lại nguồn, bạn có thể làm điều này với một VBA thói quen:

Sub CleanAll() 
    Dim rng As Range 

    For Each rng In Sheets("Sheet1").Range("A1:K1500").Cells 'adjust sheetname and range accordingly 
     rng.Value = AlphaNumericOnly(rng.Value) 
    Next 
End Sub 

Đơn giản chỉ cần đặt phụ này trong cùng một và thực thi nó. Tuy nhiên, hãy lưu ý rằng điều này sẽ thay thế bất kỳ công thức nào trong phạm vi.

+0

Albert, nhanh, cảm ơn bạn. Tôi sẽ thử nó vào ngày mai. Như tôi đã nói tôi biết rất ít về excel, bạn có thể giải thích làm thế nào để sử dụng chức năng tôi cần để chạy nó trên toàn bộ bảng excel của tôi. Điều này thường sẽ có 11 cột và khoảng 1500 hàng nhưng điều này rất có thể. Cảm ơn bạn điều này được đánh giá cao – xyz

+0

Albert, đó là nhanh chóng, cảm ơn bạn. Tôi sẽ thử nó vào ngày mai. Như tôi đã nói tôi biết rất ít về excel, bạn có thể giải thích làm thế nào để sử dụng chức năng tôi cần để chạy nó trên toàn bộ bảng excel của tôi. Điều này thường sẽ có 11 cột và khoảng 1500 hàng nhưng điều này rất có thể. Cảm ơn bạn điều này được nhiều đánh giá cao – xyz

+0

Xem chỉnh sửa của tôi - hy vọng nó trả lời hầu hết câu hỏi của bạn –

2

Tôi đã viết mã sau và nó hoạt động theo như tôi đã thử nghiệm, nó bao gồm hai chức năng. Kiểm tra đầu tiên cho dù một chuỗi là chữ và số và thứ hai làm cho việc thay thế (nó cũng loại bỏ không gian)

Public Function Isalphanumeric(cadena As String) As Boolean 

    Select Case Asc(UCase(cadena)) 
     Case 65 To 90 'letras 
      Isalphanumeric = True 
     Case 48 To 57 'numeros 
      Isalphanumeric = True 
     Case Else 
      Isalphanumeric = False 

    End Select 

End Function 

Và đây đi hàm remove

Function RemoveSymbols_Enhanced(InputString As String) As String 

Dim InputString As String 
Dim CharactersArray() 
Dim i, arrayindex, longitud As Integer 
Dim item As Variant 


i = 1 
arrayindex = 0 
longitud = Len(InputString) 

'We create an array with non alphanumeric characters 
For i = 1 To longitud 

    If Isalphanumeric(Mid(InputString, i, 1)) = False Then 
    ReDim Preserve CharactersArray(arrayindex) 
    CharactersArray(arrayindex) = Mid(InputString, i, 1) 
    arrayindex = arrayindex + 1 

    End If 

    Next 

'For each non alphanumeric character we do a replace 
For Each item In CharactersArray 
    item = CStr(item) 
    InputString = Replace(InputString, item, "") 
Next 


End Function 
+1

Andoni rất đẹp, cảm ơn bạn – xyz

+0

bạn được chào đón! – Andoni