การรวมตัวอักษรสองตัวแรกจากชื่อและตัวอักษรสองตัวแรกจากนามสกุล


9

ฉันมีสเปรดชีตชื่อผู้ใช้

ชื่อและนามสกุลอยู่ในเซลล์ของคอลัมน์Aเดียวกัน

มีสูตรที่จะต่อตัวอักษรสองตัวแรกของชื่อแรก (คำแรก) และตัวอักษรสองตัวแรกของนามสกุล (คำที่สอง) หรือไม่?

ตัวอย่างเช่นJohn Doe, JoDoควรจะเป็น

ฉันเหนื่อย

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

แต่สิ่งนี้ทำให้ฉันJoDoeเป็นผลลัพธ์



ทำคำตอบใด ๆ ที่หลอกลวง? (ถ้าเป็นเช่นนั้นคุณสามารถตั้งค่าสถานะมันเป็น The Answer ได้โดยคลิกที่เครื่องหมายถูกที่ด้านซ้ายของโพสต์)
4329

คำตอบ:


15

ใช่; สมมติว่าแต่ละคนมีชื่อและนามสกุลเท่านั้นและจะถูกคั่นด้วยช่องว่างเสมอคุณสามารถใช้ด้านล่าง:

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

ฉันทำได้เพียงคำตอบนี้กับสมมติฐานเหล่านี้เนื่องจากเป็นสิ่งที่คุณให้

หรือถ้าคุณต้องการให้มีพื้นที่ว่างในการรวม:

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

2
@prweq ไม่มีโพรบยอมรับว่าถูกต้องหากเหมาะกับคุณ
PeterH

วิธีแก้ปัญหาที่ง่ายและเข้าใจง่ายที่สุด (ดียกเว้นการใช้FIND()แทนSEARCH();-)) เนื่องจากคุณสมมติว่ามีตัวคั่นช่องว่างอยู่เสมอสูตรที่สองของคุณสามารถทำให้ง่ายขึ้น=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
robinCTS

4
@RajeshS ฉันรู้ นั่นเป็นเหตุผลที่คำตอบของฉันเริ่มต้นด้วยassuming each person only has a First and Last name
PeterH

2
โปรแกรมเมอร์เท็จเชื่อเกี่ยวกับชื่อ ; ไม่ใช่ว่าจะเหมาะสมที่จะจัดการกับกรณีเหล่านี้ทั้งหมดจากการเริ่มต้นหากซอฟต์แวร์ของคุณยังไม่สามารถเข้าถึงระดับนานาชาติได้
Aaron

1
ฉันขอแนะนำTRIM(LEFT(A1,2))ในกรณีที่ชื่อของพวกเขามีตัวอักษรเพียงตัวเดียว แต่มันอาจง่ายพอที่จะตรวจสอบกรณีพิเศษเหล่านั้นด้วยตนเองเช่นกัน
Engineer Toast

11

นี่คือวิธีแก้ปัญหาที่จะส่งคืนอักขระสองตัวแรกของชื่อแรกและอักขระสองตัวแรกของนามสกุลแต่ยังอธิบายถึงชื่อกลางด้วย

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

ป้อนคำอธิบายรูปภาพที่นี่

ขอบคุณ@Kyle สำหรับส่วนหลักของสูตร


1
คุณเอาชนะฉันได้ ;-) (มันเป็นเวลาเที่ยงคืนที่ผ่านมาได้ดีและฉันต้องนอนหลับ - กำลังวางแผนที่จะเพิ่มคำตอบของฉันในภายหลัง) การปรับปรุงสูตรเล็กน้อยของคุณก็คือการใช้สูตรเดี่ยว~แทนสี่ หากคุณกังวลว่าอาจมีการใช้ Tilda เป็นส่วนหนึ่งของชื่อ (!) หรืออาจพิมพ์โดยไม่ตั้งใจได้เพียงใช้ตัวอักษรที่ไม่ปรากฏบนแป้นพิมพ์ใด ๆ §ฉันชอบที่จะใช้ เป็นอีกหนึ่งที่ดี
robinCTS

@BruceWayne สูตรของคุณมีความสามารถมากกว่า ,,, เพราะเข้าถึงได้เฉพาะ Firts & นามสกุลไม่สนใจชื่อกลาง ,,, โหวตขึ้น☺
Rajesh S

@RajeshS แล้วคนที่มีชื่อภาษาสเปนเช่นอดีตนักขับ F1 Fernando Alonso Díazที่มี 1 ชื่อ, 2 นามสกุลและไม่มีชื่อกลาง? (หรือแม้แต่ King Felipe Juan Pablo Alfonso de Todos los Santos de Borbón y de Grecia ?)
Chronocidal

2
@Chronocidal ตอนนี้เรากำลังจะลงไปในช่องกระต่ายของสิ่งที่โปรแกรมเมอร์เชื่อเกี่ยวกับชื่อ
BruceWayne

1
@robinCTS - โทรดี! ฉันได้รับสูตรจากคำตอบอื่น (แก้ไข) และไม่ได้ขุดลึกลงไปมากนัก ขอบคุณสำหรับเคล็ดลับ!
BruceWayne

9

นี่เป็นอีกวิธีหนึ่ง ...

สกรีนช็อตของแผ่นงาน

  • ชื่อ
  • B - =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))

คุณสามารถไปได้ไกลกว่านั้นและลบคอลัมน์พิเศษทั้งหมดโดยรวมพวกมันเข้าด้วยกัน=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
PeterH

ใช่ฉันทำอย่างนั้นไม่นานหลังจากนั้น!
Stese

ใช่ฉันสังเกตเห็นคุณแก้ไขคำตอบคำตอบที่ดี!
PeterH

5

ก่อนอื่นฉันอยากจะบอกว่าคำตอบของ 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, "")


1
คำตอบของคุณมักจะดูเหมือนว่ามาจากคู่มือผู้ใช้ขั้นสูงของ Excel! นี่จะเป็นคำตอบที่ได้รับการโหวตสูงสุดเมื่อคุณโพสต์ไว้ก่อนหน้านี้!
PeterH

@ PeterH ขอบคุณสำหรับความสมบูรณ์ ฉันสะดุดในคำถามเมื่อมันเข้ามาในรายการคำถามในเครือข่ายที่น่าสนใจดังนั้นฉันจึงไปงานเลี้ยงช้าไปหน่อย ;-)
robinCTS

2

จากคำตอบนี้นี่เป็นคำตอบที่สง่างามซึ่งใช้ได้กับชื่อกลางจำนวนใด ๆ :

=LEFT(A1,2)&LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1))),2)

คำอธิบาย:

SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))แทนที่ช่องว่างระหว่างคำด้วยช่องว่างเท่ากับจำนวนถึงความยาวของสตริงทั้งหมด การใช้ความยาวสตริงแทนที่จะเป็นจำนวนมากตามอำเภอใจจะรับประกันว่าสูตรจะทำงานกับสตริงความยาวใด ๆ และหมายความว่ามันจะมีประสิทธิภาพ

RIGHT(space_expanded_string, LEN(A1))แยกคำที่อยู่ทางขวาสุดที่มีการเว้นช่องว่างไว้ * * * *

TRIM(space_prepended_rightmost_word) แยกคำที่ถูกต้องที่สุด

LEFT(rightmost_word, 2) แยกอักขระสองตัวแรกของคำขวาสุด (นามสกุล)


* คำเตือน: ถ้ามันเป็นไปได้สำหรับชื่อผู้ใช้เพื่อให้มีช่องว่างต่อท้ายคุณจะต้องแทนที่อาร์กิวเมนต์แรกของSUBSTITUTE()คือมีA1 ช่องว่างนำและช่องว่างหลายติดต่อกันระหว่างคำได้รับการจัดการอย่างถูกต้องเพียงกับTRIM(A1)A1


แก้ไขความพยายามของคุณ

ลองดูวิธีแก้ปัญหาที่คุณพยายามให้ละเอียดยิ่งขึ้นดูเหมือนว่าคุณจะเข้าใกล้สูตรการทำงานเพื่อเชื่อมต่อตัวอักษรสองตัวแรกของคำแรก (เช่นชื่อ) และตัวอักษรสองตัวแรกของคำที่สองหากมีอยู่

โปรดทราบว่าหากชื่อผู้ใช้จะต้องมีชื่อกลางสูตรที่แก้ไขจะจับตัวอักษรสองตัวแรกจากชื่อกลางแรกไม่ถูกต้องแทนที่จะเป็นจากนามสกุล (สมมติว่าเจตนาของคุณนั้นแตกออกจากนามสกุลจริง)

นอกจากนี้หากชื่อผู้ใช้ทั้งหมดมีเพียงชื่อหรือชื่อและนามสกุลสูตรจะซับซ้อนโดยไม่จำเป็นและสามารถทำให้ง่ายขึ้น


หากต้องการดูวิธีการทำงานของสูตรและแก้ไขให้ง่ายขึ้นหากมีการตั้งค่าไว้ล่วงหน้าเช่น:

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


เพื่อให้เข้าใจถึงวิธีการทำงานก่อนอื่นให้ดูว่าเกิดอะไรขึ้นเมื่อA1ไม่มีการเว้นวรรค (เช่นมีชื่อเดียวเท่านั้น) IFERROR()ฟังก์ชันทั้งหมดประเมินเป็นอาร์กิวเมนต์ที่สองตั้งแต่FIND()ส่งคืน#VALUE!ข้อผิดพลาดหากไม่พบสตริงการค้นหาในสตริงเป้าหมาย:

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

อาร์กิวเมนต์ที่สามของการMID()ประเมินเป็นศูนย์ดังนั้นฟังก์ชั่นการส่งออก""และผลลัพธ์สูตรคืออักขระสองตัวแรกของชื่อเดียว


ตอนนี้ดูเมื่อมีชื่อสองชื่อ (เช่นมีช่องว่างหนึ่งช่อง) IFERROR()ฟังก์ชันที่หนึ่งและสามประเมินค่าอาร์กิวเมนต์แรก แต่ฟังก์ชันที่สองประเมินเป็นอาร์กิวเมนต์ที่สองเนื่องจากFIND(" ", SUBSTITUTE(A1," ","",1))กำลังพยายามหาพื้นที่อื่นหลังจากลบหนึ่งและเฉพาะหนึ่ง:

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

เห็นได้ชัดว่าMID()ส่งคืนคำที่สอง (เช่นนามสกุล) อย่างครบถ้วนและผลลัพธ์ของสูตรคืออักขระสองตัวแรกของชื่อแรกตามด้วยอักขระทั้งหมดของนามสกุล


เพื่อความสมบูรณ์เราจะดูกรณีที่มีอย่างน้อยสามชื่อแม้ว่าตอนนี้มันควรจะเห็นได้ชัดว่าจะแก้ไขสูตรได้อย่างไร เวลานี้IFERROR()ฟังก์ชั่นทั้งหมดจะประเมินค่าเป็นอาร์กิวเมนต์แรก:

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

มีความชัดเจนน้อยกว่าเล็กน้อยในกรณีก่อนหน้า แต่MID()จะส่งกลับคำที่สองทั้งหมด(เช่นชื่อกลางแรก) ดังนั้นผลลัพธ์ของสูตรคืออักขระสองตัวแรกของชื่อแรกตามด้วยอักขระทั้งหมดของชื่อกลางแรก


เห็นได้ชัดว่าการแก้ไขคือการใช้LEFT()เพื่อให้ได้สองตัวอักษรแรกของการMID()ส่งออก:

=
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
)


การทำให้เข้าใจง่ายที่ฉันกล่าวถึงข้างต้นคือการแทนที่LEFT(MID(…,…,…), 2)ด้วยMID(…,…,2):

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

หรือหนึ่งบรรทัด:

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

นี่เป็นวิธีแก้ปัญหาของ PeterH ที่ได้รับการแก้ไขเพื่อให้ทำงานกับชื่อเดียว (ในกรณีนี้ผลลัพธ์จะเป็นเพียงอักขระสองตัวแรกของชื่อ)


หมายเหตุ:สูตรที่ prettified ใช้งานได้จริงถ้าป้อน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.