Dựa trên câu trả lời này , đây là một giải pháp tao nhã hoạt động với bất kỳ số lượng tên đệm nào:
=LEFT(A1,2)&LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1))),2)
Giải trình:
SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))
thay thế (các) không gian giữa các từ bằng các khoảng trắng bằng số với độ dài của toàn bộ chuỗi. Sử dụng độ dài chuỗi thay vì số lượng lớn tùy ý đảm bảo công thức hoạt động cho bất kỳ chuỗi độ dài nào và có nghĩa là nó hoạt động rất hiệu quả.
RIGHT(space_expanded_string, LEN(A1))
trích từ ngoài cùng bên phải được chuẩn bị bởi một loạt các khoảng trắng. *
TRIM(space_prepended_rightmost_word)
trích từ ngoài cùng bên phải.
LEFT(rightmost_word, 2)
trích hai ký tự đầu tiên của từ ngoài cùng bên phải (tên cuối cùng).
* Hãy cẩn thận: Nếu tên người dùng có thể chứa dấu cách, bạn cần thay thế đối số đầu tiên của SUBSTITUTE()
, ví dụ A1
, bằng TRIM(A1)
. Khoảng trắng hàng đầu và nhiều khoảng trắng liên tiếp giữa các từ được xử lý chính xác chỉ với A1
.
Sửa lỗi của bạn
Nhìn kỹ hơn vào giải pháp đã cố gắng của bạn, có vẻ như bạn đã rất gần với một công thức làm việc để ghép hai chữ cái đầu tiên của từ đầu tiên (nghĩa là tên đầu tiên) và hai chữ cái đầu tiên của từ thứ hai nếu nó tồn tại.
Lưu ý rằng nếu tên người dùng chứa tên đệm, công thức đã sửa sẽ lấy không chính xác hai chữ cái đầu tiên từ tên đệm đầu tiên thay vì từ tên cuối cùng (giả sử ý định của bạn thực sự là trích xuất chúng từ tên cuối cùng).
Ngoài ra, nếu tất cả tên người dùng chỉ bao gồm tên, hoặc tên và họ, thì công thức rất phức tạp và có thể được đơn giản hóa.
Để xem công thức hoạt động như thế nào và để sửa nó, sẽ dễ dàng hơn nếu nó được chỉnh sửa, như vậy:
=
LEFT(A1,2) &
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
IFERROR(
FIND(" ", SUBSTITUTE(A1," ","",1)),
LEN(A1)
)
- IFERROR(FIND(" ",A1), LEN(A1))
)
Để hiểu cách thức hoạt động của nó, trước tiên hãy xem những gì xảy ra khi A1
không chứa khoảng trắng (nghĩa là nó chỉ chứa một tên duy nhất). Tất cả các IFERROR()
hàm ước tính cho các đối số thứ hai của chúng vì FIND()
trả về #VALUE!
lỗi nếu không tìm thấy chuỗi tìm kiếm trong chuỗi mục tiêu:
=
LEFT(A1,2) &
MID(
A1,
LEN(A1) + 1,
LEN(A1)
-LEN(A1)
)
Đối số thứ ba của MID()
ước lượng bằng 0, do đó, đầu ra hàm ""
và kết quả công thức là hai ký tự đầu tiên của tên duy nhất.
Bây giờ hãy nhìn vào khi có chính xác hai tên (tức là có chính xác một khoảng trắng). Các IFERROR()
hàm thứ nhất và thứ ba đánh giá các đối số đầu tiên của chúng, nhưng hàm thứ hai đánh giá đối số thứ hai của nó vì FIND(" ", SUBSTITUTE(A1," ","",1))
đang cố gắng tìm một không gian khác sau khi loại bỏ đối số thứ nhất và duy nhất:
=
LEFT(A1,2) &
MID(
A1,
FIND(" ",A1) + 1,
LEN(A1)
- FIND(" ",A1)
)
Rõ ràng, MID()
trả lại toàn bộ từ thứ hai (tức là tên cuối cùng) và kết quả công thức là hai ký tự đầu tiên của tên theo sau là tất cả các ký tự của tên cuối cùng.
Để hoàn thiện hơn, chúng ta cũng sẽ xem xét trường hợp có ít nhất ba tên, mặc dù bây giờ khá rõ ràng về cách sửa công thức. Lần này, tất cả các IFERROR()
hàm đánh giá các đối số đầu tiên của chúng:
=
LEFT(A1,2) &
MID(
A1,
FIND(" ",A1) + 1,
FIND(" ", SUBSTITUTE(A1," ","",1))
- FIND(" ",A1)
)
Nó hơi rõ ràng hơn so với trường hợp trước, nhưng MID()
trả về chính xác toàn bộ từ thứ hai (tức là tên đệm đầu tiên). Do đó, kết quả công thức là hai ký tự đầu tiên của tên đầu tiên theo sau là tất cả các ký tự của tên đệm đầu tiên.
Rõ ràng, cách khắc phục là sử dụng LEFT()
để có được hai ký tự đầu tiên của MID()
đầu ra:
=
LEFT(A1,2) &
LEFT(
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
IFERROR(
FIND(" ", SUBSTITUTE(A1," ","",1)),
LEN(A1)
)
- IFERROR(FIND(" ",A1), LEN(A1))
),
2
)
Đơn giản hóa tôi đã đề cập ở trên là để thay thế LEFT(MID(…,…,…), 2)
bằng MID(…,…,2)
:
=
LEFT(A1,2) &
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
2
)
hoặc trên một dòng:
=LEFT(A1,2)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,2)
Đây thực chất là giải pháp của PeterH được sửa đổi để cũng hoạt động với các tên đơn (trong trường hợp đó, kết quả chỉ là hai ký tự đầu tiên của tên).
Lưu ý: Các công thức được bổ sung thực sự hoạt động nếu được nhập.