ก่อนอื่นฉันอยากจะบอกว่าคำตอบของ PeterHนั้นง่ายและเข้าใจง่ายที่สุด (แม้ว่าการตั้งค่าของฉันคือการใช้FIND()
แทนSEARCH()
- การพิมพ์ตัวอักษรน้อยสองตัวช่วยในการหลีกเลี่ยง RSI ;-))
คำตอบทางเลือกที่ใช้ค่าMID()
, LEFT()
มิได้RIGHT()
แต่แทนที่จะใช้REPLACE()
เพื่อลบส่วนที่ไม่ต้องการของชื่อมีดังนี้
=REPLACE(REPLACE(A1,FIND(" ",A1)+3,LEN(A1),""),3,FIND(" ",A1)-2,"")
คำอธิบาย:
ด้านในREPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")
จะลบอักขระออกจากอักขระตัวที่สามของนามสกุลเป็นต้นไปในขณะที่ส่วนนอกจะลบอักขระออกจากอักขระตัวที่สามของชื่อแรกจนถึงและรวมถึงช่องว่างREPLACE(inner_replace, 3, FIND(" ",A1)-2, "")
ภาคผนวก 1:
สูตรด้านบนสามารถปรับเปลี่ยนเพื่ออนุญาตให้มีชื่อกลางเดียว:
=REPLACE(REPLACE(A1,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))+3,LEN(A1),""),3,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))-2,"")
โดยการแทนที่ด้วยFIND(" ",A1)
IFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1))
FIND(" ", A1, FIND(" ",A1)+1)
ค้นหาช่องว่างที่สอง (โดยเริ่มต้นค้นหาช่องว่างหลังจากช่องว่างแรก) หรือข้อผิดพลาดเป็นอย่างอื่น ค้นหาช่องว่างแรกหากไม่มีช่องว่างที่สอง
IFERROR(find_second_space, FIND(" ",A1))
เวอร์ชั่นนี้ใช้ชื่อกลางได้ไม่ จำกัด จำนวน:
=REPLACE(REPLACE(A1,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+3,LEN(A1),""),3,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))-2,"")
ในกรณีนี้จะถูกแทนที่ด้วยFIND(" ",A1)
FIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))
LEN(A1)-LEN(SUBSTITUTE(A1," ",""))
นับจำนวนช่องว่าง แทนที่พื้นที่สุดท้ายด้วย ค้นหาแรกซึ่งเหมือนกับการค้นหาช่องว่างสุดท้าย
SUBSTITUTE(A1, " ", "§", count_of_spaces)
§
FIND("§", last_space_replaced_string)
§
( §
แน่นอนได้ถูกแทนที่ด้วยอักขระใด ๆ ที่รับประกันว่าจะไม่มีอยู่ในสตริงชื่อเต็มอีกทางเลือกที่ปลอดภัยกว่าคือการใช้CHAR(1)
)
โปรดทราบว่าแน่นอนคำตอบของ BruceWayneเป็นวิธีที่ง่ายและเข้าใจง่ายที่สุดในการแก้ปัญหาที่อนุญาตให้มีชื่อกลางจำนวนเท่าใดก็ได้ มันเป็นอย่างนั้น จนกว่าฉันจะโพสต์คำตอบอื่น ๆของฉันนั่นคือ ;-)
ภาคผนวก 2:
โซลูชันทั้งหมดสามารถปรับให้รองรับกรณีชื่อเดียวเท่านั้น (หากมีความต้องการผลอักขระสี่ตัว) โดยใส่ไว้ในIFERROR()
ฟังก์ชันดังนี้:
=IFERROR(solution, alternate_formula)
โปรดทราบว่าข้างต้นเป็นสูตรเคสทั่วไปและอาจเป็นไปได้ที่จะทำการแก้ไขที่มีประสิทธิภาพมากขึ้นสำหรับโซลูชันเฉพาะ ตัวอย่างเช่นหากความต้องการในกรณีของชื่อเดียวคือการรวมตัวอักษรสองตัวแรกกับตัวอักษรสองตัวสุดท้ายคำตอบของ PeterHสามารถปรับได้อย่างมีประสิทธิภาพมากขึ้นด้วยวิธีนี้:
=LEFT(A1,2)&MID(A1,IFERROR(SEARCH(" ",A1)+1,LEN(A1)-1),2)
เพื่อให้กรณีของชื่อตัวอักษรเดียวหรือชื่อเริ่มต้น (สมมติว่าช่องว่างหรือจุดไม่เป็นที่ยอมรับในฐานะตัวละครตัวที่สอง) ต่อไปนี้สามารถใช้กับการแก้ปัญหาใด ๆ :
=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))
โปรดทราบว่าอักขระเดียวสามารถเป็นรหัสฮาร์ดหรือคำนวณจากชื่อ (หรือใช้""
เพื่อลบช่องว่างหรือจุด)
สุดท้ายหากคุณจริงๆต้องให้ความสำคัญสำหรับกรณีที่ชื่อเต็มคือตัวเดียวเท่านั้น (!) เพียงห่อชื่อเดียวเท่านั้นกับสูตรอื่น IFERROR()
(แน่นอนว่าสูตรทางเลือกไม่ได้ดูแลกรณีพิเศษนั้น)
ภาคผนวก 3:
ในที่สุดในที่สุด (ไม่จริงๆ* ;-)) เพื่อรองรับการติดต่อกันหลายและ / หรือนำ / ช่องว่างต่อท้ายใช้แทนTRIM(A1)
A1
* ฉันจะฝากกรณีนี้ไว้เป็นนามสกุลตัวอักษรเดียวเช่น Mr T เป็นแบบฝึกหัดสำหรับผู้อ่าน
คำแนะนำ: =solution &IF(MID(A1,LEN(A1)-1,1)=" ", single_char, "")