สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง

extract-text-excel
วันนี้ วันนั้น วันไหน? : เรื่องลับๆเกี่ยวกับวันที่ใน Excel
วิธีกำหนดให้ Pivot Table แสดงเฉพาะแถว/คอลัมน์ที่ต้องการ

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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 1

ปรากฏว่ามีคนสนใจมาตอบเป็นจำนวนมากกกกก กว่าที่ผมคิดไว้เยอะเลย และมีหลายท่านได้นำเสนอวิธีที่น่าสนใจและควรค่าต่อการนำมาอธิบายต่อมาก

ดังนั้นผมจะขออนุญาตนำวิธีของแต่ละท่านที่ตอบมาอธิบายให้ละเอียดมากขึ้น เผื่อที่คนมาอ่านจะได้นำไปต่อยอดความรู้ของตัวเองได้ครับ (ลองไปดูใน 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

วิธีที่ 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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 3

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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 4

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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 5

วิธีที่ 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 ตามรูปได้เลย

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 6

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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 7

สรุป 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 เอาไว้ก่อน

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 8

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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 9

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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 10

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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 11

สรุป 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) ก็จะได้ตำแหน่งของ – ตัวที่สองครับ

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 12

แนะนำมาโดย : 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 จากซ้ายไปขวาครับ

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 13

วิธีที่ 5 : ใช้สูตร SUBSTITUTE ช่วยหาพิกัดของ – ตัวที่สอง

หลักการ : หาตำแหน่ง – ตัวที่สองให้ได้ แล้วใช้ RIGHT ดึงข้อความออกมา
ซึ่งสูตรนี้จะใช้ SUBSTITUTE เปลี่ยน – ตัวที่สองให้กลายเป็นเครื่องหมายแปลกๆ ก่อน เช่น | แล้วค่อยใช้ FIND หาตำแหน่งของ | อีกที ที่เหลือก็ไม่ใช่เรื่องยากแล้ว

ทั้งนี้เพราะ =SUBSTITUTE(text,old_text,new_text,instance_num) ยอมให้เราระบุได้ว่าจะแทนข้อความเดิมคำที่เท่าไหร่ในส่วนของ instance_num นั่นเองครับ

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 14

ซึ่งวิธีนี้จะสะดวกในกรณีที่เครื่องหมาย – มีเยอะๆ เช่น อยากจะได้ – ตัวที่ 5 เราก็สามารถระบุได้เลยด้วย =SUBSTITUTE(text,”-“,”|”,5) โดยไม่ต้องเขียน FIND 5 รอบครับ

แนะนำมาโดย : เทพเอ็กเซล

วิธีทำ : ในช่อง B3 เขียนสูตรว่า

=RIGHT(A3,LEN(A3)-FIND("|",SUBSTITUTE(A3,"-","|",2)))

มาดูทีละ Part แบบทีละ Step จากซ้ายไปขวาครับ

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 15

วิธีที่ 6 : ใช้ REPLACE ในการตัดข้อความส่วนหน้าออกไปซะ เหลือแต่ข้างหลัง

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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 16

แนะนำมาโดย : Pichai Tee

วิธีทำ : ในช่อง B3 เขียนสูตรว่า

=REPLACE(A3,1,FIND("-",A3,FIND("-",A3)+1),"")

มาดูทีละ Part แบบทีละ Step จากซ้ายไปขวาครับ

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 17

วิธีที่ 7 : ใช้ MID เพื่อเลือกข้อความส่วนที่ต้องการ

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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 18

แนะนำมาโดย : Manop Udom

วิธีทำ : ในช่อง B3 เขียนสูตรว่า

=MID(A3,FIND("-",A3,FIND("-",A3)+1)+1,LEN(A3))

มาดูทีละ Part แบบทีละ Step จากซ้ายไปขวาครับ

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 19

วิธีที่ 8 : ใช้ TRIM + MID ตัดเอาส่วนที่ต้องการ

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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 20

แนะนำมาโดย : Bo Rydobon

วิธีทำ : ในช่อง B3 เขียนสูตรว่า

=TRIM(MID(SUBSTITUTE(A3,"-",REPT(" ",40)),80,40))

