สารบัญ
บทช่วยสอนนี้จะสอนวิธีแยกข้อความออกจากตัวเลขใน Excel โดยใช้สูตรดั้งเดิมและฟังก์ชันที่กำหนดเอง คุณยังจะได้เรียนรู้วิธีแยกข้อความและตัวเลขออกเป็นสองคอลัมน์แยกกัน
ลองจินตนาการว่า: คุณได้รับข้อมูลดิบสำหรับการวิเคราะห์และพบว่าตัวเลขผสมกับข้อความในคอลัมน์เดียว ในสถานการณ์ส่วนใหญ่ จะสะดวกกว่าหากแยกคอลัมน์สำหรับการตรวจสอบอย่างใกล้ชิด
ในกรณีที่คุณกำลังทำงานกับข้อมูลที่เป็นเนื้อเดียวกัน คุณอาจใช้ฟังก์ชัน ซ้าย ขวา และ MID เพื่อดึงข้อมูล จำนวนอักขระเท่ากันจากตำแหน่งเดียวกัน แต่นั่นเป็นสถานการณ์ที่เหมาะสำหรับการทดสอบในห้องปฏิบัติการ ในชีวิตจริง คุณมักจะจัดการกับข้อมูลที่แตกต่างกันโดยที่ตัวเลขมาก่อนข้อความ หลังข้อความ หรือระหว่างข้อความ ตัวอย่างด้านล่างให้วิธีแก้ปัญหาสำหรับกรณีนี้โดยเฉพาะ
วิธีลบข้อความและเก็บตัวเลขในเซลล์ Excel
วิธีแก้ปัญหาทำงานใน Excel 365, Excel 2021 และ Excel 2019
Microsoft Excel 2019 ได้แนะนำฟังก์ชันใหม่บางอย่างที่ไม่มีในเวอร์ชันก่อนหน้า และเราจะใช้หนึ่งในฟังก์ชันดังกล่าว ซึ่งก็คือ TEXTJOIN เพื่อตัดอักขระข้อความออกจากเซลล์ มีตัวเลข
สูตรทั่วไปคือ:
TEXTJOIN("", TRUE, IFERROR(MID( cell, ROW(INDIRECT( "1:"&LEN( เซลล์))), 1) *1, ""))ใน Excel 365 และ 2021 อันนี้จะใช้ได้เช่นกัน:
TEXTJOIN("", TRUE,IFERROR(MID( cell, SEQUENCE(LEN( cell)), 1) *1, ""))เมื่อแรกเห็น สูตรอาจดูน่ากลัวเล็กน้อย แต่ใช้งานได้ :)
ตัวอย่างเช่น หากต้องการลบข้อความออกจากตัวเลขใน A2 ให้ป้อนสูตรใดสูตรหนึ่งด้านล่างใน B2 แล้วคัดลอกลงในเซลล์มากเท่าที่จำเป็น
ใน Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))
ใน Excel 2019 จะต้องป้อนเป็นสูตรอาร์เรย์ด้วย Ctrl + Shift + Enter ในไดนามิกอาร์เรย์ Excel จะทำงานเหมือนสูตรปกติที่กรอกด้วยแป้น Enter
ใน Excel 365 และ 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
ผลลัพธ์คือ อักขระข้อความทั้งหมด ลบออกจากเซลล์และเก็บตัวเลขไว้:
สูตรนี้ทำงานอย่างไร:
เพื่อให้เข้าใจตรรกะได้ดีขึ้น มาเริ่มตรวจสอบกัน สูตรจากภายใน:
คุณใช้ ROW(INDIRECT("1:"&LEN(string))) หรือ SEQUENCE(LEN(string)) เพื่อสร้างลำดับของตัวเลขที่สอดคล้องกับจำนวนทั้งหมด ของอักขระในสตริงต้นทาง จากนั้นป้อนหมายเลขลำดับเหล่านั้นไปยังฟังก์ชัน MID เป็นตัวเลขเริ่มต้น ใน B2 สูตรส่วนนี้จะมีลักษณะดังนี้:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
ฟังก์ชัน MID แยกอักขระแต่ละตัวจาก A2 โดยขึ้นต้นด้วยอักขระตัวแรกและส่งกลับเป็นอาร์เรย์:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
อาร์เรย์นี้คูณด้วย 1 ค่าตัวเลขจะคงอยู่โดยไม่มีการเปลี่ยนแปลง ขณะที่การคูณอักขระที่ไม่ใช่ตัวเลขจะส่งผลให้ #VALUE! ข้อผิดพลาด:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
ฟังก์ชัน IFERROR จัดการข้อผิดพลาดเหล่านี้และแทนที่ด้วยสตริงว่าง:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
อาร์เรย์สุดท้ายนี้ใช้กับฟังก์ชัน TEXTJOIN ซึ่งเชื่อมค่าที่ไม่ว่างในอาร์เรย์ ( ignore_empty อาร์กิวเมนต์ตั้งค่าเป็น TRUE) โดยใช้สตริงว่าง ("") สำหรับตัวคั่น:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
เคล็ดลับ สำหรับ Excel 2016 - 2007 มีวิธีแก้ปัญหาเช่นกัน แต่สูตรนั้นซับซ้อนกว่ามาก คุณสามารถค้นหาได้ในบทช่วยสอนนี้: วิธีแยกตัวเลขใน Excel
ฟังก์ชันแบบกำหนดเองเพื่อลบข้อความออกจากตัวเลข
โซลูชันนี้ใช้ได้กับ Excel ทุกรุ่น
หากคุณใช้ Excel เวอร์ชันเก่าหรือค้นหาสูตรข้างต้นด้วย จำยาก ไม่มีอะไรขัดขวางไม่ให้คุณสร้างฟังก์ชันของคุณเองด้วยไวยากรณ์ที่ง่ายกว่าและชื่อที่ใช้งานง่าย เช่น RemoveText ฟังก์ชันที่ผู้ใช้กำหนด (UDF) สามารถเขียนได้สองวิธี:
โค้ด VBA 1:
ที่นี่ เราจะดูอักขระแต่ละตัวในสตริงต้นฉบับทีละตัว หนึ่งและตรวจสอบว่าเป็นตัวเลขหรือไม่ หากเป็นตัวเลข อักขระจะถูกเพิ่มลงในสตริงผลลัพธ์
Function RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i , 1)) จากนั้น sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End Functionรหัส VBA 2:
รหัสสร้างวัตถุเพื่อประมวลผลนิพจน์ทั่วไป การใช้ RegExp เราจะลบอักขระทั้งหมดที่ไม่ใช่ตัวเลข 0-9 ออกจากสตริงต้นฉบับ
ฟังก์ชัน RemoveText(str As String ) เป็นสตริงด้วย CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) สิ้นสุดด้วย End Functionในเวิร์กชีตขนาดเล็ก โค้ดทั้งสองจะทำงานได้ดีพอๆ กัน บนเวิร์กชีตขนาดใหญ่ที่มีการเรียกใช้ฟังก์ชันเป็นร้อยหรือพันครั้ง โค้ด 2 ที่ใช้ VBScript.RegExp จะทำงานได้เร็วขึ้น
ขั้นตอนโดยละเอียดในการแทรกโค้ดในสมุดงานของคุณสามารถพบได้ที่นี่: วิธีแทรก VBA โค้ดใน Excel
ไม่ว่าคุณจะเลือกใช้วิธีใด จากมุมมองของผู้ใช้ปลายทาง ฟังก์ชันในการลบข้อความและทิ้งตัวเลขนั้นทำได้ง่ายๆ ดังนี้:
RemoveText(string)ตัวอย่างเช่น ไปยัง ลบอักขระที่ไม่ใช่ตัวเลขออกจากเซลล์ A2 สูตรใน B2 คือ:
=RemoveText(A2)
เพียงคัดลอกลงในคอลัมน์ แล้วคุณจะได้ผลลัพธ์ดังนี้:
หมายเหตุ ทั้งสูตรดั้งเดิมและฟังก์ชันแบบกำหนดเองจะแสดงผลเป็น สตริงตัวเลข หากต้องการเปลี่ยนเป็นตัวเลข ให้คูณผลลัพธ์ด้วย 1 หรือบวกศูนย์ หรือใส่สูตรในฟังก์ชัน VALUE ตัวอย่างเช่น:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
วิธีลบตัวเลขออกจากสตริงข้อความใน Excel
โซลูชันนี้ใช้งานได้ใน Excel 365, Excel 2021 และ Excel 2019
สูตรในการลบตัวเลขออกจากสตริงที่เป็นตัวอักษรและตัวเลขจะค่อนข้างคล้ายกับที่กล่าวถึงในตัวอย่างก่อนหน้านี้
สำหรับ Excel 365 - 2019:
TEXTJOIN(" ", TRUE, IF(ISERR(MID( เซลล์ , ROW(INDIRECT("1:"&LEN( เซลล์ ) )), 1) *1), MID( เซลล์ , ROW(INDIRECT("1:"&LEN( เซลล์ ))), 1), ""))ใน Excel 2019 อย่าลืมกำหนดให้เป็น สูตรอาร์เรย์ โดยกดแป้น Ctrl + Shift + Enter พร้อมกัน
สำหรับ Excel 365 และ 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( cell , SEQUENCE(LEN( cell 1) *1), MID ( เซลล์ , SEQUENCE(LEN( เซลล์ )), 1), ""))ตัวอย่างเช่น หากต้องการตัดตัวเลขออกจากสตริงใน A2 สูตรคือ:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
หรือ
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))
ด้วยเหตุนี้ ตัวเลขทั้งหมดจะถูกลบออกจากเซลล์และเก็บอักขระข้อความไว้:
ดังที่แสดงในภาพหน้าจอด้านบน สูตรจะตัดอักขระที่เป็นตัวเลขออกจากตำแหน่งใดๆ ในสตริง: ตอนต้น ตอนท้าย และตอนกลาง อย่างไรก็ตาม มีข้อแม้คือ ถ้าสตริง เริ่มต้นด้วยตัวเลขตามด้วยช่องว่าง ช่องว่างนั้นยังคงอยู่ ซึ่งทำให้เกิดปัญหาของช่องว่างนำหน้า (เช่นใน B2)
หากต้องการกำจัด ช่องว่างก่อนหน้าข้อความ ให้ใส่สูตรในฟังก์ชัน TRIM ดังนี้:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
ตอนนี้ ผลลัพธ์ของคุณสมบูรณ์แบบมาก!
สูตรนี้ทำงานอย่างไร:
โดยพื้นฐานแล้ว สูตรจะทำงานเหมือนกับที่อธิบายไว้ในตัวอย่างก่อนหน้า ข้อแตกต่างคือ จากอาร์เรย์สุดท้ายที่ส่งไปยังฟังก์ชัน TEXTJOIN คุณต้องลบตัวเลข ไม่ใช่ข้อความ ในการทำให้เสร็จ เราใช้ฟังก์ชัน IF และ ISERROR ร่วมกัน
อย่างที่คุณจำได้MID(...)+0 สร้างอาร์เรย์ของตัวเลขและ #VALUE! ข้อผิดพลาดที่แสดงอักขระข้อความในตำแหน่งเดียวกัน:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
ฟังก์ชัน ISERROR จับข้อผิดพลาดและส่งอาร์เรย์ที่เป็นผลลัพธ์ของค่าบูลีนไปยัง IF:
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
เมื่อฟังก์ชัน IF พบ TRUE (ข้อผิดพลาด) จะแทรกอักขระข้อความที่สอดคล้องกันลงในอาร์เรย์ที่ประมวลผลด้วยความช่วยเหลือของฟังก์ชัน MID อื่น เมื่อฟังก์ชัน IF เห็น FALSE (ตัวเลข) จะแทนที่ด้วยสตริงว่าง:
{"";"";"";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
อาร์เรย์สุดท้ายนี้จะถูกส่งต่อไปยัง TEXTJOIN เพื่อให้เชื่อมอักขระข้อความและส่งออก ผลลัพธ์
ฟังก์ชันกำหนดเองเพื่อลบตัวเลขออกจากข้อความ
โซลูชันนี้ใช้ได้กับ Excel ทุกรุ่น
โปรดทราบว่าควรเก็บสูตรที่มีประสิทธิภาพไว้ ง่ายๆ ฉันจะแชร์โค้ดของฟังก์ชันที่ผู้ใช้กำหนด (UDF) เพื่อตัดอักขระที่เป็นตัวเลขออก
โค้ด VBA 1:
Function RemoveNumbers(str As String ) Dim sRes เป็นสตริง sRes = "" สำหรับ i = 1 ถึง Len(str) ถ้า False = IsNumeric(กลาง(str, i, 1)) จากนั้น sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End Functionรหัส VBA 2:
Function RemoveNumbers(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) สิ้นสุดด้วยฟังก์ชันสิ้นสุดเช่นเดียวกับกรณีของฟังก์ชัน RemoveText รหัสที่สองจะดีกว่าที่จะใช้ใน ใหญ่แผ่นงานเพื่อเพิ่มประสิทธิภาพการทำงาน
เมื่อเพิ่มรหัสลงในสมุดงานของคุณแล้ว คุณสามารถลบอักขระตัวเลขทั้งหมดออกจากเซลล์ได้โดยใช้ฟังก์ชันที่กำหนดเองนี้:
RemoveNumbers(string)ในกรณีของเรา สูตรใน B2 คือ:
=RemoveNumbers(A2)
หากต้องการตัดช่องว่างนำหน้า หากมี ให้ซ้อนฟังก์ชันแบบกำหนดเองภายใน TRIM เช่นเดียวกับที่คุณทำกับสูตรเนทีฟ:
=TRIM(RemoveNumbers(A2))
แยกตัวเลขและข้อความออกเป็นคอลัมน์แยกกัน
ในสถานการณ์ที่คุณต้องการแยกข้อความและตัวเลขออกเป็นสองคอลัมน์ จะเป็นการดีหากทำงานให้เสร็จด้วยสูตรเดียว , เห็นด้วย? สำหรับสิ่งนี้ เราเพียงแค่รวมโค้ดของฟังก์ชัน RemoveText และ RemoveNumbers เป็นฟังก์ชันเดียว โดยตั้งชื่อว่า SplitTextNumbers หรือเรียกง่ายๆ ว่า แยก หรือ สิ่งที่คุณต้องการ :)
โค้ด VBA 1:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" สำหรับ i = 1 ถึง Len(str) sCurChar = Mid(str, i, 1) ถ้า True = IsNumeric(sCurChar) ดังนั้น sNum = sNum & sCurChar Else sText = ข้อความ & sCurChar End ถ้าถัดไป i ถ้า True = is_remove_text แล้วก็ SplitTextNumbers = sNum อื่น ๆ SplitTextNumbers = sText End ถ้า End FunctionVBA code 2:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String ด้วย CreateObject ( "VBScript.RegExp" ) .Global = True ถ้า True = is_remove_text แล้วก็ .Pattern = "[^0-9]" อื่นๆ.Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End Functionฟังก์ชันแบบกำหนดเองใหม่ของเราต้องการสองอาร์กิวเมนต์:
SplitTextNumbers(string, is_remove_text)Where is_remove_text เป็นค่าบูลีนที่ระบุอักขระที่จะตัดออก:
- TRUE หรือ 1 - ลบข้อความและเก็บตัวเลข
- FALSE หรือ 0 - ลบตัวเลขและเก็บข้อความ
สำหรับชุดข้อมูลตัวอย่างของเรา สูตรจะใช้รูปแบบนี้:
หากต้องการลบอักขระที่ไม่ใช่ตัวเลข:
=SplitTextNumbers(A2, TRUE)
หากต้องการลบอักขระที่เป็นตัวเลข :
=SplitTextNumbers(A2, FALSE)
เคล็ดลับ เพื่อหลีกเลี่ยงปัญหาที่อาจเกิดขึ้นจากช่องว่างนำหน้า ฉันขอแนะนำให้รวมสูตรที่ลบตัวเลขในฟังก์ชัน TRIM เสมอ:
=TRIM(SplitTextNumbers(A2, FALSE))
เครื่องมือพิเศษเพื่อลบตัวเลขหรือข้อความ
สำหรับผู้ที่ทำ ไม่ชอบอะไรที่ซับซ้อนโดยไม่จำเป็น ฉันจะแสดงวิธีการลบข้อความหรือตัวเลขใน Excel ในแบบของเราเอง
สมมติว่า Ultimate Suite ของเราถูกเพิ่มลงใน Ribbon ของ Excel นี่คือสิ่งที่คุณทำ:
- บนแท็บ Ablebits Data ในกลุ่ม Text คลิก Remove > Remove Characters .
เคล็ดลับ หากผลลัพธ์มีช่องว่างนำหน้า การตัดแต่งช่องว่างเครื่องมือจะกำจัดพวกมันในเวลาไม่นาน
นั่นคือวิธีลบข้อความหรืออักขระตัวเลขออกจากสตริงใน Excel ฉันขอขอบคุณสำหรับการอ่านและหวังว่าจะได้พบคุณในบล็อกของเราในสัปดาห์หน้า!
ดาวน์โหลดได้
ลบข้อความหรือตัวเลขใน Excel - ตัวอย่าง (ไฟล์ .xlsm)
Ultimate Suite - เวอร์ชันทดลอง (ไฟล์ .exe)