REGEXEXTRACT เป็นฟังก์ชันสำหรับดึงข้อความย่อย (Substring) ที่ตรงกับรูปแบบ Regular Expression ที่กำหนด เหมาะสำหรับการทำ Data Cleaning ขั้นสูงที่ฟังก์ชันจัดการข้อความปกติทำไม่ได้
=REGEXEXTRACT(text, regular_expression)
=REGEXEXTRACT(text, regular_expression)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| text | Text | Yes | ข้อความหรือเซลล์ที่ต้องการดึงข้อมูล | |
| regular_expression | Text | Yes | รูปแบบ Regex ที่ต้องการค้นหา (ต้องอยู่ในเครื่องหมายคำพูด) หากมีกลุ่มวงเล็บ () จะคืนค่าเฉพาะในวงเล็บ ถ้าไม่มีวงเล็บจะคืนเฉพาะส่วนที่ตรงกับรูปแบบทั้งหมด |
แยกชื่อเว็บไซต์ (Domain) ออกจากที่อยู่อีเมล
แยกรหัสไปรษณีย์หรือเบอร์โทรศัพท์ที่ปนอยู่กับข้อความ
ดึงชื่อไฟล์หรือนามสกุลไฟล์จาก URL ยาวๆ
REGEXEXTRACT("support@thepexcel.com", "@(.+)")=REGEXEXTRACT("support@thepexcel.com", "@(.+)")
thepexcel.com
REGEXEXTRACT("Order #12345 confirmed", "\d+")=REGEXEXTRACT("Order #12345 confirmed", "\d+")
12345
REGEXEXTRACT("The Matrix (1999)", "\((\d{4})\)")=REGEXEXTRACT("The Matrix (1999)", "\((\d{4})\)")
1999
REGEXEXTRACT("Call: 081-234-5678 ext 100", "\d{3}-\d{3}-\d{4}")=REGEXEXTRACT("Call: 081-234-5678 ext 100", "\d{3}-\d{3}-\d{4}")
081-234-5678
REGEXEXTRACT("Vintage: 1999 or 2001", "[0-9]+")=REGEXEXTRACT("Vintage: 1999 or 2001", "[0-9]+")
1999
VALUE(REGEXEXTRACT("Price: $1,234.50", "\d+(?:,\d{3})*(?:\.\d{2})"))=VALUE(REGEXEXTRACT("Price: $1,234.50", "\d+(?:,\d{3})*(?:\.\d{2})"))
1234.5
REGEXEXTRACT = ดึง (extract) ส่วนที่ตรงกับรูปแบบ | REGEXREPLACE = แทนที่ (replace) ส่วนที่ตรงกับรูปแบบด้วยข้อความใหม่
Excel 365 เพิ่งมีฟังก์ชัน REGEXEXTRACT ให้ใช้แล้ว (Public Preview ปี 2024) ทำงานคล้าย ๆ กับของ Google Sheets แต่ถ้าใช้ Excel รุ่นเก่ากว่าต้องใช้ VBA หรือ Python in Excel
จะคืนค่า error #N/A แนะนำให้ครอบด้วย IFERROR เช่น `=IFERROR(REGEXEXTRACT(A2, “\d+”), “ไม่พบ”)` เพื่อจัดการกรณีไม่พบข้อมูล
ใช้ AI ช่วย! บอก ChatGPT/Claude/Gemini ว่า “Write a regex to extract [สิ่งที่ต้องการ]” หรือทดสอบที่ regexr.com ซึ่งมีคำอธิบายแบบ visual
ใช้ RE2 (Google’s regex engine) คล้าย JavaScript/PCRE แต่ไม่รองรับ lookahead `(?=)` และ lookbehind `(?<=)` เพื่อความปลอดภัย ดูรายละเอียดที่ github.com/google/re2/wiki/Syntax
ดึง “ครั้งแรก” ที่เจอเท่านั้น ถ้า “1999 or 2001” ดึงได้ 1999 ถ้าต้องดึงทั้งหมด ต้องใช้ REGEXMATCH (array formula) หรือ REGEXREPLACE
ฟังก์ชัน REGEXEXTRACT ช่วยให้คุณดึงส่วนหนึ่งของข้อความออกมาโดยใช้รูปแบบ Regular Expression (Regex) ซึ่งมีความยืดหยุ่นสูงกว่าการใช้ LEFT, RIGHT, MID เหมาะสำหรับดึงข้อมูลที่มีรูปแบบซับซ้อน เช่น อีเมล เบอร์โทรศัพท์ หรือรหัสสินค้า
**💡 Regex Pattern พื้นฐาน:**
• `\d` = ตัวเลข 0-9 (เช่น `\d+` = ตัวเลข 1 ตัวขึ้นไป)
• `[0-9]+` = ตัวเลขตั้งแต่ 1 ตัวขึ้นไป (เหมือน `\d+`)
• `.` = อักขระใด ๆ 1 ตัว
• `+` = 1 ครั้งขึ้นไป | `*` = 0 ครั้งขึ้นไป | `?` = 0 หรือ 1 ครั้ง
• `[abc]` = a หรือ b หรือ c
• `()` = กลุ่มที่ต้องการดึง (capture group) – ถ้าไม่ใส่วงเล็บ จะดึงทั้งรูปแบบ
• `^` = ต้นข้อความ | `$` = ท้ายข้อความ
• `|` = หรือ (เช่น `cat|dog` = cat หรือ dog)
**🔧 Regex Engine:** Google Sheets ใช้ RE2 (Google’s regex engine) ซึ่งคล้าย JavaScript/PCRE แต่ปลอดภัยกว่า (ไม่รองรับ lookahead `(?=)` และ lookbehind `(?<=)` เพื่อความปลอดภัย)
**📌 จำเป้าหมายสำคัญ:**
• REGEXEXTRACT ดึง “เฉพาะครั้งแรก” ที่เจอ ไม่ใช่ทั้งหมด (ถ้าอยากดึงทั้งหมดใช้ REGEXREPLACE หรือ REGEXMATCH)
• ถ้าใส่วงเล็บ `()` จะดึงเฉพาะส่วนในวงเล็บ ไม่ใช่ทั้งรูปแบบ
• ถ้าไม่เจออะไรจะได้ error #N/A (ต้อง IFERROR)
ส่วนตัวผม REGEXEXTRACT เป็นฟังก์ชันที่ประหยัดเวลาสุด ๆ เวลามีข้อมูลที่ยุ่งโจม แล้วต้องดึงส่วนที่เฉพาะเจาะจง ทำให้ Data Cleaning ของผมเร็วกว่าเดิม 10 เท่า สิ่งที่เจ๋ง คือสามารถดึงจากหลายแบบนะ ตัวเลข, อีเมล, โดเมน, เลขโทรศัพท์, รหัส SKU – แค่เขียน Regex ที่ถูก 😎