มาดูทีละ Part แบบทีละ Step จากซ้ายไปขวาครับ

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 21

อย่างไรก็ตาม วิธีนี้ต้องแทนจำนวนช่องว่างให้เยอะเมื่อเทียบกับจำนวนข้อความแต่ละ 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 ใหม่ดังรูป

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 22

จากนั้นใส่ 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

เพื่อให้สะดวกขึ้นว่าจะเอาตัวคั่นตัวไหน และเอาข้อมูลตัวที่เท่าไหร่นะครับ

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 23

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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 24

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

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 25

สรุปวิธีดึงข้อความ

บทความนี้ยาวมาก มีใครอ่านมาจนจบบ้างมั้ย 555

ใครที่อ่านมาถึงตรงนี้น่าจะเห็นแล้วว่า ปัญหาหนึ่งๆใน Excel มันมีทางแก้เยอะมากๆ นี่ขนาดแค่เรื่องดึงข้อความจากส่วนที่ต้องการยังมีวิธีหลากหลายขนาดนี้เลย

อย่างไรก็ตามหลักการแก้ปัญหานี้มีอยู่ 2 ส่วนหลักๆ คือ

  1. หาตำแหน่งที่เป็นจุดแบ่งที่เหมาะสม (เช่น FIND ซ้อน FIND, SUBSTITUTE ตัวที่กำหนด แล้ว FIND)
  2. ดึงส่วนของข้อความที่ต้องการ (จะใช่ RIGHT, MID หรืออะไรก็แล้วแต่)
    ซึ่งจริงๆ แล้วฟังก์ชัน MID ก็สามารถใช้แทน LEFT และ RIGHT ได้อยู่แล้วอ่ะนะ เพราะมันเป็นตัวที่มีความ Flexible มากกว่า เนื่องจากกำหนดได้ทั้งจุดเริ่มต้น และจำนวนตัวอักษรที่ต้องการ

ซึ่งแต่ละส่วนก็แก้ปัญหาได้หลายแบบ ดังนั้นหากเราเปิดใจให้กับวิธีใหม่ๆ เราก็จะเรียนรู้และพลิกแพลงสิ่งต่างๆ ได้อีกเยอะเลยครับ

นอกเหนือจากวิธีดังกล่าว ยังมีอีกหลายท่านที่มาแนะนำการใช้เครื่องมืออื่นๆ ซึ่งต่างก็เจ๋งๆ กันทั้งนั้น เราเองก็น่าจะลองเปิดใจ ศึกษาเครื่องมือเหล่านี้ด้วยเช่นกันครับ

เช่น Google Sheets (Qiuxuan Ank, Jonathan Ablanida)

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 26
สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 27

R, Python (Kasidis Satangmongkol)

สารพัดวิธีดึงข้อความหลังตัวคั่นตัวที่สอง 28

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

เดี๋ยวบทความถัดไป จะเป็นการอธิบายเรื่องที่ยากกว่านี้ นั่นคือ การดึงตัวเลขออกมาจากข้อความนั่นเอง จะเป็นยังไง รอติดตามได้เลยครับ!!

........

ใครที่ชื่นชอบบทความนี้และเห็นว่ามีประโยชน์ ช่วยบอกต่อเพื่อนๆ ของคุณด้วยนะครับ
ยิ่งเกิดประโยชน์กับคนเยอะๆ ผู้เขียนก็ยิ่งดีใจครับ คนแชร์ก็ได้ร่วมสร้างประโยชน์ด้วยนะ ^^

อย่าลืมกดติดตามเทพเอ็กเซลได้ที่ Facebook.com/ThepExcel
และสามารถติดตามคลิปวีดีโอเจ๋งๆ ได้ที่ YouTube Channel ของ Thep Excel ครับ


วันนี้ วันนั้น วันไหน? : เรื่องลับๆเกี่ยวกับวันที่ใน Excel
วิธีกำหนดให้ Pivot Table แสดงเฉพาะแถว/คอลัมน์ที่ต้องการ
  • 435
  •  
  •  
  •  
  •  

Posted on: August 1, 2019
Tags: , , , , , , , , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *