Tony có một loạt dữ liệu trong một trang tính bao gồm các chữ số và các ký tự khác. Ví dụ: anh ta có thể có một ô chứa “1234567Blue”. Tony muốn có thể tìm ra vị trí ký tự mà tại đó ký tự không phải chữ số đầu tiên xuất hiện. Trong ví dụ của văn bản “1234567Blue” Tony muốn một số cách để tìm ra rằng ký tự không phải chữ số đầu tiên ở vị trí 8.

Có hai cách chính để nhận được giá trị bạn muốn. Đầu tiên là sử dụng công thức mảng để tính toán vị trí. Công thức mảng sau (được nhập bằng cách sử dụng Ctrl + Shift + Enter) sẽ hoạt động trong hầu hết các trường hợp:

=MATCH(TRUE,ISERROR(VALUE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))),0)

Các trường hợp duy nhất mà công thức mảng này sẽ không hoạt động là nếu ô A1 trống hoặc chứa một giá trị số đúng. Nếu danh sách của bạn có thể chứa loại dữ liệu này (hoặc không có dữ liệu nào), thì bạn nên cân nhắc sử dụng công thức mảng dài hơn một chút:

=IF(LEN(A1)=0,0,MIN(IF(1ISNUMBER(1MID(A1,ROW(INDIRECT("A1:A"& LEN(A1))),1))=0,ROW(INDIRECT("A1:A"&LEN(A1))),LEN(A1)+1)))* (ISNUMBER(A1)=FALSE)

Hãy nhớ rằng đó là một công thức mảng duy nhất, được nhập bằng cách sử dụng Ctrl + Shift + Enter. Nó sẽ xử lý đúng các trường hợp A1 không chứa các ký tự không phải chữ số (như trong một ô trống hoặc một giá trị chẳng hạn như “123”).

Một công thức mảng khả thi khác sẽ trả về vị trí mong muốn là như sau. Công thức này sẽ xử lý các ô trống và các giá trị số hoàn toàn tốt, nhưng nó ngắn hơn so với công thức mảng đã trình bày trước đây:

=IFERROR(MATCH(1,ISERR(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)1)1,),)

Tất nhiên, cách khác mà bạn có thể xử lý để tìm ra vị trí của ký tự không phải chữ số đầu tiên là tạo một hàm do người dùng xác định. Có nhiều cách khác nhau để thực hiện một macro như vậy. Một trong những cách dễ nhất để triển khai macro là chỉ cần bước qua từng ký tự trong bất kỳ ký tự nào được chuyển đến macro. Khi một ký tự được tìm thấy nằm ngoài dải mã ASCII cho các chữ số (48 đến 57), thì bạn biết mình đã tìm thấy vị trí đầu tiên. Macro sau đây cho thấy một cách để thực hiện loại kỹ thuật này:

Function FirstNonDigit(str As String)

Dim iChar As Integer     Dim iPos As Integer     Dim J As Integer

Application.Volatile     iPos = 0     For J = 1 To Len(str)

iChar = Asc(Mid(str, J, 1))

If iChar <= 47 Or iChar >= 58 Then             iPos = J             Exit For         End If     Next J     FirstNonDigit = iPos End Function

Để sử dụng hàm, chỉ cần sử dụng một công thức như sau trong trang tính của bạn:

=FirstNonDigit(A1)

Nếu ô bạn tham chiếu trống hoặc nếu nó chỉ chứa các chữ số, thì hàm trả về giá trị 0.

_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 (10610) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: