Rajeev cần một công thức sẽ trích xuất các chữ cái đầu tiên của một loạt các từ. Ví dụ: nếu một ô chứa văn bản “Rajeev Kumar Pandey”, anh ta muốn trích xuất các ký tự “RKP” vào một ô khác.

Số lượng từ trong chuỗi có thể khác nhau giữa các ô.

Có một số cách để tiếp cận nhiệm vụ này. Trước hết, giả định rằng bạn không muốn sửa đổi cấu trúc trang tính của mình bằng cách thêm các cột trung gian. Giả định này cũng loại trừ việc sử dụng tính năng Văn bản thành Cột để chia chuỗi gốc thành các từ riêng lẻ.

Chìa khóa của vấn đề là đảm bảo rằng công thức của bạn có thể xác định vị trí của khoảng trắng trong chuỗi ban đầu. Bạn có thể nghĩ rằng một công thức như sau sẽ thực hiện công việc:

=LEFT(A1,1)&MID(A1,FIND(" ",A1,1)+1,1)&MID(A1, FIND(" ",A1,FIND(" ",A1,1)+1)+1,1)

Công thức này hoạt động một phần. Nó hoạt động tốt nếu chuỗi gốc có hai khoảng trắng ngăn cách ba từ. Nếu có ít từ hơn thì công thức sẽ trả về lỗi. Nếu có thêm bất kỳ từ nào, thì nó chỉ trả về các chữ cái đầu tiên của ba từ đầu tiên (nó bỏ qua bất kỳ thứ gì sau từ thứ ba).

Điều này có nghĩa là công thức không chỉ cần kiểm tra khoảng trắng mà còn phải xử lý lỗi nếu không có khoảng trắng hoặc nếu có quá ít khoảng trắng. Việc kiểm tra lỗi có nghĩa là công thức trở nên dài hơn nhiều:

=IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)

&MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1)

&MID(A1,SEARCH(" ",A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1)+1,1)), IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)

&MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1)), IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)), IF(ISERR(LEFT(A1,1)),"",LEFT(A1,1)),LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)), LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)&MID(A1,SEARCH(" ",A1, SEARCH(" ",A1)+1)+1,1)),LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)

&MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1)

&MID(A1,SEARCH(" ",A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1)+1,1))

Công thức này sẽ xử lý, đúng cách, bất kỳ thứ gì từ 0 đến 4 từ trong một chuỗi. Nó cũng giả định rằng chuỗi không bắt đầu hoặc kết thúc bằng dấu cách và không chứa nhiều khoảng cách giữa các từ. Nếu bạn muốn xử lý số lượng từ lớn hơn hoặc các biến chứng tiềm ẩn khác (chẳng hạn như số khoảng cách giữa các từ), thì tốt nhất là sử dụng một hàm do người dùng xác định.

Có bất kỳ cách nào mà một hàm do người dùng xác định có thể kéo các ký tự đứng đầu từ các từ của một chuỗi. Trên thực tế, tôi đã nhận được khá nhiều biến thể đạt được điều tương tự. Tuy nhiên, ví dụ sau có lẽ là đoạn mã ngắn gọn nhất mà tôi đã xem qua:

Function Initials1(Raw As String) As String     Dim Temp As Variant     Dim J As Integer

Application.Volatile     Temp = Split(Trim(Raw))



For J = 0 To UBound(Temp)

Initials1 = Initials1 & Left(Temp(J), 1)

Next J End Function

Mã này sẽ hoạt động trong bất kỳ phiên bản nào của VBA bắt đầu với Excel 2000. Hàm Split “xé nhỏ” một chuỗi dựa trên vị trí xuất hiện khoảng trắng bên trong nó. Các từ riêng lẻ trong chuỗi được đặt vào một mảng (trong trường hợp này là Temp), nơi bạn có thể truy cập các từ riêng lẻ. Để sử dụng hàm trong trang tính của bạn, chỉ cần sử dụng một cái gì đó như sau:

=Initials1(A1)

Nếu bạn đang sử dụng phiên bản Excel không hỗ trợ chức năng Split, thì đoạn mã sau cũng sẽ hoạt động tốt:

Function Initials2(Raw As String)

Dim p As Integer

Application.Volatile     Initials2 = ""

p = 0     Do         Initials2 = Trim(Initials2) & Mid(Raw, p + 1, 1)

p = InStr(p + 1, Raw, " ")

Loop Until p = 0 End Function

_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 (8661) á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: