Bryan có một trang tính có rất nhiều ô có một số ký tự chữ cái trong chúng. Anh ta đang tìm cách để loại bỏ chỉ những ký tự chữ cái đó, bất kể chúng xuất hiện ở đâu trong phòng giam. Ví dụ: nếu ô chứa “ABC123”, Bryan muốn loại bỏ “ABC”

và chỉ còn lại “123”. Tương tự, “A3B2C1” sẽ trở thành “321”

và “# 45P%” sẽ trở thành “# 45%”.

Cách duy nhất để tiếp cận vấn đề này là sử dụng macro. Nếu bạn muốn đơn giản loại bỏ các ký tự tại chỗ, thì bạn có thể làm như vậy bằng cách chọn các ô bạn muốn ảnh hưởng, sau đó chạy macro kiểm tra từng ô và xóa các ký tự vi phạm. Có nhiều cách bạn có thể làm điều này; macro sau là một cách tiếp cận đơn giản.

Sub CleanText1()

Dim rngCell As Range     Dim intChar As Integer     Dim strCheckString As String     Dim strCheckChar As String     Dim intCheckChar As Integer     Dim strClean As String

For Each rngCell In Selection         strCheckString = rngCell.Value         strClean = ""



For intChar = 1 To Len(strCheckString)

strCheckChar = Mid(strCheckString, intChar, 1)

intCheckChar = Asc(strCheckChar)

Select Case intCheckChar                 Case 65 To 90      'upper case chars                     'Do nothing                 Case 97 To 122     'lower case chars                     'Do nothing                 Case 128 To 151    'special language chars                     'Do nothing                 Case 153 To 154    'special language chars                     'Do nothing                 Case 159 To 165    'special language chars                     'Do nothing                 Case Else                     strClean = strClean & strCheckChar             End Select         Next intChar         rngCell.Value = strClean     Next rngCell End Sub

Điều thú vị về cách tiếp cận này để loại bỏ các ký tự là bạn có thể dễ dàng loại bỏ các ký tự khác bằng cách chỉ cần sửa đổi những gì được chọn (và những hành động được thực hiện) trong cấu trúc Chọn trường hợp.

Nếu bạn không muốn sửa đổi các ô gốc, một cách tiếp cận tốt là kết hợp một hàm do người dùng xác định sẽ trả về phiên bản “sạch” của một chuỗi. Điều này có thể đạt được bằng cách thực hiện một vài sửa đổi đối với macro trước đó.

Function CleanText2(ByVal sRaw As String) As String     Dim intChar As Integer     Dim strCheckString As String     Dim strCheckChar As String     Dim intCheckChar As Integer     Dim strClean As String

Application.Volatile     strClean = ""

For intChar = 1 To Len(sRaw)

strCheckChar = Mid(sRaw, intChar, 1)

intCheckChar = Asc(strCheckChar)

Select Case intCheckChar             Case 65 To 90      'upper case chars                 'Do nothing             Case 97 To 122     'lower case chars                 'Do nothing             Case 128 To 151    'special language chars                 'Do nothing             Case 153 To 154    'special language chars                 'Do nothing             Case 159 To 165    'special language chars                 'Do nothing             Case Else                 strClean = strClean & strCheckChar         End Select     Next intChar     CleanText2 = strClean End Function

Để sử dụng hàm, bạn có thể đặt một công thức như sau vào ô:

=CleanText2(A1)

Kết quả là công thức trả về phiên bản “sạch” của bất kỳ thứ gì có trong ô A1 mà không làm ảnh hưởng đến nội dung của ô A1.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (3219) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: