Kết hợp hai chữ cái đầu tiên từ tên đầu tiên và hai chữ cái đầu tiên từ tên cuối cùng


9

Tôi có một bảng tính tên người dùng.

Tên và họ nằm trong cùng một ô của cột A.

Có một công thức sẽ ghép hai chữ cái đầu của tên đầu tiên (từ đầu tiên) và hai chữ cái đầu của tên cuối cùng (từ thứ hai)?

Ví dụ John Doe, nên trở thành JoDo.

Tôi đã thử

=LEFT(A1)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,IFERROR(FIND(" ",SUBSTITUTE(A1," ","",1)),LEN(A1))-IFERROR(FIND(" ",A1),LEN(A1)))

nhưng điều này mang lại cho tôi JoDoenhư là kết quả.



Có bất kỳ câu trả lời làm lừa? (Nếu vậy, bạn có thể vui lòng gắn cờ là Câu trả lời bằng cách nhấp vào dấu kiểm bên trái của bài đăng.)
BruceWayne

Câu trả lời:


15

Đúng; giả sử mỗi người chỉ có Tên và Họ và tên này luôn được phân tách bằng khoảng trắng bạn có thể sử dụng bên dưới:

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

Tôi chỉ có thể dựa trên câu trả lời này vì đó là tất cả những gì bạn cung cấp.

Hoặc nếu bạn muốn bao gồm một không gian:

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

2
@prweq không có probs, chấp nhận nó là chính xác nếu nó hoạt động cho bạn
PeterH 10/12/18

Giải pháp đơn giản và dễ hiểu nhất. (Chà, ngoại trừ việc sử dụng FIND()thay vì SEARCH();-)) Vì bạn cho rằng luôn có một dấu tách không gian, nên công thức thứ hai của bạn có thể được đơn giản hóa thành=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
robinCTS

4
@RajeshS tôi biết. Đó là lý do tại sao câu trả lời của tôi bắt đầu bằngassuming each person only has a First and Last name
PeterH

2
Các lập trình viên sai lầm tin vào tên ; không phải là sẽ hợp lý khi xử lý tất cả các trường hợp đó ngay từ đầu nếu phần mềm của bạn không có phạm vi quốc tế
Aaron

1
Tôi đề nghị TRIM(LEFT(A1,2))chỉ trong trường hợp tên của họ chỉ có một chữ cái, nhưng nó cũng có thể đủ dễ dàng để kiểm tra các trường hợp đặc biệt đó bằng tay.
Kỹ sư Toast

11

Và để làm tròn mọi thứ, đây là một giải pháp sẽ trả về hai ký tự đầu tiên của tên đầu tiên và hai ký tự đầu tiên của tên cuối cùng, nhưng cũng chiếm tên đệm.

=LEFT(A1,2)&LEFT(MID(A1,FIND("~~~~~",SUBSTITUTE(A1," ","~~~~~",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+1,LEN(A1)),2)

nhập mô tả hình ảnh ở đây

Cảm ơn @Kyle cho phần chính của công thức


1
Bạn đánh tôi với nó ;-) (Đã quá nửa đêm và tôi cần ngủ - đã lên kế hoạch thêm câu này vào câu trả lời của tôi sau đó.) Một cải tiến nhỏ cho công thức của bạn sẽ là sử dụng một ~thay vì bốn. Nếu bạn lo ngại rằng một Tilda có thể được sử dụng như một phần của tên (!) Hoặc, nhiều khả năng, đã vô tình gõ, chỉ cần sử dụng một ký tự không xuất hiện trên bất kỳ bàn phím nào. Tôi thích sử dụng §. là một trong những tốt.
robinCTS

@BruceWayne ,, Công thức của bạn có thẩm quyền hơn ,,, vì nó chỉ truy cập Fumps & Họ bỏ qua Tên đệm ,,, Up đã bình chọn ☺
Rajesh S

@RajeshS Thế còn những người có tên Tây Ban Nha , chẳng hạn như cựu tay đua F1 Fernando Alonso Díaz , người có 1 tên, 2 họ và không có tên đệm? (Hoặc thậm chí là Vua Felipe Juan Pablo Alfonso de Todos los Santos de Borbón y de Grecia ?)
Chronocidal

2
@Chronocidal bây giờ chúng ta sẽ đi xuống hố thỏ về những gì lập trình viên tin về tên
BruceWayne

1
@robinCTS - Gọi tốt! Tôi đã nhận được công thức từ một câu trả lời khác (được chỉnh sửa) và không thực sự đào sâu quá nhiều. Cảm ơn vì những lời khuyên!
BruceWayne

9

Đây là một cách khác ...

Ảnh chụp màn hình của bảng tính

  • Một cái tên
  • B - =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))

Bạn có thể đi xa hơn và loại bỏ tất cả các cột bổ sung bằng cách hợp nhất chúng=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
PeterH

Vâng, tôi đã làm điều đó một vài phút sau!
Stese

vâng tôi nhận thấy bạn đã chỉnh sửa câu trả lời, Nice answer!
PeterH

5

Trước hết, tôi muốn nói rằng câu trả lời của PeterH là đơn giản và dễ hiểu nhất. (Mặc dù sở thích của tôi là sử dụng FIND()thay vì SEARCH()- nhập hai ký tự ít hơn giúp tránh RSI ;-))

Một câu trả lời thay thế không sử dụng MID(), LEFT()cũng không RIGHT(), mà thay vào đó sử dụng REPLACE()để loại bỏ các phần không mong muốn của tên như sau:

=REPLACE(REPLACE(A1,FIND(" ",A1)+3,LEN(A1),""),3,FIND(" ",A1)-2,"")

Giải trình:

Bên trong REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")loại bỏ các ký tự từ ký tự thứ ba của tên cuối cùng trở đi, trong khi bên ngoài loại bỏ các ký tự từ ký tự thứ ba của tên đầu tiên lên đến và bao gồm cả khoảng trắng.REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")


Phụ lục 1:

Công thức trên cũng có thể được điều chỉnh để cho phép một tên đệm duy nhất:

=REPLACE(REPLACE(A1,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))+3,LEN(A1),""),3,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))-2,"")

bằng cách thay thế FIND(" ",A1)bằng IFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1)).

FIND(" ", A1, FIND(" ",A1)+1)tìm không gian thứ hai (bằng cách bắt đầu tìm kiếm khoảng trắng sau khoảng trắng thứ nhất) hoặc lỗi khác. tìm không gian thứ nhất nếu không có không gian thứ hai.
IFERROR(find_second_space, FIND(" ",A1))


Phiên bản (dài hơi) này cho phép bất kỳ số lượng tên đệm:

=REPLACE(REPLACE(A1,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+3,LEN(A1),""),3,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))-2,"")

Trong trường hợp FIND(" ",A1)này được thay thế bằng FIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))).

LEN(A1)-LEN(SUBSTITUTE(A1," ",""))đếm số lượng không gian. thay thế không gian cuối cùng với . tìm cái đầu tiên giống như tìm chỗ trống cuối cùng.
SUBSTITUTE(A1, " ", "§", count_of_spaces)§
FIND("§", last_space_replaced_string)§

(Tất §nhiên, có thể được thay thế bằng bất kỳ ký tự nào được đảm bảo không tồn tại trong chuỗi tên đầy đủ. Một cách thay thế tổng quát hơn, an toàn hơn sẽ được sử dụng CHAR(1).)


Tất nhiên, lưu ý rằng, câu trả lời của BruceWayne là giải pháp đơn giản và dễ hiểu nhất cho phép sử dụng bất kỳ số lượng tên đệm nào. Vâng, nó đã được. Cho đến khi tôi đăng câu trả lời khác của mình , đó là ;-)


Phụ lục 2:

Tất cả các giải pháp có thể được điều chỉnh để chỉ phục vụ cho trường hợp chỉ một tên (nếu có yêu cầu cho kết quả bốn ký tự) bằng cách gói chúng trong một IFERROR()hàm như vậy:

=IFERROR(solution, alternate_formula)

Lưu ý rằng ở trên là một công thức trường hợp chung và có thể thực hiện một sửa đổi hiệu quả hơn cho một giải pháp cụ thể. Ví dụ: nếu yêu cầu trong trường hợp một tên là tham gia hai chữ cái đầu tiên với hai chữ cái cuối cùng, câu trả lời của PeterH có thể được điều chỉnh hiệu quả hơn theo cách này:

=LEFT(A1,2)&MID(A1,IFERROR(SEARCH(" ",A1)+1,LEN(A1)-1),2)


Để cho phép trường hợp tên đầu tiên của một chữ cái hoặc chữ cái đầu (giả sử không gian hoặc dấu chấm không được chấp nhận là ký tự thứ hai), có thể sử dụng cách sau với bất kỳ giải pháp nào:

=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))

Lưu ý rằng ký tự đơn có thể được mã hóa cứng hoặc được tính từ tên. (Hoặc sử dụng ""để xóa khoảng trắng hoặc dấu chấm.)


Cuối cùng, nếu bạn thực sự cần phục vụ cho trường hợp tên đầy đủ chỉ là một ký tự (!), Chỉ cần bọc công thức chỉ một tên với tên khácIFERROR() . (Tất nhiên, giả sử rằng công thức thay thế không quan tâm đến trường hợp đặc biệt đó.)


Phụ lục 3:

Cuối cùng, cuối cùng (không, thực sự * ;-)) để phục vụ cho nhiều không gian liên tiếp và / hoặc hàng đầu / dấu, hãy sử dụng TRIM(A1)thay vì A1.


* Tôi sẽ để lại trường hợp cho một tên họ, như Mr T, như một bài tập cho người đọc.

Dấu: =solution &IF(MID(A1,LEN(A1)-1,1)=" ", single_char, "")


1
Như mọi khi, câu trả lời của bạn trông giống như từ hướng dẫn sử dụng Excel nâng cao! Đây sẽ là câu trả lời được bình chọn hàng đầu nếu bạn đăng nó trước đó!
PeterH

@PeterH Cảm ơn đã bổ sung. Tôi chỉ vấp phải câu hỏi một khi nó trúng danh sách Câu hỏi về mạng nóng, vì vậy tôi đã đến bữa tiệc muộn một chút ;-)
robinCTS

2

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 A1khô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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.