Bill có một cột văn bản trong đó anh ta cần thay thế tất cả các trường hợp của các chữ cái bằng số đại diện cho vị trí của chữ cái trong bảng chữ cái. Vì vậy, ví dụ: nếu một ô chứa “T10A22”, thì Bill cần thay thế các ký tự như “2010122”, trong đó T được thay thế bằng 20 và A được thay thế bằng 1. Anh ấy lưu ý rằng có thể có bất kỳ số chữ cái nào trong bất kỳ ô đã cho.

Nếu bạn chỉ cần thực hiện việc này một lần (trong một trang tính), bạn có thể dễ dàng chọn cột và chỉ cần sử dụng Tìm và Thay thế. Bạn có thể tìm kiếm A và thay thế bằng 1, tìm kiếm B và thay thế bằng 2, v.v. Sẽ chỉ có 26 lần lặp để thực hiện, điều này nghe có vẻ khó khăn nhưng có thể được thực hiện trong thời gian ngắn hơn so với việc tạo macro để thực hiện các thay đổi.

Điều đó đang được nói, nếu bạn phải thực hiện nhiệm vụ này thường xuyên, thì macro là giải pháp tốt nhất của bạn. Bạn có thể triển khai phương pháp Tìm và Thay thế bằng cách sử dụng macro theo cách sau:

Sub ReplaceLetters1()

Selection.Replace What:="A", Replacement:="1", LookAt:=xlPart, _       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _       ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2     Selection.Replace What:="B", Replacement:="2"

Selection.Replace What:="C", Replacement:="3"

Selection.Replace What:="D", Replacement:="4"

Selection.Replace What:="E", Replacement:="5"

Selection.Replace What:="F", Replacement:="6"

Selection.Replace What:="G", Replacement:="7"

Selection.Replace What:="H", Replacement:="8"

Selection.Replace What:="I", Replacement:="9"

Selection.Replace What:="J", Replacement:="10"

Selection.Replace What:="K", Replacement:="11"

Selection.Replace What:="L", Replacement:="12"

Selection.Replace What:="M", Replacement:="13"

Selection.Replace What:="N", Replacement:="14"

Selection.Replace What:="O", Replacement:="15"

Selection.Replace What:="P", Replacement:="16"

Selection.Replace What:="Q", Replacement:="17"

Selection.Replace What:="R", Replacement:="18"

Selection.Replace What:="S", Replacement:="19"

Selection.Replace What:="T", Replacement:="20"

Selection.Replace What:="U", Replacement:="21"

Selection.Replace What:="V", Replacement:="22"

Selection.Replace What:="W", Replacement:="23"

Selection.Replace What:="X", Replacement:="24"

Selection.Replace What:="Y", Replacement:="25"

Selection.Replace What:="Z", Replacement:="26"

End Sub

Để sử dụng macro, chỉ cần chọn các ô bạn muốn xử lý và sau đó chạy nó. Bạn cũng có thể sử dụng một cách tiếp cận khác dựa trên vòng lặp For …​ Tiếp theo, theo cách này:

Sub ReplaceLetters2()

Dim J As Integer

Selection.Replace What:="A", Replacement:="1", LookAt:=xlPart, _         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _         ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2     For J = 66 To 90         Selection.Replace What:=Chr(J), Replacement:=J - 64     Next J End Sub

Trong khi thao tác .Replace đầu tiên có thể được đặt bên trong vòng lặp For …​ Next, tôi đã chọn giữ nó riêng biệt để (ít nhất là với tôi) vòng lặp có vẻ đơn giản hơn. Đây là một sự lựa chọn phong cách hơn bất cứ điều gì khác.

Nếu vì lý do nào đó, bạn không muốn sử dụng phương thức .Replace, bạn có thể sử dụng phương pháp cũ là xem xét từng nhân vật trong bất kỳ điều gì bạn đang đánh giá. Đây là cách tiếp cận được sử dụng trong hàm do người dùng định nghĩa này:

Function LetterToNum(c As Range) As String     Dim sRaw As String     Dim J As Integer

sRaw = UCase(c)

For J = 1 To 26         sRaw = Replace(sRaw, Chr(J + 64), J)

Next J     LetterToNum = sRaw End Function

Để sử dụng chức năng này, chỉ cần đặt thông tin sau vào trang tính của bạn, trong đó A1 là ô bạn muốn chuyển đổi:

=LetterToNum(A1)

Nếu bạn không thích sử dụng macro, thì bạn có thể sử dụng một công thức khá dài để thực hiện chuyển đổi ô:

=TEXTJOIN("",FALSE, IF(ISNUMBER(VALUE(MID(A1,SEQUENCE(1,LEN(A1)),1))), MID(A1,SEQUENCE(1,LEN(A1)),1), COLUMN(INDIRECT(MID(A1,SEQUENCE(1,LEN(A1)),1) & ":" & MID(A1,SEQUENCE(1,LEN(A1)),1)))))

Công thức này giả định rằng văn bản bạn muốn chuyển đổi nằm trong ô A1. Về cơ bản, nó sẽ xem xét từng ký tự trong chuỗi văn bản và xác định xem nó có phải là một chữ số hay không. Nếu có, thì nó sử dụng ký tự gốc; nếu không, thì nó sử dụng hàm INDIRECT để xác định một cột dựa trên ký tự và sau đó sử dụng COLUMN để trả về giá trị số cho cột đó. Tất cả điều này sau đó được kết hợp lại bằng cách sử dụng hàm TEXTJOIN.

_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 (7820) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365.