Excel: แยกตัวเลขออกจากสตริงข้อความ

  • แบ่งปันสิ่งนี้
Michael Brown

บทช่วยสอนแสดงวิธีแยกตัวเลขจากสตริงข้อความต่างๆ ใน ​​Excel โดยใช้สูตรและเครื่องมือแยกข้อมูล

เมื่อต้องแยกส่วนของสตริงข้อความตามความยาวที่กำหนด , Excel มีฟังก์ชันสตริงย่อยสามฟังก์ชัน (ซ้าย ขวา และกลาง) เพื่อจัดการงานอย่างรวดเร็ว เมื่อพูดถึงการแยกตัวเลขจากสตริงที่เป็นตัวอักษรและตัวเลข Microsoft Excel จะให้... ไม่มีอะไรเลย

ในการรับตัวเลขจากสตริงใน Excel ต้องใช้ความเฉลียวฉลาดเล็กน้อย ความอดทนเล็กน้อย และฟังก์ชันต่างๆ มากมาย ซ้อนกัน หรือคุณสามารถเรียกใช้เครื่องมือ Extract และทำงานให้เสร็จด้วยการคลิกเมาส์ ด้านล่างนี้คุณจะพบรายละเอียดทั้งหมดเกี่ยวกับทั้งสองวิธี

    วิธีแยกตัวเลขออกจากส่วนท้ายของสตริงข้อความ

    เมื่อคุณมีคอลัมน์ของสตริงที่เป็นตัวอักษรและตัวเลขซึ่งมีตัวเลขอยู่หลัง ข้อความ คุณสามารถใช้สูตรต่อไปนี้เพื่อรับมัน

    RIGHT( cell, LEN( cell) - MAX(IF(ISNUMBER(MID( cell, ROW(INDIRECT("1:"&LEN( เซลล์))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( เซลล์))), 0)))

    เราจะพูดถึงตรรกะของสูตรในภายหลัง สำหรับตอนนี้ เพียงแทนที่ เซลล์ ด้วยการอ้างอิงไปยังเซลล์ที่มีสตริงต้นฉบับ (A2 ในกรณีของเรา) และป้อนสูตรในเซลล์ว่างใดๆ ในแถวเดียวกัน พูดใน B2:

    =RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))

    สูตรนี้รับตัวเลขจากส่วนท้ายเท่านั้น ถ้าสตริงมีตัวเลขอยู่ต้นหรือกลางด้วยละเว้น:

    การแยกดำเนินการด้วยฟังก์ชัน RIGHT ซึ่งอยู่ในหมวดหมู่ของฟังก์ชัน Text ผลลัพธ์ของฟังก์ชันนี้จะเป็น ข้อความ เสมอ ในกรณีของเรา ผลลัพธ์คือ สตริงย่อยที่เป็นตัวเลข ซึ่งในแง่ของ Excel จะเป็นข้อความเช่นกัน ไม่ใช่ตัวเลข

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

    =IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))), "")

    หรือ

    =IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))) +0, "")

    หมายเหตุ ใน Dynamic Array Excel (Office 365 และ 2021) คุณป้อนสูตรตามปกติด้วยปุ่ม Enter ใน Excel 2019 และรุ่นก่อนหน้า การทำงานเป็นสูตรอาร์เรย์เท่านั้น ดังนั้นอย่าลืมกด Ctrl + Shift + Enter เพื่อทำให้สมบูรณ์

    วิธีการทำงานของสูตรนี้:

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

    MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN( A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))

    เพื่อทำความเข้าใจตรรกะ ลองตรวจสอบจากภายใน :

    การรวม ROW(INDIRECT("1:"&LEN(A2)))สร้างลำดับของตัวเลขที่สอดคล้องกับจำนวนอักขระทั้งหมดในสตริงต้นฉบับ (A2) และเราให้บริการหมายเลขลำดับเหล่านี้แก่ MID เป็นตัวเลขเริ่มต้น:

    MID(A2, {1;2;3;4 ;5;6;7;8}, 1)

    ฟังก์ชัน MID ดึงอักขระแต่ละตัวจาก A2 และส่งกลับเป็นอาร์เรย์:

    {"0";"5";" -";"E";"C";"-";"0";"1"}

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

    ISNUMBER({0;5;#VALUE!;#VALUE!;#VALUE!;#VALUE!;0;1})

    ฟังก์ชัน ISNUMBER ประเมินแต่ละองค์ประกอบของอาร์เรย์และตัดสินในรูปแบบของค่าบูลีน - TRUE สำหรับตัวเลข FALSE สำหรับอย่างอื่น:

    {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}

    อาร์เรย์นี้ไปที่การทดสอบเชิงตรรกะของฟังก์ชัน IF ซึ่งแต่ละองค์ประกอบของอาร์เรย์จะถูกเปรียบเทียบกับ FALSE:

    IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE ;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)

    สำหรับแต่ละ FALSE (ค่าที่ไม่ใช่ตัวเลข) ฟังก์ชัน ROW(INDIRECT()) อื่นจะส่งกลับ ตำแหน่งสัมพัทธ์ในสตริง สำหรับแต่ละ TRUE (ค่าตัวเลข) จะส่งกลับศูนย์ อาร์เรย์ผลลัพธ์มีลักษณะดังนี้ดังนี้:

    {0;0;3;4;5;6;0;0}

    ที่เหลือก็ง่าย ฟังก์ชัน MAX ค้นหาตัวเลขสูงสุดในอาร์เรย์ด้านบน ซึ่งเป็นตำแหน่งของค่าสุดท้ายที่ไม่ใช่ตัวเลขในสตริง (6 ในกรณีของเรา) เพียงลบตำแหน่งนั้นออกจากความยาวทั้งหมดของสตริงที่ส่งคืนโดย LEN และส่งผลลัพธ์ไปยัง RIGHT เพื่อให้ทราบว่าต้องดึงอักขระกี่ตัวจากด้านขวาของสตริง:

    RIGHT(A2, LEN (A2) - 6)

    เสร็จสิ้น!

    วิธีแยกตัวเลขจากจุดเริ่มต้นของสตริงข้อความ

    หากคุณกำลังทำงานกับระเบียนที่มีข้อความปรากฏหลังตัวเลข คุณสามารถ แยกตัวเลขจากจุดเริ่มต้นของสตริงโดยใช้สูตรทั่วไปนี้:

    LEFT( cell, MATCH(FALSE, ISNUMBER(MID( cell, ROW(INDIRECT("1: "&LEN( เซลล์)+1)), 1) *1), 0) -1)

    ด้วยสตริงดั้งเดิมใน A2 ให้ใช้สูตรต่อไปนี้เพื่อรับตัวเลข:

    =LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)

    ไม่ว่าเลขกลางหรือท้ายจะมีกี่หลัก ระบบจะดึงเฉพาะเลขเริ่มต้นเท่านั้น:

    หมายเหตุ ใน Excel 365 และ Excel 2021 เนื่องจากการสนับสนุนอาร์เรย์แบบไดนามิก สูตรปกติจึงใช้ได้ดี ใน Excel 2019 และรุ่นก่อนหน้า คุณควรกด Ctrl + Shift + Enter เพื่อทำให้เป็น สูตรอาร์เรย์ อย่างชัดแจ้ง

    วิธีการทำงานของสูตรนี้:

    ในที่นี้ เราใช้การรวมกันของฟังก์ชัน ROW, INDIRECT และ LEN เพื่อสร้างลำดับของตัวเลขเท่ากับจำนวนอักขระทั้งหมดในสตริงต้นทางบวก 1 (บทบาทของสิ่งนั้นอักขระเพิ่มเติมจะชัดเจนในภายหลัง)

    ROW(INDIRECT("1:"&LEN(A2)+1))

    MID และ ISNUMBER ทำงานเช่นเดียวกับใน ตัวอย่างก่อนหน้า - MID ดึงอักขระแต่ละตัวและ ISNUMBER แปลงเป็นค่าตรรกะ อาร์เรย์ที่เป็นผลลัพธ์ของ TRUE's และ FALSE's ไปที่ฟังก์ชัน MATCH เป็นอาร์เรย์การค้นหา:

    MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)

    MATCH คำนวณตำแหน่งสัมพัทธ์ของ FALSE ตัวแรก ทำให้เราได้ตำแหน่งของอักขระที่ไม่ใช่ตัวเลขตัวแรกในสตริง (3 ใน A2) ในการแยกตัวเลขก่อนหน้า เราจะลบ 1 ออกจากตำแหน่งอักขระข้อความตัวแรก และส่งความแตกต่างไปยัง num_chars อาร์กิวเมนต์ของฟังก์ชัน LEFT:

    LEFT(A2, 3-1)

    ตอนนี้ กลับไปที่อักขระ "พิเศษ" ในลำดับที่สร้างโดย ROW(INDIRECT()+1)) ดังที่คุณทราบแล้ว ลำดับนี้เป็นจุดเริ่มต้นสำหรับฟังก์ชัน MID หากไม่มี +1 MID จะดึงอักขระจำนวนเท่าที่มีอยู่ในสตริงต้นฉบับ หากสตริงมีเฉพาะตัวเลข ISNUMBER จะส่งกลับเฉพาะค่า TRUE ในขณะที่ MATCH ต้องการ FALSE อย่างน้อยหนึ่งรายการ เพื่อให้แน่ใจว่า เราได้เพิ่มอักขระอีกหนึ่งตัวให้กับความยาวทั้งหมดของสตริง ซึ่งฟังก์ชัน MID จะแปลงเป็นสตริงว่าง ตัวอย่างเช่น ใน B7 MID จะส่งคืนอาร์เรย์นี้:

    {"1";"2";"3";"4";""}

    หมายเหตุ ในกรณีของฟังก์ชัน RIGHT ฟังก์ชัน LEFT จะส่งกลับค่า ตัวเลขด้วยเช่นกันสตริงย่อย ซึ่งเป็นข้อความทางเทคนิค ไม่ใช่ตัวเลข ในการรับผลลัพธ์เป็นตัวเลขแทนที่จะเป็นสตริงตัวเลข ให้ซ้อนสูตรในฟังก์ชัน VALUE หรือคูณผลลัพธ์ด้วย 1 ดังที่แสดงในตัวอย่างแรก

    วิธีรับตัวเลขจากตำแหน่งใดๆ ในสตริง

    หากงานของคุณหมายถึงการแยกตัวเลขจากที่ใดก็ได้ในสตริง คุณสามารถใช้สูตรที่เหลือเชื่อต่อไปนี้ที่เผยแพร่ในฟอรัม MrExcel:

    =SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)) * ROW(INDIRECT("1:"&LEN(A2))), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10)

    โดยที่ A2 คือ สตริงข้อความต้นฉบับ

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

    อย่างไรก็ตาม เมื่อตรวจสอบผลลัพธ์ คุณอาจสังเกตเห็นข้อเสียเปรียบเล็กน้อยอย่างหนึ่ง - หากสตริงต้นฉบับไม่มีตัวเลข สูตรจะส่งกลับศูนย์ ดังเช่นในแถวที่ 6 ในภาพหน้าจอด้านบน ในการแก้ไขปัญหานี้ คุณสามารถรวมสูตรในคำสั่ง IF ซึ่งเป็นการทดสอบเชิงตรรกะที่จะตรวจสอบว่าสตริงต้นฉบับประกอบด้วยตัวเลขใดๆ หรือไม่ ถ้าเป็นเช่นนั้น สูตรจะแยกตัวเลขออกมา มิฉะนั้นจะส่งคืนสตริงว่าง:

    =IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")

    ดังที่แสดงในภาพหน้าจอด้านล่าง สูตรที่ปรับปรุงใหม่นี้ทำงานได้อย่างสวยงาม (ขอยกย่องอเล็กซ์ กูรูด้าน Excel ของเรา สำหรับการปรับปรุงนี้):

    ไม่เหมือนกับตัวอย่างก่อนหน้านี้ทั้งหมด ผลลัพธ์ของสูตรนี้คือ number เพื่อให้แน่ใจในเรื่องนี้ เพียงสังเกตค่าที่จัดชิดขวาในคอลัมน์ B และเลขศูนย์นำหน้าแบบตัดทอน

    เคล็ดลับ ใน Excel 365 -Excel 2019 มีวิธีแก้ปัญหาที่ง่ายกว่ามากด้วยความช่วยเหลือของฟังก์ชัน TEXTJOIN โปรดดูวิธีลบข้อความและเก็บตัวเลข

    แยกตัวเลขออกจากสตริงข้อความด้วย Ultimate Suite

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

    เมื่อเพิ่ม Ultimate Suite ลงใน Ribbon ของ Excel นี่คือวิธีที่คุณ สามารถดึงตัวเลขจากสตริงที่เป็นตัวอักษรและตัวเลขได้อย่างรวดเร็ว:

    1. ไปที่กลุ่ม Ablebits Data > Text แล้วคลิก Extract :

    2. เลือกเซลล์ทั้งหมดที่มีสตริงต้นฉบับ
    3. ในบานหน้าต่างของเครื่องมือแยก เลือกปุ่มตัวเลือก แยกหมายเลข 18>
    4. ขึ้นอยู่กับว่าคุณต้องการให้ผลลัพธ์เป็นสูตรหรือค่า เลือกช่อง แทรกเป็นสูตร หรือปล่อยไว้โดยไม่เลือก (ค่าเริ่มต้น)

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

    5. คลิกปุ่ม แทรกผลลัพธ์ เสร็จแล้ว!

    ผลลัพธ์ของการแยกเป็น ตัวเลข หมายความว่าคุณมีอิสระที่จะนับ รวม เฉลี่ย หรือทำการคำนวณอื่นๆ กับตัวเลขเหล่านี้

    ในตัวอย่างนี้ เราเลือกที่จะแทรกผลลัพธ์เป็น values และ Add-in ทำตามที่ขอทุกประการ:

    หากเลือกช่องทำเครื่องหมาย แทรกเป็นสูตร แสดงว่าคุณ d สังเกต สูตร ในแถบสูตร อยากรู้ว่าอันไหน? เพียงดาวน์โหลดรุ่นทดลองของ Ultimate Suite แล้วดูด้วยตัวคุณเอง :)

    ดาวน์โหลดที่มีจำหน่าย

    Excel Extract Number - ตัวอย่างสมุดงาน (ไฟล์ .xlsx)

    Ultimate Suite - เวอร์ชันทดลอง (.exe ไฟล์)

    Michael Brown เป็นผู้ที่ชื่นชอบเทคโนโลยีโดยเฉพาะและมีความหลงใหลในการทำให้กระบวนการที่ซับซ้อนง่ายขึ้นโดยใช้เครื่องมือซอฟต์แวร์ ด้วยประสบการณ์กว่าทศวรรษในอุตสาหกรรมเทคโนโลยี เขาได้ฝึกฝนทักษะของเขาใน Microsoft Excel และ Outlook รวมถึง Google ชีตและเอกสาร บล็อกของ Michael ทุ่มเทให้กับการแบ่งปันความรู้และความเชี่ยวชาญของเขากับผู้อื่น โดยให้คำแนะนำและแบบฝึกหัดที่ทำตามได้ง่ายเพื่อปรับปรุงผลิตภาพและประสิทธิภาพ ไม่ว่าคุณจะเป็นมืออาชีพที่ช่ำชองหรือมือใหม่ บล็อกของ Michael นำเสนอข้อมูลเชิงลึกอันมีค่าและคำแนะนำที่เป็นประโยชน์สำหรับการใช้ประโยชน์สูงสุดจากเครื่องมือซอฟต์แวร์ที่จำเป็นเหล่านี้