Bill thường phải nhập thông tin vào một trang tính để anh ta có thể xử lý nó cho công ty của mình. Trong tình huống của Bill, một trong những bước đầu tiên anh ta cần làm là xóa tất cả các ký tự ASCII 8 bit có thể có trong dữ liệu đã nhập. Những ký tự này không cần phải được thay thế bằng bất cứ thứ gì; chúng chỉ cần được xóa để chỉ còn lại các ký tự ASCII 7-bit. Bill tự hỏi liệu có cách nào dễ dàng để làm điều này, có lẽ với một số loại macro.

Có một số cách mà bạn có thể tiếp cận vấn đề này, tùy thuộc vào đặc điểm của dữ liệu mà bạn đang bắt đầu. Giả sử rằng bạn chỉ có các ký tự 8 bit trong trang tính của mình, thì mã ký tự duy nhất có thể được sử dụng cho các ký tự là 0 đến 255. Nếu bạn muốn giới hạn dữ liệu của mình chỉ với các ký tự 7 bit, thì điều đó có nghĩa là bạn chỉ muốn trong phạm vi mã ký tự từ 0 đến 127. Vì vậy, bạn có thể sử dụng macro để dễ dàng tìm kiếm bất kỳ ký tự nào trong phạm vi 128 đến 255 và chỉ cần xóa chúng. Macro này thực hiện cách tiếp cận này:

Sub Remove8Bit1()

Cells.Select     For i = 128 To 255         X = Chr(i)

Selection.Replace What:=X, Replacement:="", _           LookAt:=xlPart, SearchOrder:=xlByRows, _           MatchCase:=False, SearchFormat:=False, _           ReplaceFormat:=False     Next End Sub

Phương pháp này chỉ tìm các giá trị trong trang tính của bạn nằm trong phạm vi 8 bit. Nó sẽ không chạm vào bất cứ thứ gì nằm trong phạm vi 8-bit thực sự được tạo ra bởi một công thức. (Trong hầu hết các trường hợp, đó không phải là vấn đề. Nếu đó là vấn đề, cách khắc phục thích hợp là sửa đổi các công thức tạo ra kết quả vi phạm.)

Nếu dữ liệu của bạn chứa các ký tự Unicode, thì bạn sẽ muốn sử dụng một cách tiếp cận khác. Về mặt kỹ thuật, các ký tự Unicode không phải là các ký tự 8 bit; chúng là các ký tự 16 bit và có thể có giá trị mã ký tự trong khoảng từ 0 đến 65,535. Bởi vì bạn muốn bỏ qua bất kỳ thứ gì có giá trị trên 127, việc sử dụng phương pháp dựa trên tìm kiếm được thảo luận trước đó trở nên khó sử dụng — bạn sẽ thực hiện hơn 65.000 tìm kiếm thay vì chỉ 128.

Một cách tiếp cận tốt hơn là chỉ cần xem xét tất cả các ký tự trong tất cả các ô đã chọn và nếu chúng có mã ký tự trên 127, hãy bỏ qua chúng.

Đó là cách tiếp cận được thực hiện trong macro sau:

Sub Remove8Bit2()

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 = Ascw(strCheckChar)

If intCheckChar < 128 Then                 strClean = strClean & strCheckChar             End If         Next intChar         rngCell.Value = strClean     Next rngCell End Sub

Lưu ý rằng macro sử dụng hàm Ascw thay vì hàm Asc truyền thống để nó xem xét các giá trị Unicode.

_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 (3142) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy 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: