หลายวันก่อนผมมีการ Post คำถามนี้ ไปใน เพจเทพเอ็กเซล ว่า จะดึงข้อความหลังเครื่องหมาย – ตัวที่สองได้อย่างไร?

ปรากฏว่ามีคนสนใจมาตอบเป็นจำนวนมากกกกก กว่าที่ผมคิดไว้เยอะเลย และมีหลายท่านได้นำเสนอวิธีที่น่าสนใจและควรค่าต่อการนำมาอธิบายต่อมาก
ดังนั้นผมจะขออนุญาตนำวิธีของแต่ละท่านที่ตอบมาอธิบายให้ละเอียดมากขึ้น เผื่อที่คนมาอ่านจะได้นำไปต่อยอดความรู้ของตัวเองได้ครับ (ลองไปดูใน Post ได้นะครับว่าใครตอบแบบไหนมา หลายคนก็ตอบวิธีเดียวกันครับ)
ขอเริ่มจากวิธีที่ผมคิดว่าง่ายที่สุดก่อนละกันนะครับ
สารบัญ
วิธีที่ 1 : ใช้ Flash Fill
หลักการ : Excel จะพยายามหา Pattern ของสิ่งที่เราใส่เป็นตัวอย่าง แล้วเลียนแบบสิ่งนั้นให้โดยอัตโนมัติ (แต่ไม่ใช่สูตร หากข้อมูลต้นทางเปลี่ยนต้องกดคำสั่ง Flash Fill ใหม่)
ข้อจำกัด : ใช้ได้ตั้งแต่ Excel 2013 ขึ้นไป
แนะนำมาโดย : Bob Pytnst, Noppadol Rattanawisadrat, Taekuza Meathayavat
วิธีทำ : พิมพ์ตัวอย่างสิ่งที่อยากได้ เช่น UITR ลงไปในช่อง B2 กด Enter
พอเราอยู่ที่ช่อง B3 แล้ว จากนั้นกด Flash Fill
ที่ Data –> (Data Tool) Flash Fill ที่เป็นรูปสายฟ้า
หรือกด Ctrl+E ก็ได้ครับ (ผมชอบกดแบบนี้ ง่ายกว่าเยอะ)

วิธีที่ 2 : ใช้ Text to Column แบบ Delimited
หลักการ : แบ่งข้อมูลจากคอลัมน์เดียว กลายเป็นหลายๆ คอลัมน์ โดยมีตัวคั่นที่ชัดเจน คือ เครื่องหมาย – นั่นเอง ( แต่ไม่ใช่สูตร หากข้อมูลต้นทางเปลี่ยนต้องกดคำสั่ง Text to Column ใหม่)
แนะนำมาโดย : Chatchai Sanguanwong, Tee Jamjam, Gus Pholsap, Natdanai Choksakulsub, Bob S. Wibulseth
วิธีทำ Copy ข้อมูลออกมาเป็นอีกคอลัมน์นึงก่อน จากนั้นไปที่
Data –> (Data Tools) Text To Column

จากนั้นเลือก Delimiter (ตัวแบ่ง) เป็น Other แล้วพิมพ์ – ลงไปในช่องว่าง แล้ว Finish ได้เลย

จากนั้น ให้ลบ Cell ที่ไม่เกี่ยวข้องออก ถ้าต้องการ

วิธีที่ 3 : ใช้ Power Query Extract Data
หลักการ : ใช้ Power Query ดึงเอาข้อมูลจากตัวคั่น – ตัวขวาสุุด (หากข้อมูลต้นทางเปลี่ยนแปลงสามารถกด Refresh ได้)
ข้อจำกัด : ต้องมี Power Query รุ่นใหม่ (Excel 365) หรือ Power BI Desktop
แนะนำมาโดย : เทพเอ็กเซล
วิธีทำ โหลดข้อมูลที่ต้องการเข้า Power Query ก่อน (เช่น Get Data from Table/Range)
จากนั้น Add Column –> Extract –> Text After Delimiter ตามรูปได้เลย

กด ok แล้วจบเลย

สรุป M-Code
let Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content], #"Inserted Text After Delimiter" = Table.AddColumn(Source, "Text After Delimiter", each Text.AfterDelimiter([code], "-", {0, RelativePosition.FromEnd}), type text) in #"Inserted Text After Delimiter"
วิธีที่ 4 : ใช้ Power Query Split
หลักการ : สำหรับคนที่มี Power Query version เก่า จะไม่มีเครื่องมือ Extract After Delimiter แบบตัวอย่างที่แล้ว
ดังนั้นเราจะมาใช้ Power Query Split แทน ซึ่งสามารถ Split ข้อมูลจากตัวคั่น – ตัวขวาสุุดได้ครับ
แนะนำมาโดย : เทพเอ็กเซล
ข้อจำกัด : ต้องมี Power Query (Excel 2010 ขึ้นไป) หรือ Power BI Desktop
วิธีทำ : โหลดข้อมูลที่ต้องการเข้า Power Query ก่อน (เช่น Get Data from Table/Range)
จากนั้น Duplicate Column เอาไว้ก่อน

ต่อไปเราก็จะทำการ Split Column ออกมา โดยใช้ Delimiter แล้วเอาจากด้านขวาสุด

จะได้ส่วนที่ต้องการออกมาเลย

กด Remove Column ที่ไม่ต้องการเป็นอันจบ

สรุป M-Code
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Duplicated Column" = Table.DuplicateColumn(Source, "code", "code - Copy"), #"Split Column by Delimiter" = Table.SplitColumn(#"Duplicated Column", "code - Copy", Splitter.SplitTextByEachDelimiter({"-"}, QuoteStyle.Csv, true), {"code - Copy.1", "code - Copy.2"}), #"Removed Columns" = Table.RemoveColumns(#"Split Column by Delimiter",{"code - Copy.1"}) in #"Removed Columns"
วิธีที่ 4 : ใช้สูตร FIND เพื่อหาตำแหน่ง – ตัวที่สอง
หลักการ : FIND สามารถหาตำแหน่งของคำที่ต้องการได้ และระบุได้ว่าจะให้เริ่มหาตั้งแต่ตัวไหน
ดังนั้นถ้าเราเริ่มหาตั้งแต่หลังจากที่เจอตัวแรกไป (ด้วยการเอาตำแหน่งที่เจอตัวแรกไป +1) ก็จะได้ตำแหน่งของ – ตัวที่สองครับ

แนะนำมาโดย : Apichot Hongkham, Aussanee Sripirom, Jason Beer, Vorrachai Rojanaporntip, Nop Noppon, Guy SN, Parakorn Tantapon, Wittaya Chainim, Worachai Pathumapa
วิธีทำ : ในช่อง B3 เขียนสูตรว่า
=RIGHT(A3,LEN(A3)-FIND("-",A3,FIND("-",A3)+1))
มาดูทีละ Part แบบทีละ Step จากซ้ายไปขวาครับ

วิธีที่ 5 : ใช้สูตร SUBSTITUTE ช่วยหาพิกัดของ – ตัวที่สอง
หลักการ : หาตำแหน่ง – ตัวที่สองให้ได้ แล้วใช้ RIGHT ดึงข้อความออกมา
ซึ่งสูตรนี้จะใช้ SUBSTITUTE เปลี่ยน – ตัวที่สองให้กลายเป็นเครื่องหมายแปลกๆ ก่อน เช่น | แล้วค่อยใช้ FIND หาตำแหน่งของ | อีกที ที่เหลือก็ไม่ใช่เรื่องยากแล้ว
ทั้งนี้เพราะ =SUBSTITUTE(text,old_text,new_text,instance_num) ยอมให้เราระบุได้ว่าจะแทนข้อความเดิมคำที่เท่าไหร่ในส่วนของ instance_num นั่นเองครับ

