สารบัญ
บทช่วยสอนแสดงวิธีแยกตัวเลขจากสตริงข้อความต่างๆ ใน 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 นี่คือวิธีที่คุณ สามารถดึงตัวเลขจากสตริงที่เป็นตัวอักษรและตัวเลขได้อย่างรวดเร็ว:
- ไปที่กลุ่ม Ablebits Data > Text แล้วคลิก Extract :
- เลือกเซลล์ทั้งหมดที่มีสตริงต้นฉบับ
- ในบานหน้าต่างของเครื่องมือแยก เลือกปุ่มตัวเลือก แยกหมายเลข 18>
- ขึ้นอยู่กับว่าคุณต้องการให้ผลลัพธ์เป็นสูตรหรือค่า เลือกช่อง แทรกเป็นสูตร หรือปล่อยไว้โดยไม่เลือก (ค่าเริ่มต้น)
คำแนะนำของฉันคือให้เลือกช่องนี้หากคุณต้องการให้ตัวเลขที่แยกออกมาอัปเดตโดยอัตโนมัติทันทีที่มีการเปลี่ยนแปลงใดๆ กับสตริงต้นทาง หากคุณต้องการให้ผลลัพธ์เป็นอิสระจากสตริงต้นฉบับ (เช่น ในกรณีที่คุณวางแผนที่จะลบแหล่งข้อมูลในภายหลัง) อย่าเลือกช่องนี้
- คลิกปุ่ม แทรกผลลัพธ์ เสร็จแล้ว!
ผลลัพธ์ของการแยกเป็น ตัวเลข หมายความว่าคุณมีอิสระที่จะนับ รวม เฉลี่ย หรือทำการคำนวณอื่นๆ กับตัวเลขเหล่านี้
ในตัวอย่างนี้ เราเลือกที่จะแทรกผลลัพธ์เป็น values และ Add-in ทำตามที่ขอทุกประการ:
หากเลือกช่องทำเครื่องหมาย แทรกเป็นสูตร แสดงว่าคุณ d สังเกต สูตร ในแถบสูตร อยากรู้ว่าอันไหน? เพียงดาวน์โหลดรุ่นทดลองของ Ultimate Suite แล้วดูด้วยตัวคุณเอง :)
ดาวน์โหลดที่มีจำหน่าย
Excel Extract Number - ตัวอย่างสมุดงาน (ไฟล์ .xlsx)
Ultimate Suite - เวอร์ชันทดลอง (.exe ไฟล์)