สารบัญ
ต้องการจัดการช่องว่างด้วยวิธีที่มีประสิทธิภาพที่สุดหรือไม่ ใช้นิพจน์ทั่วไปเพื่อลบช่องว่างทั้งหมดในเซลล์ แทนที่ช่องว่างหลายช่องด้วยอักขระตัวเดียว ตัดช่องว่างระหว่างตัวเลขเท่านั้น และอื่นๆ อีกมากมาย
ไม่ว่าคุณจะใช้ข้อมูลอินพุตแบบใด คุณจะแทบจะไม่พบ ชุดข้อมูลที่ไม่มีช่องว่าง ในกรณีส่วนใหญ่ ช่องว่างเป็นสิ่งที่ดี - คุณใช้เพื่อแยกส่วนต่างๆ ของข้อมูลเพื่อให้มองเห็นได้ง่ายขึ้น อย่างไรก็ตาม ในบางสถานการณ์ การเว้นวรรคมากเกินไปอาจทำให้สูตรของคุณยุ่งเหยิงและทำให้เวิร์กชีตของคุณจัดการแทบไม่ได้
เหตุใดจึงต้องใช้นิพจน์ทั่วไปเพื่อตัดช่องว่างใน Excel
ก่อนที่เราจะลงลึกถึงสาระสำคัญของการใช้นิพจน์ทั่วไปเพื่อลบช่องว่างในเวิร์กชีต Excel ฉันต้องการตอบคำถามที่อยู่ในใจตั้งแต่แรก เหตุใดเราจึงต้องมี regexes ในเมื่อ Excel มี TRIM อยู่แล้ว ฟังก์ชัน?
เพื่อทำความเข้าใจความแตกต่าง มาดูกันว่าอะไรที่ถือว่าเป็นการเว้นวรรคในแต่ละกรณี:
- ฟังก์ชัน TRIM ในตัวสามารถดึง อักขระเว้นวรรคเท่านั้น ที่มีค่า 32 ในระบบ ASCII 7 บิต
- นิพจน์ทั่วไปสามารถระบุรูปแบบต่างๆ ของช่องว่าง เช่น ช่องว่าง ( ) แท็บ (\t) การขึ้นบรรทัดใหม่ (\r) และใหม่ บรรทัด (\n) นอกจากนี้ยังมี อักขระช่องว่าง (\s) ที่ตรงกับประเภทเหล่านี้ทั้งหมด และมีประโยชน์อย่างยิ่งสำหรับการทำความสะอาดอินพุตดิบข้อมูล
เมื่อรู้แน่ชัดว่าเกิดอะไรขึ้นเบื้องหลัง การแก้ปัญหาจึงง่ายกว่ามากใช่ไหม
วิธีเปิดใช้ Regular Expression ใน Excel
เป็นที่ทราบกันดีว่า Excel สำเร็จรูปไม่รองรับนิพจน์ทั่วไป คุณต้องสร้างฟังก์ชัน VBA แบบกำหนดเองเพื่อเปิดใช้งาน โชคดีที่เรามีอยู่แล้วชื่อ RegExpReplace เดี๋ยวก่อนทำไมต้อง "แทนที่" ในขณะที่เรากำลังพูดถึงการลบ ในภาษา Excel "remove" เป็นเพียงอีกคำหนึ่งสำหรับ "แทนที่ด้วยสตริงว่าง" :)
หากต้องการเพิ่มฟังก์ชันลงใน Excel เพียงคัดลอกโค้ดจากหน้านี้ แล้ววางในโปรแกรมแก้ไข VBA และบันทึกไฟล์ของคุณเป็น สมุดงานที่เปิดใช้งานมาโคร (.xlsm)
นี่คือไวยากรณ์ของฟังก์ชันสำหรับการอ้างอิงของคุณ:
RegExpReplace(text, pattern, replacement, [instance_num] , [match_case])จำเป็นต้องมีอาร์กิวเมนต์สามตัวแรก สองอาร์กิวเมนต์สุดท้ายเป็นตัวเลือก
ที่ไหน:
- ข้อความ - สตริงต้นฉบับที่ ค้นหาใน
- รูปแบบ - regex ที่จะค้นหา
- การแทนที่ - ข้อความที่จะแทนที่ด้วย หากต้องการ ลบ ช่องว่าง คุณต้องตั้งค่าอาร์กิวเมนต์นี้เป็น:
- empty string ("") เพื่อตัดช่องว่างทั้งหมด
- เว้นวรรค อักขระ (" ") เพื่อแทนที่ช่องว่างหลายช่องด้วยอักขระเว้นวรรคตัวเดียว
- Instance_num (ไม่บังคับ) - หมายเลขอินสแตนซ์ ในกรณีส่วนใหญ่ คุณจะละเว้นเพื่อแทนที่อินสแตนซ์ทั้งหมด(ค่าเริ่มต้น).
- Match_case (ไม่บังคับ) - ค่าบูลีนที่ระบุว่าจะจับคู่ (TRUE) หรือละเว้น (FALSE) ตัวพิมพ์ข้อความ สำหรับช่องว่าง มันไม่เกี่ยวข้องและถูกละไว้
สำหรับข้อมูลเพิ่มเติม โปรดดูที่ฟังก์ชัน RegExpReplace
วิธีลบช่องว่างด้วย regex - ตัวอย่าง
ด้วย เพิ่มฟังก์ชัน RegExpReplace ลงในสมุดงานของคุณแล้ว มาจัดการกับสถานการณ์ต่างๆ ทีละรายการ
ลบช่องว่างทั้งหมดโดยใช้ regex
หากต้องการลบช่องว่างทั้งหมดในสตริง คุณเพียงค้นหาอักขระช่องว่างใดๆ รวมถึง ช่องว่าง แท็บ การขึ้นบรรทัดใหม่ และการป้อนบรรทัด และแทนที่ด้วยสตริงว่าง ("")
รูปแบบ : \s+
การแทนที่ : ""
สมมติว่าสตริงต้นฉบับอยู่ใน A5 สูตรใน B5 คือ:
=RegExpReplace(A5, "\s+", "")
เพื่อให้ง่ายต่อการจัดการรูปแบบของคุณ คุณสามารถป้อน regex ในเซลล์ที่กำหนดไว้ล่วงหน้าและป้อนลงในสูตรโดยใช้การอ้างอิงแบบสัมบูรณ์ เช่น $A$2 ดังนั้นที่อยู่ของเซลล์จะไม่เปลี่ยนแปลงเมื่อคัดลอกสูตรลงในคอลัมน์
=RegExpReplace(A5, $A$2, "")
ลบช่องว่างมากกว่าหนึ่งช่อง
หากต้องการลบ ช่องว่างพิเศษ (เช่น มากกว่า tha n ช่องว่างติดต่อกันหนึ่งช่อง) ใช้ regex \s+ เดียวกัน แต่แทนที่รายการที่ตรงกันที่พบด้วยอักขระเว้นวรรคตัวเดียว
รูปแบบ : \s+
การแทนที่ : " "
=RegExpReplace(A5, "\s+", " ")
โปรดทราบว่าสูตรนี้เก็บอักขระเว้นวรรคไว้ 1 ตัว ไม่เพียงระหว่างด้านล่างชุดข้อมูล สมมติว่าคุณต้องการตัดแต่งช่องว่างนำหน้า/ต่อท้ายทั้งหมด และเว้นช่องว่างระหว่างช่องว่างทั้งหมด โดยรักษาหลายบรรทัดไว้เหมือนเดิม เพื่อให้งานสำเร็จ คุณจะต้องมีฟังก์ชัน RegExpReplace ที่แตกต่างกันสองฟังก์ชัน
ฟังก์ชันแรกจะแทนที่ช่องว่างหลายช่องด้วยอักขระเว้นวรรคตัวเดียว
=RegExpReplace(A5, " +", " ")
อีกฟังก์ชันหนึ่งจะตัดช่องว่างออก จากจุดเริ่มต้นและจุดสิ้นสุดของบรรทัด:
=RegExpReplace(A5, "^ +| +$", "")
เพียงนำสองฟังก์ชันมาซ้อนกัน:
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +| +$", "")
และคุณจะได้ ผลลัพธ์ที่สมบูรณ์แบบ:
Regex เพื่อแทนที่ช่องว่างหลายช่องด้วยอักขระตัวเดียว
ในกรณีที่คุณต้องการลบช่องว่างทั้งหมดออกจากสตริงและแทนที่ช่องว่างที่ต่อเนื่องกันแต่ละกลุ่ม ด้วยอักขระเฉพาะ นี่คือสิ่งที่คุณต้องทำ:
ก่อนอื่น ใช้ regex นี้เพื่อตัดช่องว่างนำหน้าและต่อท้าย:
=RegExpReplace(A8, "^[\s]+|[\s]+$", "")
จากนั้น ให้บริการฟังก์ชันด้านบน ไปยังอาร์กิวเมนต์ text ของ RegExpReplace อื่นที่แทนที่ช่องว่างที่ต่อเนื่องกันตั้งแต่หนึ่งช่องขึ้นไปด้วยอักขระที่คุณระบุ เช่น ยัติภังค์:
รูปแบบ : \s+
การแทนที่ : -
สมมติว่าสตริงต้นฉบับอยู่ใน A8 สูตร ใช้รูปแบบนี้:
=RegExpReplace(RegExpReplace(A8, "^[\s]+|[\s]+$", ""), "\s+", "-")
หรือคุณสามารถป้อนรูปแบบและการแทนที่ในเซลล์ที่แยกจากกันตามที่แสดงในภาพหน้าจอ:
Regex เพื่อลบบรรทัดว่าง
นี่คือคำถามที่ผู้ใช้ที่มีหลายบรรทัดในเซลล์เดียวมักถาม: "มีบรรทัดว่างจำนวนมากในเซลล์ของฉัน มีวิธีใดที่จะรับนอกเหนือจากการผ่านแต่ละเซลล์และลบแต่ละบรรทัดด้วยตนเองหรือไม่" คำตอบ: ง่ายมาก!
เพื่อจับคู่บรรทัดว่างที่ไม่มีอักขระตัวเดียวตั้งแต่เริ่มต้น ^ ของบรรทัดปัจจุบันจนถึง บรรทัดถัดไป \n regex คือ:
รูปแบบ : ^\n
หากบรรทัดว่างที่มองเห็นของคุณมีช่องว่างหรือแท็บ ให้ใช้นิพจน์ทั่วไปนี้:
รูปแบบ : ^[\t ]*\n
เพียงแทนที่ regex ด้วยสตริงว่างโดยใช้สูตรนี้ แล้วบรรทัดว่างทั้งหมดจะหายไปในคราวเดียว!
=RegExpReplace(A5, $A$2, "")
การลบช่องว่างด้วย RegEx Tools
ตัวอย่างข้างต้นแสดงให้เห็นเพียงส่วนเล็กๆ ของความเป็นไปได้ที่ยอดเยี่ยมจาก regexes น่าเสียดาย ไม่ใช่ทั้งหมด คุณลักษณะของนิพจน์ทั่วไปแบบคลาสสิกมีอยู่ใน VBA
โชคดีที่เครื่องมือ RegEx ที่รวมอยู่ใน Ultimate Suite ของเรานั้นปราศจากข้อจำกัดเหล่านี้เนื่องจากประมวลผลโดยกลไก .NET RegEx ของ Microsoft ซึ่งช่วยให้คุณสร้างรูปแบบที่ซับซ้อนมากขึ้น ไม่รองรับโดย VBA RegExp Belo คุณจะพบตัวอย่างของนิพจน์ทั่วไปดังกล่าว
Regex เพื่อลบช่องว่างระหว่างตัวเลข
ในสตริงที่เป็นตัวอักษรและตัวเลข สมมติว่าคุณต้องการลบช่องว่างระหว่างตัวเลขเท่านั้น ดังนั้น สตริงเช่น "A 1 2 B" กลายเป็น "A 12 B"
หากต้องการจับคู่ช่องว่างระหว่างตัวเลขสองหลักใดๆ คุณสามารถใช้การมองรอบๆ ต่อไปนี้:
รูปแบบ : (?<=\d)\s+(?=\d)
เพื่อสร้างสูตรตามใน regexes ด้านบน ต่อไปนี้เป็นขั้นตอนง่ายๆ สองขั้นตอนในการดำเนินการ:
- ในแท็บ Ablebits Data ในกลุ่ม Text คลิก Regex เครื่องมือ .
- ในบานหน้าต่าง Regex Tools เลือกแหล่งข้อมูล ป้อน regex ของคุณ เลือก ลบ ตัวเลือก และกด ลบ
เพื่อให้ได้ผลลัพธ์เป็นสูตร ไม่ใช่ค่า อย่าลืมทำเครื่องหมายในช่อง แทรกเป็นสูตร
<24
ในอีกสักครู่ คุณจะเห็นฟังก์ชัน AblebitsRegexRemove แทรกอยู่ในคอลัมน์ใหม่ทางด้านขวาของข้อมูลเดิม
หรืออีกทางหนึ่ง คุณสามารถป้อน regex ในบางเซลล์ พูด A5 และแทรกสูตรโดยตรงในเซลล์โดยใช้กล่องโต้ตอบ แทรกฟังก์ชัน โดยที่ AblebitsRegexRemove ถูกจัดหมวดหมู่ภายใต้ AblebitsUDFs .
เนื่องจากฟังก์ชันนี้ออกแบบมาเป็นพิเศษสำหรับการลบสตริง จึงต้องการเพียงสองอาร์กิวเมนต์ - สตริงอินพุตและ regex:
=AblebitsRegexRemove(A5, $A$2)
นั่นคือวิธีลบช่องว่างใน Excel โดยใช้นิพจน์ทั่วไป ฉันขอขอบคุณสำหรับการอ่านและหวังว่าจะได้พบคุณในบล็อกของเราในสัปดาห์หน้า!
ดาวน์โหลดได้
ลบช่องว่างด้วย regex - ตัวอย่าง (ไฟล์ .xlsm)
Ultimate Suite - รุ่นทดลอง (ไฟล์ .exe)
คำ แต่ยังอยู่ที่จุดเริ่มต้นและจุดสิ้นสุดของสตริงซึ่งไม่ดี หากต้องการกำจัดช่องว่างนำหน้าและต่อท้าย ให้ซ้อนสูตรด้านบนลงในฟังก์ชัน RegExpReplace อื่นที่ตัดช่องว่างจากจุดเริ่มต้นและจุดสิ้นสุด: =RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+|[\s]+$", "")
Regex เป็น ลบช่องว่างนำหน้าและต่อท้าย
หากต้องการค้นหาช่องว่างที่จุดเริ่มต้นหรือจุดสิ้นสุดของบรรทัด ให้ใช้จุดยึด $ เริ่มต้นและสิ้นสุด
นำหน้า ช่องว่าง:<3
รูปแบบ : ^[\s]+
ต่อท้าย ช่องว่าง:
รูปแบบ : [\s ]+$
นำหน้า และ ต่อท้าย ช่องว่าง:
รูปแบบ : ^[\s]+