ซึ่งวิธีนี้จะสะดวกในกรณีที่เครื่องหมาย – มีเยอะๆ เช่น อยากจะได้ – ตัวที่ 5 เราก็สามารถระบุได้เลยด้วย =SUBSTITUTE(text,”-“,”|”,5) โดยไม่ต้องเขียน FIND 5 รอบครับ
แนะนำมาโดย : เทพเอ็กเซล
วิธีทำ : ในช่อง B3 เขียนสูตรว่า
=RIGHT(A3,LEN(A3)-FIND("|",SUBSTITUTE(A3,"-","|",2)))
มาดูทีละ Part แบบทีละ Step จากซ้ายไปขวาครับ

วิธีที่ 6 : ใช้ REPLACE ในการตัดข้อความส่วนหน้าออกไปซะ เหลือแต่ข้างหลัง
หลักการ : หาตำแหน่ง – ตัวที่สองให้ได้ก่อน จากนั้นใช้ REPLACE ตัดข้อความที่ไม่ต้องการออก โดยเอาออกตั้งแต่ตำแหน่งแรก เป็นจำนวนตัวอักษรเท่ากับตำแหน่งของ – ตัวที่สอง แล้วแทนด้วย “”

แนะนำมาโดย : Pichai Tee
วิธีทำ : ในช่อง B3 เขียนสูตรว่า
=REPLACE(A3,1,FIND("-",A3,FIND("-",A3)+1),"")
มาดูทีละ Part แบบทีละ Step จากซ้ายไปขวาครับ

วิธีที่ 7 : ใช้ MID เพื่อเลือกข้อความส่วนที่ต้องการ
หลักการ : หาตำแหน่ง – ตัวที่สองออกมาแล้วใช้ MID ดึงข้อความหลังจากนั้นมาซะ ซึ่งหากเราใส่จำนวนตัวอักษรที่ต้องการจะดึงด้วย MID ยาวมากจนเกินตัวอักษรที่มีก็ไม่เป็นไร ดังนั้นในที่นี้เลยดึงออกมาด้วย LEN ซะเลย (แม้จะเริ่มต้นที่ตำแหน่งหลัง – ตัวที่สองแล้วก็ตาม)

แนะนำมาโดย : Manop Udom
วิธีทำ : ในช่อง B3 เขียนสูตรว่า
=MID(A3,FIND("-",A3,FIND("-",A3)+1)+1,LEN(A3))
มาดูทีละ Part แบบทีละ Step จากซ้ายไปขวาครับ

วิธีที่ 8 : ใช้ TRIM + MID ตัดเอาส่วนที่ต้องการ
หลักการ : วิธีนี้ค่อนข้างแปลกมากๆ ครับ คือพยายามใช้ช่องว่างจำนวนมหาศาลมาใส่แทน – แต่ละตัว แล้วใช้ MID เลือกส่วนที่ต้องการมา (คัดให้เริ่มและจบที่ช่องว่างระหว่างคำ) จากนั้นใช้ TRIM เพื่อตัดช่องว่างส่วนเกินออก

แนะนำมาโดย : Bo Rydobon
วิธีทำ : ในช่อง B3 เขียนสูตรว่า
=TRIM(MID(SUBSTITUTE(A3,"-",REPT(" ",40)),80,40))
มาดูทีละ Part แบบทีละ Step จากซ้ายไปขวาครับ

อย่างไรก็ตาม วิธีนี้ต้องแทนจำนวนช่องว่างให้เยอะเมื่อเทียบกับจำนวนข้อความแต่ละ part นะครับ ไม่งั้นผลอาจผิดได้ เช่น ถ้าข้อความยาวมาก เราอาจใส่เลขเยอะหน่อยแบบนี้ก็ได้
=TRIM(MID(SUBSTITUTE(A3,"-",REPT(" ",200)),400,200))
ทั้งนี้เพื่อให้ MID สามารถเลือกคำระหว่างช่องว่างออกมาให้ได้นั่นเองครับ
วิธีที่ 9 : ใช้ VBA สร้างฟังก์ชัน Split ขึ้นมาเอง
หลักการ : Excel ในปัจจุบันยังไม่มีฟังก์ชัน SPLIT แบบเดียวกับ Google Sheets แต่ว่าเราก็พอหาทางแก้ไขได้โดยการเขียนฟังก์ชันใน VBA มาใช้เองครับ
แนะนำมาโดย : Bo Rydobon
วิธีทำ : กด Alt+F11 เพื่อเปิด VBA Editor ขึ้นมาครับ
จากนั้น คลิ๊กขวาเพื่อ Insert Module ใหม่ดังรูป

จากนั้นใส่ code ดังนี้
Function GetSplit(text As String, dlm As String, pos As Integer) GetSplit = split(text, dlm)(pos - 1) End Function
**ผมขอดัดแปลง Code เล็กน้อย จากที่เดิม comment มาจริงๆ ว่า
Function split2(t) split2 = Split(t, "-")(2) End Function
เพื่อให้สะดวกขึ้นว่าจะเอาตัวคั่นตัวไหน และเอาข้อมูลตัวที่เท่าไหร่นะครับ

จากนั้นสามารถเรียกใช้ฟังก์ชันได้เลย เช่น =GetSplit(A2,”-“,3) จะแบ่งข้อมูลด้วย – จากนั้นดึงเอาส่วนที่ 3 มาครับ

ถ้าใช้วิธีนี้แล้วจะ Save ไฟล์ไว้ อย่าลืม Save เป็น .xlsm หรือไม่ก็ .xls นะครับ (ไม่งั้น VBA จะหายหมดนะ)

สรุปวิธีดึงข้อความ
บทความนี้ยาวมาก มีใครอ่านมาจนจบบ้างมั้ย 555
ใครที่อ่านมาถึงตรงนี้น่าจะเห็นแล้วว่า ปัญหาหนึ่งๆใน Excel มันมีทางแก้เยอะมากๆ นี่ขนาดแค่เรื่องดึงข้อความจากส่วนที่ต้องการยังมีวิธีหลากหลายขนาดนี้เลย
อย่างไรก็ตามหลักการแก้ปัญหานี้มีอยู่ 2 ส่วนหลักๆ คือ
- หาตำแหน่งที่เป็นจุดแบ่งที่เหมาะสม (เช่น FIND ซ้อน FIND, SUBSTITUTE ตัวที่กำหนด แล้ว FIND)
- ดึงส่วนของข้อความที่ต้องการ (จะใช่ RIGHT, MID หรืออะไรก็แล้วแต่)
ซึ่งจริงๆ แล้วฟังก์ชัน MID ก็สามารถใช้แทน LEFT และ RIGHT ได้อยู่แล้วอ่ะนะ เพราะมันเป็นตัวที่มีความ Flexible มากกว่า เนื่องจากกำหนดได้ทั้งจุดเริ่มต้น และจำนวนตัวอักษรที่ต้องการ
ซึ่งแต่ละส่วนก็แก้ปัญหาได้หลายแบบ ดังนั้นหากเราเปิดใจให้กับวิธีใหม่ๆ เราก็จะเรียนรู้และพลิกแพลงสิ่งต่างๆ ได้อีกเยอะเลยครับ
นอกเหนือจากวิธีดังกล่าว ยังมีอีกหลายท่านที่มาแนะนำการใช้เครื่องมืออื่นๆ ซึ่งต่างก็เจ๋งๆ กันทั้งนั้น เราเองก็น่าจะลองเปิดใจ ศึกษาเครื่องมือเหล่านี้ด้วยเช่นกันครับ
เช่น Google Sheets (Qiuxuan Ank, Jonathan Ablanida)


R, Python (Kasidis Satangmongkol)

สุดท้ายนี้ขอขอบคุณทุกคนที่เข้ามา Comment ใน Post ที่ผมถามคำถามไปด้วยนะครับ ถือว่าเป็นการได้แลกเปลี่ยนความรู้กันได้ดีมากๆ และคนอ่านก็น่าจะเกิดประโยชน์มากด้วยเช่นกัน ^^
เดี๋ยวบทความถัดไป จะเป็นการอธิบายเรื่องที่ยากกว่านี้ นั่นคือ การดึงตัวเลขออกมาจากข้อความนั่นเอง จะเป็นยังไง รอติดตามได้เลยครับ!!
Leave a Reply