Author: Sira Ekabut

  • รายงานสถิติหวยย้อนหลังด้วย Power BI

    รายงานสถิติหวยย้อนหลังด้วย Power BI

    ไหนๆ ก็จะมีหวยออกอีกแล้ว สำหรับคนที่ชื่นชอบการเสี่ยงโชคแบบนี้ จะเสี่ยงทั้งทีต้องมีสถิติหวยมาช่วยหน่อยจริงมั้ย?

    ว่าแล้วก็เลยเอาข้อมูลหวยย้อนหลัง มาทำ visual บน Power BI ซะเลยผลออกมาได้แบบนี้ครับ

    • Edit 1 : เพิ่มวันในสัปดาห์ให้ เพื่อความศักดิ์สิทธิ์
    • Edit 2 : 15/3/2021 มีอะไรใหม่ใน Version นี้
      • สามารถเลือกวันที่ได้หลายรูปแบบ (2 Mode การเลือก)
      • มีพื้นที่แสดงเลขเยอะขึ้น ทั้งเลขออกบ่อยและออกน้อย
      • สามารถแสดงเลขที่ไม่เคยออกเลยได้ด้วย ( Version เดิมจะไม่ขึ้น)
    • Edit 3 : 15/11/2021 สร้างกราฟเลขเด็ด ด้วยเครื่องมือ Charticulator () เพื่อแสดงว่ามีเลข 0-9 อันไหนที่ออกบ่อย
    • Edit4 : เปลี่ยน User ในการ Publish รายงาน แก้หน้าตาและการเรียงเลขใน Table ให้เรียงตามความบ่อยในการออกเป็นหลัก และเรียงตามจำนวนวันที่ไม่ได้ออกมานานแค่ไหน
    • Edit 5 : 31/10/2024 แก้หน้าตารายงานให้ simple ขึ้น

    ซึ่งข้อมูลนี้มันสามารถอัปเดทได้เรื่อยๆ อัตโนมัติด้วยนะ 555

    รายงานสถิติหวยย้อนหลังด้วย Power BI 1

    ปล. ผมเอาข้อมูลสถิติหวยมาจากที่นี่ครับ

    ถามว่า คุณคิดว่า ถ้าจะซื้อหวย ควรซื้อแบบไหน?

    ระหว่างเลขที่เคยออกบ่อย หรือ ซื้อเลขที่ไม่ค่อยได้ออกครับ ????

    ใครซื้ออะไรไป ถ้าถูกก็ยินดีด้วย แต่ถ้าโดนกิน ทางเทพเอ็กเซลไม่รับผิดชอบน้าาาา เพราะเราก็ไม่เคยถูกเลย 555

  • วิธีทำให้ VBA Run คำสั่ง ณ เวลาที่ต้องการ

    วิธีทำให้ VBA Run คำสั่ง ณ เวลาที่ต้องการ

    จากที่ผมสอนวิธีการส่ง line/email ด้วย excel ไป ทำให้มีหลายคนถามมาหลังไมค์ว่า ทำยังไงถึงจะให้ VBA มันแจ้งเตือน ณ เวลาใดเวลาหนึ่งที่ต้องการได้? เช่น บางคนอาจเอาไปส่งเตือนลูกค้า บางคนเอาไว้ส่งเรื่องหุ้น อะไรแบบนี้

    การที่จะทำแบบนั้นได้ แปลว่ามันต้องมี Event/Trigger บางอย่างเกิดขึ้น ดังนั้นใบบทความนี้จะสอนว่าทำยังไงถึงจะรัน VBA ในเวลาที่กำหนดได้ครับ

    สร้าง Action ขึ้นมาก่อน

    สมมติว่าผมสร้าง sub เพื่อแสดง msgbox ธรรมดาๆ ไว้ใน Module 1 ดังนี้ (ให้แสดง msgbox นี่แหละ ง่ายสุดในสามโลกแล้ว)

    Sub TestMacro1()
    
    MsgBox ("Test Run Macro Number 1")
    
    End Sub
    
    Sub TestMacro2()
    
    MsgBox ("Test Run Macro Number 2")
    
    End Sub
    

    ทั้งนี้ในชีวิตจริงคุณต้องเปลี่ยนจาก MsgBox ไป call sub ที่เตรียมไว้ เช่น Call LineNotify อะไรแบบนี้นะ

    Application.Ontime คำสั่งที่ใช้กำหนดเรื่องรันตาม schedule เวลา

    การกำหนด schedule เวลา จะใช้ Code แบบง่ายสุดในรูปแบบนี้

    Application.OnTime เวลา, "ชื่อsub" 

    ระวัง! อย่างไรก็ตาม เวลาที่ใส่ลงไปเป็นเวลาอย่างเร็วสุดที่จะรันคำสั่ง (จะไม่รันก่อนหน้านั้นแน่นอน) แต่มันอาจไม่รันตอนเวลานั้นเป๊ะ (ถ้า Excel ยังยุ่งกับเรื่องอื่นอยู่)

    ดังนั้นผมสามารถสร้าง Sub ไว้ Test เรื่องเวลาดังนี้

    เวลาอาจจะใช้เป็นตัวแปร เช่น MyTime แล้ว MyTime สามารถกำหนดได้หลายแบบเช่น

    ถ้าใส่เวลาลงไปเลย เช่น

    Sub TestTime1()
    MyTime = TimeValue("19:43:00")   'รันตอน 19:43
    Application.OnTime MyTime, "TestMacro2"
    End Sub

    ถ้าใส่แบบนับจากปัจจุบันด้วยวิธี
    Now + TimeSerial(ชั่วโมง, นาที, วินาที) หรือ
    Now + TimeValue(” ชั่วโมง : นาที : วินาที “) ก็ได้

    Sub TestTime2()
    MyTime = Now + TimeSerial(0, 0, 5)   'อีก 5 วินาทีจะรัน
    MyTime2 = Now + TimeValue("00:00:05")  'อีก 5 วินาทีจะรัน แบบนี้ก็ได้
    Application.OnTime MyTime, "TestMacro1"
    End Sub

    พอกด F5 ที่ Sub TestTime ก็จะพบว่าอีก 5 วินาทีถึงจะมี MsgBox เก้งขึ้นมาว่า Test Run Macro Number 1

    มีคำสั่งอื่นแทรกก็ได้

    แต่ถ้าใส่อีกคำสั่งต่อท้ายไปเลยแบบไม่หน่วงเวลา คำสั่ง Test แทรกที่ต่อท้ายมันจะถูกรันขึ้นมาก่อน (เพราะคำสั่งแรกมีการ schedule เอาไว้ว่าอีก 5 วินาทีจากตอนแรกถึงจะสั่ง TestMacro1)

    Sub TestTime3()
    MyTime = Now + TimeSerial(0, 0, 5)   'อีก 5 วินาทีจะรัน
    Application.OnTime MyTime, "TestMacro1" 'อันนี้สั่งตาม schedule ล่วงหน้าไว้
    MsgBox ("Test แทรก") 'นี่คือคำสั่งแทรก
    End Sub

    ถ้าจะยกเลิกการ Schedule สามารถทำได้ดังนี้

    Application.OnTime เวลาเดิมที่สั่ง, "ชื่อsubเดิมที่สั่ง", , False
    'False คือสั่ง cancel

    เช่น

    Sub TestTime4()
    Mytime = Now + TimeSerial(0, 0, 5)   'อีก 5 วินาทีจะรัน
    Application.OnTime Mytime, "TestMacro1"
    MsgBox ("Test แทรก")
    Application.OnTime Mytime, "TestMacro1", , False    'นี่จะ cancel การ schedule
    End Sub

    การสั่งรันหลายๆ ครั้งต่อเนื่อง ทุกๆ xx นาที

    ถ้าเราสั่งให้ Sub 2 ตัวมันเรียกกันเอง มันก็จะรันต่อเนื่องไปเรื่อยๆ ได้ เช่น

    Sub TestMacroRecur()
    
    MsgBox ("Test Run Macro Number 2")
    
    StartTimeRecur   'เรียกตัว schedule อีกรอบ
    
    End Sub
    
    Sub StartTimeRecur()
    StartTime = Now + TimeSerial(0, 0, 5)   'อีก 5 วินาทีจะรัน
    Application.OnTime StartTime, "TestMacroRecur", , True
    End Sub

    แต่ที่นี้มันจะรันไปเรื่อยๆ ไม่หยุดเลย เราก็ต้องสร้างปุ่มมาสั่งหยุดการเตือนอีกที เช่น สร้าง sub นี้แล้ว Assign Macro ให้กับปุ่มเอาไว้

    Sub CancelTimeRecur()
    ' เอาอันนี้ไป assign กับปุ่มก็ได้
    Application.OnTime StartTime, "TestMacroRecur", , False
    End Sub

    และนี่ก็คือ Code ให้รันคำสั่งที่ต้องการขณะที่เปิดไฟล์ Excel ไว้อยู่

    แต่จะทำไงดี ถ้าไม่อยากเปิด Excel ทิ้งไว้ แต่อยากให้มันเปิดขึ้นมาเองเมื่อจะรัน??

    วิธีแก้ไขก็คือ ให้ Windows เป็นคนเปิด Excel ขึ้นมา แล้วรัน Macro ที่เราต้องการ ซึ่งวิธีทำก็คือใช้เครื่องมือที่ชื่อว่า Windows Task Scheduler นั่นเอง (ดังนั้นเงื่อนไขเดียวคือ Computer ต้องเปิดอยู่ ตอนถึงเวลารัน)

    วิธีการใช้ Task Scheduler

    ซึ่งถ้าเราใช้คำสั่งนี้แล้ว เราสามารถรัน VBA ได้ในเวลาที่ต้องการ และสั่งให้มันปิดโปรแกรมไป แล้วก็รันใหม่ในอีกเวลาก็ได้ โดยไม่ต้องยุ่งกับคำสั่ง Application.OnTime ที่เราเรียนกันข้างบนด้วยซ้ำ 555

    ผมไปเจอบทความภาษาอังกฤษที่เขียนไว้ครบถ้วนมาก คือ บทความนี้ ดังนั้นผมจะพยายามสรุปจากบทความเลยนะครับ

    Step1 : เอา code นี้ไปใส่ Notepad

    'Input Excel File's Full Path
    'เปลี่ยน path เป็นไฟล์ของตัวเองที่จะรัน
      ExcelFilePath = "D:\ThepExcel\web\VBA on time\VBAonTime.xlsm"
    
    'Input Module/Macro name within the Excel File
    'ใส่ชื่อ macro และ module ให้ถูกต้อง
      MacroPath = "Module1.TestMacro1"
    
    'Create an instance of Excel
      Set ExcelApp = CreateObject("Excel.Application")
    
    'Do you want this Excel instance to be visible?
      ExcelApp.Visible = True  'or "False"
    
    'Prevent any App Launch Alerts (ie Update External Links)
      ExcelApp.DisplayAlerts = False
    
    'Open Excel File
      Set wb = ExcelApp.Workbooks.Open(ExcelFilePath)
    
    'Execute Macro Code
      ExcelApp.Run MacroPath
    
    'Save Excel File (if applicable)
      wb.Save
    
    'Reset Display Alerts Before Closing
      ExcelApp.DisplayAlerts = True
    
    'Close Excel File
      wb.Close
    
    'End instance of Excel
      ExcelApp.Quit
    
    'Leaves an onscreen message!
      MsgBox "Your Automated Task successfully ran at " & TimeValue(Now), vbInformation

    save as ไฟล์ เลือกแบบ all files แล้วตั้งชื่อให้เป็น MacroTask.vbs

    วิธีทำให้ VBA Run คำสั่ง ณ เวลาที่ต้องการ 2

    Step 2 : ตั้งค่าในโปรแกรม Task Scheduler

    หาโปรแกรม Task Scheduler แล้วเปิดขึ้นมา

    • ไปที่ Action -> Create Task
    • ใน Tab General : ตั้งชื่อ Taskอะไรก็ได้
    • ใน Tab Triggers : กดปุ่ม New แล้วตั้งเวลาได้ สามารถเลือกรันแบบ one time หรือจะ repeat ก็ได้ เช่น สามารถสั่งรัน ทุกๆ วัน ทุกอาทิตย์ ทุกเดือนได้
    • ใน Tab Action : กด New แล้วใส่ว่า
      วิธีทำให้ VBA Run คำสั่ง ณ เวลาที่ต้องการ 3
      • ใน Program/Script ให้ browse หรือใส่คำว่า C:\Windows\System32\cscript.exe
      • ใน Argument (ต้องมีเครื่องหมายคำพูด)
        • ใส่ path ของ MacroTask.vbs เช่น
          “D:\ThepExcel\MacroTask.vbs”
    • ใน Tab Condition : กำหนดได้ว่าให้รันก็ต่อเมื่ออะไร? ถ้าไม่อยากให้มีเงื่อนไขเยอะก็ติ๊กออก
    • ใน Setting : ให้เป็นเงื่อนไขเพิ่มเติมอื่นๆ ไม่ต้อง Set ก็ได้

    พอ ok แล้วรอเวลา เจ้า Excel ก็จะถูกรันเองโดยอัตโนมัติเลย!!

    วิธีทำให้ VBA Run คำสั่ง ณ เวลาที่ต้องการ 4
    วิธีทำให้ VBA Run คำสั่ง ณ เวลาที่ต้องการ 5

    ตัวอย่างการเอาไปใช้งาน

    ผมอาจจะใช้สั่ง LoopTable ในไฟล์การแจ้งเตือน Line ที่ผมทำเอาไว้ก็ได้

    มันก็จะเปิด Excel ขึ้นมาเอง ส่ง Line เอง ปิด Excel เอง จบเลย 555

  • วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง

    ปฏิเสธไม่ได้ว่า Pivot Table เป็นเครื่องมือที่ใช้สรุปข้อมูลได้สุดยอดและง่ายมากๆ แต่ปัญหาหลักๆ ของการทำ Pivot ไม่ได้เกิดขึ้นขณะทำ Pivot แต่อยู่ที่ขั้นตอนเตรียมข้อมูลก่อนจะเอาไป Pivot ต่างหาก

    ซึ่ง Power Query ก็เข้ามาตอบโจทย์นี้ได้ และถ้าใครได้ลองใช้แล้วคงพบว่ามันเป็นเครื่องมือที่เตรียมข้อมูลได้สุดยอดมากๆ (ผมว่ามันเหมือนกับความรู้สึกที่เราได้รู้จักกับ Pivot Table ใหม่ๆนั่นแหละ)

    อย่างไรก็ตาม ทั้ง Pivot Table และ Power Query ต่างก็ยังมีข้อจำกัดสำคัญ คือ มันจะต้องมีการ Refresh ก่อน ถึงจะดูดข้อมูลที่อัปเดทล่าสุดมาจัดการต่อ แต่จะทำยังไงให้มันอัปเดทอัตโนมัติ มาดูกันครับ

    ความสัมพันธ์ของ Pivot Table กับ Power Query Refresh

    ถ้าเราผูก Pivot Table กับ Power Query เอาไว้ด้วยกันแล้ว โดยวิธีใดวิธีหนึ่ง คือ

    1. เอา Power Query Close & Load to… Pivot Table
      วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 6
    2. หรือ สร้าง Pivot Table จาก External Connection ที่เป็น Power Query โดยตรง (ไม่ใช่ Data ที่เป็น Table/Range ปกติ)
      วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 7

    เราจะสามารถกด Refresh ที่ Pivot Table ตัวเดียวก็พอ เพราะมันจะดูเองว่าปลายทางนั้นต้องการข้อมูลจากไหน แล้วมันจะ Refresh ต้นทางเอง

    ดังนั้นบทความนี้จะมาหาวิธีที่จะทำให้เราไม่ต้องมานั่งกด Refresh เองว่าจะทำยังไงได้บ้าง? เอาล่ะมาดูกันเลย

    ป.ล. จริงๆ เว็บฝรั่งอันนี้เขียนไว้ดีมาก แต่มีหลายประเด็นที่ยังติดปัญหากับ Power Query อยู่ ผมจึงขอเขียนเพิ่มเติมให้ครอบคลุมยิ่งขึ้นอีกครับ

    วิธีที่ 1 : ให้คนอื่นกดให้ (เช่น ลูกน้อง)

    วิธีนี้ง่ายสุดแล้วล่ะ 555 แต่ก็มีโอกาสผิดพลาดเหมือนกันนะ เช่น ลืม Refresh หรือกด Refresh ไม่ถูกวิธี (เช่น Refresh ผิดที่) ดังนั้นใครใช้วิธีนี้อยู่ ก็อย่าลืมลองศึกษาวิธีอื่นนะครับ

    วิธีที่ 2 : ตั้ง Auto Refresh ตอนเปิดไฟล์

    ทั้ง Pivot Table และ Power Query เอง สามารถตั้งค่าให้มีการ Auto Refresh ตอนเปิดไฟล์ Excel ขึ้นมาได้ ซึ่งทำง่ายมากนั่นคือ

    Pivot Table

    คลิ๊กขวาที่ Pivot Table -> Pivot Table Options -> Data -> ติ๊ก Refresh data when opening the file

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 8

    ตัว Power Query ก็สามารถกด คลิ๊กขวา Property ได้เช่นกัน

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 9

    วิธีที่ 3 : ตั้ง Auto Refresh ทุกๆ xx นาที

    วิธีนี้เราจะตั้งได้ที่ตัว Query ที่เอาไปผูกกับ Pivot Table เอาไว้ โดยให้ติ๊กดังนี้ และ set เวลาที่ต้องการ (ในที่นี้ผม set ทุกๆ 1 นาที)

    refresh every xx minutes

    พอครบ 1 นาที เจ้า Query นี้จะอัปเดทตัวเอง ซึ่งทำให้ Pivot Table อัปเดทไปด้วย เช่น เดิมเป็นแบบนี้

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 10

    ผมไปแก้ลูกค้าเบอร์ 1 ให้เป็นไต้หวัน แทนที่จะเป็นไทย

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 11

    พอรอครบ 1 นาทีปุ๊ป ใน Pivot Table ผลลัพธ์จะเปลี่ยนเองเลย

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 12

    วิธีที่ 4 เขียน VBA ให้ Auto Refresh

    ถ้าการสั่ง Auto Refresh ทุกๆ xx นาทีมันยังไม่ Work (เช่น ถี่มากไป refresh โดยไม่จำเป็น หรือ refresh ไม่ทันใจ) งั้นก็ให้ VBA มัน Auto Refresh ให้ละกัน!

    ซึ่งวิธีนี้ทำได้หลากหลายมาก จึงยาวที่สุดเลย (แต่แค่วิธีบนๆ ก็ช่วยได้แล้วล่ะ)

    Concept ของ VBA

    concept สำคัญคือ เราสามารถเช็คว่า ถ้ามี Event บางอย่างเกิดขึ้น เราจะสั่งให้ทำ Action บางอย่างได้ (และเจ้า action นี่แหละที่ปกติแล้ว record macro เอาได้) ดังนั้น

    • Event คือ มีการแก้ข้อมูลใน Table ต้นทางตัวใดตัวหนึ่ง
    • Action ในที่นี้เป็นไปได้ 2 แบบ คือ
      • Refresh Pivot Table (ตัวไหนก็ได้ ที่ดึงค่าจาก Query ผลลัพธ์)
      • Refresh เจ้า Query ที่ผูกกับ Pivot Table (แล้ว Pivot ก็จะอัปเดทเอง)

    เดี๋ยวเราจะมาทำส่วน Action ดูก่อน

    เนื่องจากผมไม่รู้ว่า Code VBA ต้องเขียนยังไง ดังนั้นเราลอง Record Macro ดู โดยไปที่ Developer –> Record Macro เพื่อให้มันสร้าง Code ให้เราเอง

    Refresh Pivot Table

    ลองกด Record Macro แล้วตั้งชื่อว่า RefreshAll ดู

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 13

    จากนั้นไปที่ Data -> Refresh All

    แล้วกดปุ่ม Stop Recording ที่ Developer -> Stop Recording เพื่อหยุดการบันทึก

    หมายเหตุ : ถ้าใครลอง Record Macro แล้วลองกด Refresh ที่ Pivot Table ตัวที่สร้างจาก Power Query จะพบว่า Macro มันไม่บันทึก action การ Refresh ที่ Pivot Table ให้เลย แต่ถ้าเราลอง Record Macro การ Refresh Pivot Table ที่ไม่ได้สร้างจาก Power Query มันจะบันทึก Macro ได้ตามปกติ

    ทดสอบ Event การเลือก Sheet ผลลัพธ์

    ไอเดียของส่วนนี้คือ เมื่อไหร่ก็ตามที่เราคลิ๊กที่ดู Sheet ผลลัพธ์ จะให้เกิดการ Refresh ทันที (การคลิ๊กที่ sheet ผลลัพธ์แสดงว่ากำลังอยากดูผลสรุป)

    ดังนั้นเดี๋ยวเราจะสร้าง event ที่เรียกว่า activate ขึ้นมา ซึ่งคำว่า activate คือ เหตุการณ์ที่เราคลิ๊กที่ชีทอื่นอยู่ แล้วเอา Mouse มาคลิ๊กที่ Sheet ที่เรากำหนดนั่นเอง

    วิธีทำ คือ ให้เรากด Alt+F11 เพื่อเข้าไปใน VBA Editor จากนั้นดับเบิ้ลคลิ๊กที่ Sheet PivotResult แล้วเปลี่ยน Dropdown เป็น Worksheet แล้วเลือกด้านขวาเป็น Activate (ซึ่งความหมายคือ event ที่มีการเลือก Sheet นี้ให้ activate ขึ้นมา)

    จากนั้นใส่ Code คำว่า Call RefreshAll (ชื่อ Macro ของเราที่บันทึกไว้มะกี๊) เข้าไป เพื่อให้มันสั่ง Run Macro ที่เราบันทึกไว้ จะได้ดังรูป

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 14

    ทีนี้เมื่อไหร่ก็ตามที่เราคลิ๊กที่ชีทอื่นอยู่ แล้วกลับมาคลิ๊กที่ Sheet PivotResult เมื่อไหร่ (เรียกว่า Activate) มันจะสั่ง RefreshAll ทันที!!

    เพิ่ม Event ที่จะทำให้เกิดการ Refresh

    จริงๆ Event ที่คลิ๊กที่ Sheet PivotResult แล้วอัปเดท มันก็ดูเข้าท่าดีนะ แต่ว่าถ้าเกิดคนใช้งานไม่มาคลิ๊กที่ Sheet มันก็ไม่อัปเดทน่ะสิ…

    ดังนั้นเราต้องมาคิดดีๆ ว่านอกเหนือจากการคลิ๊ก Activate Sheet สรุปแล้ว จะให้อัปเดทตอนไหนบ้าง? (อันนี้แล้วแต่เลยนะ อาจไม่ต้องใส่ทุกอัน ผมแสดงให้ดูหลายๆแบบละกัน)

    ไอเดีย 1 : อัปเดทเมื่อเราแก้ข้อมูลในตารางต้นทาง

    การอัปเดทเมื่อแก้ไขข้อมูลในตาราง แบบที่ง่ายที่สุดสามารถใช้ Event Sheet Change ได้ (แปลว่ามีการแปลี่ยนแปลงอะไรบางอย่างใน Sheet นั้นๆ ที่เราเลือก)

    เช่น ผมสั่ง RefreshAll เมื่อมีการ Change ใน Sheet ข้อมูลหลัก

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 15
    Private Sub Worksheet_Change(ByVal Target As Range)
    Call RefreshAll
    End Sub

    แล้วผมก็ทำแบบนี้ให้ครบทุก sheet ที่เป็นแหล่งข้อมูลของเรา สมมติมีแหล่งข้อมูล 3 sheet ก็ทำแบบนี้ 3 รอบ แค่นี้มันก็จะอัปเดททันทีเมื่อมีการแก้ข้อมูลต้นทางแล้วล่ะ

    ไอเดีย 2 : อัปเดทหลังจากคลิ๊กหนีไปที่ชีทอื่น

    แทนที่จะอัปเดททุกครั้งที่มีการแก้ข้อมูล (เช่น แก้ cell นึงก็อัปเดท แก้อีก cell ก็อัปเดท) ซึ่งทำให้อัปเดทเยอะเกินความจำเป็น เราอาจะใช้วิธีการที่ว่าเมื่อเราคลิ๊กไปที่ชีทอื่นเมื่อไหร่ ให้อัปเดททันที ซึ่งสามารถใช้ Event ระดับ Sheet ที่ชื่อ Deactivate ได้

    โดยไปเลือกที่ Sheet ที่เป็นแหล่งข้อมูลแล้วใส่ code นี้

    Private Sub Worksheet_Deactivate()
     Call RefreshAll
    End Sub

    อย่าลืมทำให้ครบทุก sheet ที่เป็นแหล่งข้อมูลนะ

    ไอเดีย 3 : อัปเดทก่อน Save ไฟล์

    เพื่อกันลืม refresh แล้วเผลอ save ไฟล์ไป ดังนั้นเดี๋ยวเราจะใช้ Event ระดับ Workbook ที่ชื่อว่า BeforeSave มาจัดการ ดังนี้

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Call RefreshAll
    End Sub

    แต่ปรากฎว่าเวลาใช้จริงมัน Error ทั้งนี้เพราะว่าใน Query ของเรามันมีการตั้งค่า Enable Background Refresh เอาไว้ ทำให้ Excel Refresh ไปทำงานไป (ไม่รอ Refresh ให้จบก่อน)

    ดังนั้นวิธีการแก้ไขคือให้ไปเอา Enable Background Refresh ออกไปซะ

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 16

    จากนั้นลอง Save ไฟล์ดูจะเห็นว่าไม่ Error แล้วล่ะ

    แก้เรื่องการ Refresh

    การ Refresh All แม้ว่ามันจะง่ายและสะดวกมากๆ แต่ว่าบางทีมันอาจทำการ Refresh เยอะเกินความจำเป็นไปและทำให้ทำงานช้า ดังนั้นเดี๋ยวเราจะลองมาหาทาง Refresh เฉพาะสิ่งที่เราต้องการดูบ้าง

    Refresh Pivot Table ทุกตัว

    จริงๆ อันนี้ต้องเรียกว่า Refresh PivotCache ทุกตัวจะดีกว่า ซึ่งสามารถทำได้ดังนี้

    Sub RefreshAllPivot()
      For Each pivCache In ThisWorkbook.PivotCaches
        pivCache.Refresh
      Next pivCache  
    End Sub

    ระวัง! อย่างไรก็ตาม ถ้าหากมี PivotTable ตัวใดตัวหนึ่งที่สร้างมาจาก Power Query มันจะหา PivotCache ไม่เจอทำให้ Error ซึ่งเดี๋ยวเราจะหาทางจัดการต่อไป

    Refresh เฉพาะบาง Pivot Table

    ดังนั้นในส่วนนี้เราจะลองหาทาง Refresh เฉพาะ Pivot Table ที่เราต้องการ

    จริงๆ แล้วต้องบอกว่ามันทำได้แค่ Refresh แค่บาง Pivot Cache มากกว่า เพราะถ้ามี การนำ Pivot Cache ตัวเดียว แล้วนำไปสร้าง PivotTable หลายๆ ตัว…

    เวลากดคลิ๊กขวา Refresh Pivot Table ตัวเดียวแล้ว จะทำให้ Pivot Table ทุกตัวที่ผูกกับ Pivot Cache นั้นมันจะถูก Refresh ทั้งหมดเลย

    ดังนั้นเราจึงไม่สามารถ Refresh PivotTable ตัวเดียวได้ แต่เราสามารถ Refresh PivotCache ตัวเดียวได้ โดยใช้ Code นี้ (ดัดแปลงมาจากการ Record Macro ได้)

    Worksheets("ชื่อชีทที่มีpivottable").PivotTables("ชื่อpivottable").PivotCache.Refresh

    ระวัง! อย่างไรก็ตาม ถ้า PivotTable นั้นเป็นตัวที่ source มาจาก Power Query มันจะหา PivotCache ไม่เจอทำให้ Error ซึ่งเดี๋ยวเราจะหาทางจัดการต่อไป

    Refresh เฉพาะบาง Query

    ด้วยสาเหตุที่การ Refresh ที่ PivotCache จะทำไม่ได้หาก PivotTable นั้นมี source data จาก Power Query

    ดังนั้นวิธีการ Refresh เฉพาะ Pivot Cache ตัวนั้นก็คือการ Refresh ตัว Query นั่นเอง ดังนั้นเราจะมาดูวิธี Refresh Query กันครับ

    Refresh ที่ Query ผลลัพธ์

    เนื่องจากเราไม่รู้ code ดังนั้นเดี๋ยวลองกด Record Macro โดยตั้งชื่อว่า RefreshQuery แล้วกด ok

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 17

    จากนั้นคลิ๊กขวาที่ Query ผลลัพธ์ แล้วกด Refresh

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 18

    จากนั้นกด Developer –> Stop Recording เพื่อหยุดการบันทึก Code

    แก้ไข Action ให้ยืดหยุ่นขึ้น

    แล้วกด Alt+F11 เพื่อไปดู Code ของ Action ที่เกิดขึ้นใน Module 1 จะพบว่ามี Code นี้เกิดขึ้นมาต่อจาก RefreshAll (ถ้าทำไว้)

    วิธีทำให้ Pivot Table และ Power Query อัปเดทโดยไม่ต้องกด Refresh เอง 19

    ซึ่งถ้าดูรูปแบบแล้วจะพบว่า คำสั่งคือ

    ActiveWorkbook.Connections(“Query – ชื่อQuery“).Refresh

    ดังนั้นเพื่อให้เรียก Refesh ง่ายขึ้นเราจะแก้ให้มันรับ input เฉพาะชื่อ Query เข้าไปใน Sub เพื่อให้เราสามารถสั่ง Query อื่นได้ง่ายขึ้น ดังนี้

    Sub RefreshQuery(QueryName As String)
        ActiveWorkbook.Connections("Query - " & QueryName).Refresh
    End Sub

    ดังนั้นเวลาเรียกใช้ก็จะเป็นแบบนี้

    Call RefreshQuery("CombinedTable")

    ทีนี้เวลา Refresh ใน Event เราก็ต้องเป็น Call RefreshQuery(“ชื่อQuery”) แทน ซึ่งจะทำให้สามารถเปลี่ยน Query ที่จะสั่ง Refresh ได้ง่ายขึ้นแค่ใส่ชื่อใหม่ที่ต้องการ

    ทำให้ Refresh เฉพาะบาง Query ตามลำดับที่ต้องการ

    Sub RefreshQueryBatch()
    'จะ Refresh Query ไหนบ้างก็ใส่ไป
    Call RefreshQuery("CombinedTable")
    Call RefreshQuery("xxxลำดับถัด2")
    Call RefreshQuery("xxxลำดับถัด3")
    End Sub

    ดังนั้นเราสามารถเรียก Code Batch ได้ทีเดียวง่ายๆ ใน Event ต่างๆ ดังนี้

    Call RefreshQueryBatch

    แค่นี้เราก็จะสามารถ Refresh Query ได้ตามต้องการแล้วล่ะครับ ^^

    และแล้วก็จบแล้วล่ะ สำหรับบทความสอนวิธี Refresh Pivot Table และ Power Query ใครอ่านจบแล้วทำแล้วติดขัดอะไรตรงไหน ก็สอบถามได้เลยครับ

  • วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค4

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค4

    และแล้วเราก็เดินทางมาถึงภาค 4 ของการส่งข้อความแจ้งเตือนแล้ว ซึ่งผมคิดว่าตอนนี้จะให้เป็นตอนจบแล้วล่ะ เพราะมันยาวเกินไปแล้ว 555 ใครยังไม่ได้อ่าน 3 ตอนก่อนหน้าเชิญได้ที่

    ในตอนนี้เราจะไล่เก็บตกเรื่องเจ๋งๆ ที่ยังไม่ได้ทำใน 3 ตอนที่แล้ว ดังนี้

    เก็บตก 1 : วิธีส่งข้อความแจ้งเตือน Line Notification เข้า Group Chat

    ก่อนหน้านี้ที่ผมสอนไปเป็นการส่ง Line ไปหา Line Notify ซึ่งเราจะเห็นอยู่คนเดียว ซึ่งไอแบบนี้มันเอาไปใช้งานจริงได้ลำบาก เพราะจะเป็นการเตือนตัวเองได้อย่างเดียว (จริงมะ)

    ถ้าจะให้เกิดประโยชน์จริงๆ มันต้องแจ้งเตือนไปให้คนอื่นเห็นได้ด้วยสิ!

    แต่เราไม่สามารถส่ง Line ไปหาคนอื่นได้แบบเดี่ยวๆ ตรงๆ แต่ว่าสิ่งที่ทำได้คือส่งเข้า Group Chat ที่มีคนอื่นอยู่ด้วย แบบนี้ถึงจะทำได้ครับ

    Generate Token ใหม่สำหรับ Group Chat

    ก่อนอื่นให้ไป Generate Token ใน https://notify-bot.line.me/ และไป My Page เหมือนเดิม แต่คราวนี้เราจะเลือกอันที่เป็น Group Chat แทน

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค4 20

    จากนั้นก็เอา Token ที่ได้ไปใช้แทน Token เดิมได้

    Invite Line Notify เข้ากลุ่มด้วย

    การที่เราจะส่งข้อความเข้า Group ได้นั้น ไม่ใช่แค่เพียง Generate Token เท่านั้น แต่ว่าต้องเชิญเจ้า Line Notify นี่เข้ากลุ่มด้วย

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค4 21

    พอเจ้า Line Notify เข้ากลุ่ม เราก็สามารถส่งแจ้งเตือนได้ตามปกติเลย

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค4 22

    เก็บตก 2 : วิธีส่งรูปเข้า Line

    การส่งรูปเข้า Line นั้น จากคู่มือ API มันบอกว่าเราสามารถทำได้ครับ โดยให้ใส่ค่า parameter ตามที่มันกำหนด ซึ่งตัวที่เกี่ยวข้องกับการส่งรูป ก็มี 3 ตัวที่ผมตีกรอบดังนี้

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค4 23

    ซึ่งการส่งรูปจริงๆ จะมีอยู่ 2 ลักษณะ ก็คือ ส่งรูปที่อยู่ในเว็บ กับ การอัปโหลดรูปเอง

    ส่งรูปที่อยู่ในเว็บอยู่แล้ว

    การส่งรูปจากในเว็บ จะต้องใช้ imageThumbnail และ imageFullsize ดังนั้นผมจะแก้ Code ของ LineNotify ให้เป็นดังนี้

    Sub LineNotify(msg As String, Optional stickID As Integer, Optional stickPack As Integer, Optional imgFullPath As String = "none", Optional imgThumbPath As String = "none")
    
    Dim LineToken As String
    Dim lineMessage As String
    Dim objectXML As Object
    Dim URL As String
    
    '========================================
    
    'Line Notify Token ที่ Generate มา
    
    'group noti final
    LineToken = "ใส่ Token ของคุณ"
    '========================================
    
    'Line Message
    yourMessage = msg
    
    lineMessage = "message=" & yourMessage
    
    '========================================
    'เพิ่มเงื่อนไข Sticker
    If stickPack = 0 Or stickID = 0 Then
    Else
    lineMessage = lineMessage & "&stickerPackageId=" & stickPack & "&stickerId=" & stickID
    End If
    
    'เพิ่มเงื่อนไข image
    If imgThumbPath = "none" Then
    imgThumbPath = imgFullPath
    End If
    
    If imgFullPath <> "none" Then
    lineMessage = lineMessage & "&imageThumbnail=" & imgThumbPath & "&imageFullsize=" & imgFullPath
    End If
    
    
    '========================================
    
    Set objectXML = CreateObject("Microsoft.XMLHTTP")
    URL = "https://notify-api.line.me/api/notify"
    With objectXML
        .Open "POST", URL, 0
        .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .SetRequestHeader "Authorization", "Bearer " & LineToken
        .send (lineMessage)
        Debug.Print objectXML.responseText
    End With
    
    Set objectXML = Nothing
    
    End Sub

    นั่นคือสามารถส่งค่า URL ที่เก็บรูปเข้าไปในคำสั่ง Line Notify ได้ ด้วยรูปแบบคำสั่งที่ผมออกแบบไว้ดังนี้

    Call LineNotify(msg , stickID , stickPack , imgFullPath, imgThumbPath)
    • โดยที่ถ้าใส่ stickID=0 หรือ stickPack=0 ก็จะไม่ส่ง Stickerเลย
    • ถ้าไม่ใส่ imgFullPath ก็จะไม่ส่งรูปเลย
    • ถ้าไม่ใส่ imgThumbPath ก็จะใช้รูป Thumbnail เดียวกับ imgFullPath

    ดังนั้นถ้าเราลอง Test การส่งด้วยคำว่า

    Sub testImg()
    Call LineNotify("ทดสอบส่งรูป", 0, 0, "https://www.thepexcel.com/wp-content/uploads/2019/11/excel-power-up-page.jpg")
    End Sub

    จากนั้นกด F5 จะได้ผลลัพธ์แบบนี้

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค4 24

    แต่ถ้าเราใส่ทั้ง FullPath และ ThumbPath แยกกันเลย เช่น

    Sub testImg2()
    Call LineNotify("ทดสอบส่งรูป", 0, 0, "https://www.thepexcel.com/wp-content/uploads/2019/11/excel-power-up-page.jpg", "https://www.thepexcel.com/wp-content/uploads/2019/11/excel-power-up-book.jpg")
    End Sub
    

    มันก็จะส่งรูปแบบเล็กและใหญ่แยกกันเป็นคนละรูป โดยใน Chat จะแสดงเป็นรูปเล็ก (Thumbnail) ก่อน แต่พอคลิ๊กที่รูปเล็กแล้วจะแสดงเป็นรูปใหญ่ (Full Size )ที่เป็นคนละรูปกันได้

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค4 25

    ส่งรูปด้วยการ Upload

    สำหรับการ Upload นั้นเราต้องใช้คำสั่ง ImageFile ซึ่งจะต้องอ้างถึงตัวไฟล์เลย ซึ่งถ้าเป็นภาษาอื่นนี่ดู Code มันง่ายมากๆ แต่พอเป็น VBA นี่โหดจัดๆ

    และเท่าที่เช็คดูใน Internet เหมือนกับว่าการส่งข้อมูลที่เป็นไฟล์ด้วย VBA นั้นจะต้องใช้ multipart/form-data แทน application/x-www-form-urlencoded ซึ่งจะซับซ้อนขึ้นเยอะและมีรูปแบบแปลกๆ เช่น

    Content-Type: multipart/form-data; boundary=12345
    
    --12345
    Content-Disposition: form-data; name="sometext"
    
    some text that you wrote in your html form ...
    --12345
    Content-Disposition: form-data; name="name_of_post_request" filename="filename.xyz"
    
    content of filename.xyz that you upload in your form with input[type=file]
    --12345
    Content-Disposition: form-data; name="image" filename="picture_of_sunset.jpg"
    
    content of picture_of_sunset.jpg ...
    --12345--

    ดังนั้นผมจะสร้าง Sub ใหม่ขึ้นมา เพื่อส่งรูปโดยเฉพาะ (แต่ถ้าเกิดส่งอย่างอื่นก็เรียกฟังก์ชันเดิมได้)

    เท่าที่เช็คดูมีเว็บนี้ที่พอมีแนวทางในการใช้ VB ส่ง Binary File ได้ และก็ไปเจอ Post อันนี้ (ที่มีถามคำถามโดยคุณ kampanart ) ที่น่าจะดัดแปลง code มาจากเว็บฝรั่งอีกที ซึ่งใช้งานได้เลย งั้นผมลอกเลยนะ

    ให้เราสร้าง sub ใหม่และ function ใหม่ เพิ่มจากของเดิม โดยใส่ Code ดังนี้

    Sub LineNotifyUploadPic(msg As String, Optional UploadFilePath As String = "none")
    
    Dim sFilepath As String
    Dim nFile As Integer
    Dim baBuffer() As Byte
    Dim ssPostData1 As String
    Dim ssPostData2 As String
    Dim ssPostData3 As String
    Dim Messagelength As Integer
    Dim objectXML As Object
    
    Dim arr1() As Byte
    Dim arr2() As Byte
    Dim arr3() As Byte
    Dim arr4() As Byte
    
    Const STR_BOUNDARY As String = "xxx---thepexcel---thepexcel---thepexcel---xxx"
    'แก้ Token ตรงนี้
    LineToken = "ใส่ Token ของตัวเอง"
    
    sFilepath = UploadFilePath
    sFileName = GetFilenameFromPath(sFilepath)
    
    ssPostData1 = vbCrLf & _
    "--" & STR_BOUNDARY & vbCrLf & _
    "Content-Disposition: form-data; name=" & """message""" & vbCrLf & vbCrLf
    
    arr1 = StrConv(ssPostData1, vbFromUnicode)
    arr2 = (msg)
    
    ssPostData2 = vbCrLf & _
    "--" & STR_BOUNDARY & vbCrLf & _
    "Content-Disposition: form-data; name=" & """imageFile""" & "; filename=" & sFileName & vbCrLf & _
    "Content-Type: image/jpng" & vbCrLf & vbCrLf
    
    arr3 = StrConv(ssPostData2, vbFromUnicode)
    
    nFile = FreeFile
    Open sFilepath For Binary Access Read As nFile
    If LOF(nFile) > 0 Then
    ReDim baBuffer(0 To LOF(nFile) - 1) As Byte
    Get nFile, , baBuffer
    imagear = baBuffer
    End If
    Close nFile
    
    arr4 = StrConv(vbCrLf & "--" & STR_BOUNDARY & "--" & vbCrLf, vbFromUnicode)
    
    Dim arraytotal As Long
    Dim sendarray() As Byte
    arraytotal = UBound(arr1) + UBound(arr2) + UBound(arr3) + UBound(imagear) + UBound(arr4) + 4
    ReDim sendarray(arraytotal)
    
    For i = 0 To UBound(arr1)
    sendarray(i) = arr1(i)
    Next
    
    For i = 0 To UBound(arr2)
    sendarray(UBound(arr1) + i + 1) = arr2(i)
    Next
    
    For i = 0 To UBound(arr3)
    sendarray(UBound(arr1) + UBound(arr2) + i + 2) = arr3(i)
    Next
    
    For i = 0 To UBound(imagear)
    sendarray(UBound(arr1) + UBound(arr2) + UBound(arr3) + i + 3) = imagear(i)
    Next
    
    For i = 0 To UBound(arr4)
    sendarray(UBound(arr1) + UBound(arr2) + UBound(arr3) + UBound(imagear) + i + 4) = arr4(i)
    Next
    
    Set objectXML = CreateObject("Microsoft.XMLHTTP")
    URL = "https://notify-api.line.me/api/notify"
    With objectXML
        .Open "POST", URL, 0
        .SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & STR_BOUNDARY
        .SetRequestHeader "Authorization", "Bearer " & LineToken
        .send sndar(sendarray)
        Debug.Print .responseText
        End With
    
    Set objectXML = Nothing
    End Sub
    Public Function sndar(sendarray As Variant) As Byte()
    sndar = sendarray
    End Function
    Public Function GetFilenameFromPath(ByVal strPath As String) As String
    If Right$(strPath, 1) <> "\" And Len(strPath) > 0 Then
    
    GetFilenameFromPath = GetFilenameFromPath(Left$(strPath, Len(strPath) - 1)) + Right$(strPath, 1)
    End If
    End Function

    ซึ่งเวลาเรียกใช้งาน เราจะทำแบบนี้

    Call LineNotifyUploadPic("ข้อความ", filepathของรูปในเครื่อง)

    เช่น

    Sub TestUploadPic()
    
    Dim filepath As String
    'แก้เป็น path ของรูปในเครื่องตัวเอง
    filepath = "d:\thepexcel\sira-excel-powerup.jpg"
    
    Call LineNotifyUploadPic(".", filepath)
    
    End Sub

    ซึ่งพอกด F5 เพื่อรัน ก็จะได้ผลลัพธ์ตามนี้เลย (รูปที่ส่ง คือรูปที่เราใส่เอาไว้ตามที่อยู่ใน filepath )

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค4 26

    สรุป

    Call LineNotify("ส่งข้อความเฉยๆ")
    Call LineNotify("ส่งข้อความ และ sticker", 5, 1)
    Call LineNotify("ทดสอบส่งข้อความ รูป1แบบ", 0, 0, "https://www.thepexcel.com/wp-content/uploads/2019/11/excel-power-up-page.jpg")
    Call LineNotify("ทดสอบส่งข้อความ รูป2แบบ", 0, 0, "https://www.thepexcel.com/wp-content/uploads/2019/11/excel-power-up-page.jpg", "https://www.thepexcel.com/wp-content/uploads/2019/11/excel-power-up-book.jpg")
    Call LineNotifyUploadPic("ส่งรูปแบบ upload", filepath)

    เก็บตก 3 : การส่งข้อความซึ่งมีสัญลักษณ์พิเศษ

    ก่อนหน้านี้เราส่งข้อความได้แล้ว เราส่งรูปได้แล้ว

    แต่ถ้าสังเกตดูจะพบเมื่อเมื่อเราพิมพ์ข้อความที่มีสัญลักษณ์บางอย่าง มันจะไม่ไป เช่น สัญลักษณ์ & หรือ เครื่องหมาย +

    วิธีแก้คือ ต้องทำการแทนที่ข้อความของเราด้วย อักขระแบบ % เช่น & ต้องแทนด้วย %26 (ดู code ทั้งหมดได้ที่นี่)

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค4 27

    ดังนั้นเราจะสั่งแทนที่ Character บางอย่างด้วยสัญลักษณ์ % ได้ด้วยคำสั่ง replace ใน vba ครับ เช่น

    'Line Message
    yourMessage = msg
    yourMessage = Replace(yourMessage, "&", "%26")
    yourMessage = Replace(yourMessage, "+", "%2B")

    แต่ทีนี้เนื่องจากมันมีหลาย Character พอสมควร เราจะ Copy Paste ทุกตัวใส้ไว้ใน Excel แล้วสั่งให้ Flash Fill เติมให้เราซะ เช่น

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค4 28

    จากนั้นก็ copy code ด้านขวามาใส่ใน VBA เลย จบ จะได้แบบนี้

    'Line Message
    yourMessage = msg
    yourMessage = Replace(yourMessage, "%", "%25")
    yourMessage = Replace(yourMessage, "&", "%26")
    yourMessage = Replace(yourMessage, "'", "%27")
    yourMessage = Replace(yourMessage, "(", "%28")
    yourMessage = Replace(yourMessage, ")", "%29")
    yourMessage = Replace(yourMessage, "*", "%2A")
    yourMessage = Replace(yourMessage, "+", "%2B")
    yourMessage = Replace(yourMessage, ",", "%2C")
    yourMessage = Replace(yourMessage, "/", "%2F")
    yourMessage = Replace(yourMessage, ":", "%3A")
    yourMessage = Replace(yourMessage, ";", "%3B")
    yourMessage = Replace(yourMessage, "=", "%3D")
    yourMessage = Replace(yourMessage, "?", "%3F")
    yourMessage = Replace(yourMessage, "@", "%40")
    yourMessage = Replace(yourMessage, "[", "%5B")
    yourMessage = Replace(yourMessage, "]", "%5D")

    ทีนี้เราก็จะส่งข้อความที่มี character พิเศษได้แล้วล่ะ

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค4 29

    จบ

    และแล้วเราก็จบ Series มหากาพส่งข้อมูลเข้า Line/Email แล้ว ใครเอาไปใช้แล้วเกิดประโยชน์ยังไงอย่าลืมมาเล่าให้ฟังบ้างนะครับ ^^

  • วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน?

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน?

    สำหรับเรื่องการเปรียบเทียบข้อมูล 2 ตารางนี้ เป็นอีกเรื่องที่มีคนถามมาเยอะ แต่ในความเป็นจริงหลักการไม่มีอะไรไปกว่าการใช้สูตรกลุ่มพวก lookup ในการตรวจสอบแค่นั้นเอง

    และเพื่อให้มันเจ๋งยิ่งขึ้น ผมจะแสดงวิธีที่ 2 วิธีเลยละกัน นั่นคือ 1. ใช้สูตร 2. ใช้ Power Query

    ก่อนอื่น สมมติว่าผมมีข้อมูลดังนี้

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 30

    วิธีการใช้สูตรในการเปรียบเทียบข้อมูล

    Q1: คนไหนมีชื่ออยู่ทั้ง 2 ตาราง?

    หากเราอยากรู้ว่าคนไหนบ้างที่มีชื่ออยู่ใน 2 ตาราง เราจะทำยังไง?

    แนวคิดในการเปรียบเทียบข้อมูลก็คือ เราจะหาชื่อในตาราง Math ทีละตัว โดยเอาแต่ละตัววิ่งหาในตาราง Excel ว่าเจอรึเปล่า? ถ้ามันเจอ ก็แปลงว่าตัวนั้นอยู่ทั้ง 2 ตาราง จริงมะ?

    ดังนั้นเราจะเขียนสูตรใน D4 เพื่อเอาคะแนนในอีกตารางได้ว่า

    =VLOOKUP(B4,G:H,2,FALSE)

    ปล. สูตรข้างบนเป็นฉบับคนขี้เกียจ ซึ่งเลือกทั้งคอลัมน์เลย เพื่อนๆ อาจเลือกเฉพาะที่มีข้อมูลก็ได้นะครับ แต่ต้องกดปุ่ม F4 เพื่อ lock table_array ให้อยู่กับที่ด้วยนะ

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 31

    หาเราอยากให้นับเป็น 0 กับ 1 ว่าเจอหรือไม่? ก็ใช้พวก ISERROR มาดักก็ได้ ถ้าไม่เจอมันจะ Error ก็คือ 0 ถ้าไม่ Error ก็คือ 1 ดังนั้นผมใส่สูตรใน E4 ว่า

    =--NOT(ISERROR(D4))

    โดยที่ — คือการแปลงค่า TRUE/FALSE ให้เป็น 1 กับ 0 นั่นเอง (จะใช้วิธี *1 ก็ได้)

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 32

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

    =--NOT(ISERROR(MATCH(G4,B:B,0)))

    คราวนี้ผมลองใช้ฟังก์ชัน MATCH บ้าง และรวบสูตรทีเดียวเลย เพราะ MATCH จะทำได้แค่หาเจอรึเปล่า? เอาคะแนนกลับมาไม่ได้ ยกเว้นจะใช้ INDEX ช่วย

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 33

    สรุปแล้วตัวที่เจอในทั้ง 2 ตาราง ก็คือ B,E,I นั่นเอง (จะทำฝั่งไหนก็คำตอบเหมือนกัน)

    ถ้าอยากได้แต่รายการที่เจอทั้งคู่ ก็ใช้วิธี Filter เอาเลข 1 ออกมาจะง่ายที่สุด

    ถ้าจะเขียนสูตรก็จะยากกว่ามาก เช่น ใน B17 เขียนว่า

    =SMALL(IF(E:E=1,ROW(E:E)),A17) แล้วกด Ctrl+Shift+Enter

    เพื่อใช้ว่าแถวที่เจอ Excel =1 อยู่แถวไหนบ้าง เป็นลำดับ 1,2,3…

    จากนั้นค่อยใช้ INDEX ถึงค่าที่ต้องการกลับมา เช่น C17 เขียนว่า

    =INDEX(B:B,B17)
    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 34

    ซึ่งบางคนยังไม่มีพื้นฐานการเขียนสูตรที่ดีพอ หากให้อธิบายโดยละเอียดคงต้องไว้บทความอื่นๆ

    ดังนั้นในบทความนี้ผมจะยังไม่ใช้วิธีเขียนสูตรในการแสดงเฉพาะผลลัพธ์ที่อยากได้นะครับ เพราะมันยากเกินไป ต้องอธิบายหลายเรื่องเลย เช่น Array Formula กว่าจะเข้าใจได้ (แต่เดี๋ยวเราจะแสดงวิธี Power Query ซึ่งเข้าใจง่ายกับคนทั่วไปมากกว่า)

    Q2: คนไหนบ้างมีชื่อในตาราง Math แต่ไม่อยู่ใน Excel

    อันนี้ก็ง่ายมากเพราะว่าเราก็แค่ไปที่ตาราง Math แล้ว Filter เลือกตัวที่เจอExcel เป็น 0 แค่นั้นเอง

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 35

    Q3: คนไหนบ้างมีชื่อในตาราง Excel แต่ไม่อยู่ใน Math

    อันนี้ก็ง่ายมากเพราะว่าเราก็แค่ไปที่ตาราง Excel แล้ว Filter เลือกตัวที่เจอMath เป็น 0 แค่นั้นเอง

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 36

    Q4: คนไหนบ้างที่มีชื่อในตารางใดตารางหนึ่ง แต่ไม่ได้อยู่ทั้งสองตาราง

    อันนี้เราก็สามารถ Copy ข้อมูลที่ Filter แล้วใน Q3 กับ Q4 มาต่อกันเท่านั้นเอง (ไม่ต้อง REmove Duplicates ด้วย เพราะชื่อก็จะไม่ซ้ำกันอยู่แล้ว จริงมะ?)

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 37

    ปัญหาของการที่ต้อง Manual Copy

    จะเห็นว่าวิธีการใช้สูตร Lookup หาผลลัพธ์ หากอยากจะคัดกรองให้เหลือแค่สิ่งที่ต้องการ ก็ต้องมานั่ง Filter ข้อมูลแล้ว Copy Paste ออกมาซะก่อน ซึ่งวิธีนี้อาจจะเหมาะกับการทำงาน Adhoc ครั้งเดียวจบ

    แต่ถ้าเป็นงานที่ต้องทำแบบนี้ประจำๆ แบบงาน Routine การที่ต้องมานั่ง Filter Copy Paste ใหม่ทุกครั้ง ก็จะเสียเวลาและมีโอกาสผิดพลาดเกิดขึ้นมาได้

    ดังนั้นเดี๋ยวผมจะแสดงวิธีการใช้ Power Query จัดการเรื่องนี้ ซึ่งเราจะไม่ต้องมานั่ง Copy Paste ข้อมูลอีกต่อไป และก็ไม่เข้าใจยากเท่ากับการเขียนสูตรด้วย (แต่จะมีขั้นตอนในการกดปุ่มเยอะ ถ้ายังไม่คุ้นอาจจะรู้สึกว่ามันเยอะ แต่ตอนทำจริงมันเร็วนะ)

    วิธีการใช้ Power Query ในการเปรียบเทียบข้อมูล

    ก่อนอื่น ผมขอแปลงข้อมูลของเราเป็น Table ก่อน เพื่อความสะดวกในหลายๆ อย่าง (ถ้าจะไม่แปลงก็ต้องตั้งชื่อให้กับ Range ก่อนเอาเข้า Power Query คล้ายๆ แบบนี้)

    โดยผมตั้งชื่อเป็น tblMath กับ tblExcel (ตั้งชื่อที่ละตารางนะ)

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 38

    จากนั้นก็เอาแต่ละตารางเข้า PowerQuery

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 39

    จากนั้นกด Close & Load to…

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 40

    เลือกแบบ Connection Only เพื่อให้อ้างอิงข้อมูลตารางนั้นๆได้ โดยที่ยังไม่เอาผลลัพธ์ออกมาจริงๆ

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 41

    ทำให้ครบทั้งสองตาราง จะมี List ของ Query ที่ทำไว้อยู่ด้านขวา

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 42

    คราวนี้เราจะเริ่มทำผลลัพธ์แล้วล่ะ

    Q1: คนไหนมีชื่ออยู่ทั้ง 2 ตาราง?

    คลิ๊กขวาที่ Query tblMath แล้วเลือก Merge

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 43

    จากนั้นเลือกว่าจะ Merge กับ tblExcel โดยให้เลือกคอลัมน์ที่เป็นตัวเชื่อมด้วย นั่นก็คือ ชื่อ

    โดยให้เลือกวิธี Join Kind (วิธีการ Join) ซึ่งถ้าเป็น Version ใหม่ๆ ที่อัปเดทแล้วจะมีวิธีการ Join เยอะแยะเลย และตัวที่เราจะใช้คือ Inner Join ซึ่งแปลว่าต้องเจอในทั้ง 2 ตาราง (ถ้าใครเป็น version เก่า ไม่มี Dropdown ให้เลือก น่าจะมีให้ติ๊ก only matching row ก็ติ๊กไปครับ)

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 44

    ผลลัพธ์จะออกมาเป็นคำว่า Table ก่อน ซึ่งเราสามารถกด Expand เอาค่าข้างในออกมาก็ได้ แต่ไม่จำเป็น เพราะจริงๆ เราได้รายการที่เจอทั้ง 2 ตารางแล้ว

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 45

    เราสามารถลบคอลัมน์อื่น ให้เหลือแค่ชื่ออย่างเดียวก็จบเลย

    แต่ถ้าอยากได้คะแนน Excel ออกมาด้วย ก็กดปุ่ม Expand มุมขวาบน แล้วเลือกว่าจะเอาคอลัมน์อะไรจากอีกตารางบ้าง?

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 46

    พอ ok ก็จะได้ผลลัพธ์เลย

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 47

    จากนั้นเราตั้งชื่อ Query ด้านขวานิดนึงเพื่อความเรียบร้อย

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 48

    แล้วกด Close & Load to… ออกมาเป็น Table ในตำแหน่งที่ต้องการได้

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 49

    พอกด ok ก็จะได้ผลัพธ์เลย

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 50

    อันนี้จริงๆ ดูเหมือนมีหลาย Step แต่พอกดในการทำงานจริงมันจะเร็วมากนะครับ ต้องลองๆ

    Q2: คนไหนบ้างมีชื่อในตาราง Math แต่ไม่อยู่ใน Excel

    อันนี้เราทำเหมือน Q1 เลย แต่ว่าเปลี่ยนการ JoinKind ตอน Merge เป็น Left Anti Join ซึ่งแปลว่ามีในตารางแรก แต่ไม่มีในตารางที่สอง

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 51

    ถ้าใครไม่มี Left Anti ให้เลือก สามารถแก้สูตรจาก Query ใน Q1 จาก JoinKind.Inner ให้เป็น JoinKind.LeftAnti ได้เลย จะได้ผลเหมือนกัน (ตัวพิมพ์เล็กพิมพ์ใหญ่ให้เป๊ะนะ)

    ปล. ใน Power Query Editor ของใครไม่มีช่อง Formula bar ขึ้นมาให้ไปติ๊กใน View -> Formula Bar

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 52

    ซึ่งข้อนี้ผมตั้งชื่อ Query ว่า Q2-OnlyinMath

    Q3: คนไหนบ้างมีชื่อในตาราง Excel แต่ไม่อยู่ใน Math

    อันนี้ทำได้ 2 แบบ คือ เราทำเหมือน Q2 เลย แต่ให้คลิ๊กขวา Merge ที่ตาราง tblExcel เพื่อให้ tblExcel เป็นตารางหลักแทน

    หรือจะทำแบบ Q2 แล้วให้ tblMath เป็นตารางหลักเหมือนเดิม แล้วเปลี่ยน JoinKind เป็น Right Anti ซึ่งแปลว่ามีในตารางที่สองแต่ไม่มีในตารางแรก

    ซึ่งเดี๋ยวผมจะแสดงวิธีหลังให้ดู จะได้เห็นตัวอย่างเยอะๆ หลายๆ แบบ

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 53

    ตอนแรกมันจะขึ้น null เพราะไม่มีในตาราง Math ไง

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 54

    ให้เราลบคอลัมน์ชื่อกับคะแนนทิ้งไป เพราะไม่ใช้

    จากนั้นกด expand table ออกมาให้หมด แต่คราวนี้เราไม่เอาชื่อตารางเป็น prefixแล้ว

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 55

    จะได้ผลลัพธ์แบบนี้

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 56

    ซึ่งข้อนี้ผมตั้งชื่อ Query ว่า Q3-OnlyinExcel

    Q4: คนไหนบ้างที่มีชื่อในตารางใดตารางหนึ่ง แต่ไม่ได้อยู่ทั้งสองตาราง

    ข้อนี้จริงๆ แล้วเราสามารถเอา Q2 กับ Q3 มาต่อตูดกันได้เลย (เรียกว่า Append)

    โดยที่คลิ๊กขวาที่ Q2-OnlyinMath แล้วเลือก Append

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 57

    แล้วก็เลือกว่า Append กับ Q3-OnlyinExcel

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 58

    จากนั้นเราก็ได้ผลลัพมาเลย!

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 59

    แต่ถ้าเราอยากบอกด้วยว่าแต่ละบรรทัดมาจากตารางไหน ผมแนะนำให้ไปเพิ่มชื่อตารางเป็นอีกคอลัมน์นึงใน Q2-OnlyinMath และ Q3-OnlyinExcel ซะก่อน ดังนี้

    กลับเข้าไป Edit ใน Q2-OnlyinMath ดังนี้ แล้วกด Close & Load

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 60

    ทำแบบเดียวกันกับ Q3-OnlyinExcel แล้วกด Close & Load

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 61

    จากนั้นกลับมา Append อีกทีนึง ก็จะมีคอลัมน์ SourceTable โผล่มาละ

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 62

    และนี่ก็คือภาพรวมผลลัพธ์ทั้งหมด

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 63

    ข้อมูลเปลี่ยนก็กด Refresh ได้เลย

    ซึ่งความดีงามของ Power Query ก็คือ ถ้าข้อมูลต้นทางเปลี่ยนไป เราจะ Refresh ได้เลย

    เช่น ผมไปเพิ่ม N 88 ในตารางแรก

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 64

    แค่ผมไปที่ Data -> Refresh All เท่านั้นจบเลย
    Tips : ถ้าคลิ๊กขวา Refresh ที่ตารางผลลัพธ์ มันจะแก้แค่ตารางนั้นอันเดียว ถ้าจะแก้ทุกอันพร้อมกันให้กด Refresh All แบบนี้แหละ

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 65

    ผลลัพธ์ทุกตารางจะเปลี่ยนไปทันที

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 66

    เรียงผลลัพธ์ให้สวยงาม

    สังเกตว่าตาราง Q4 ยังไม่ได้กด Sort ตามชื่อ (Append มันจะยังไม่ sort) ถ้าจะ sort ก็เข้าไปแก้ใน Q4 แล้วกด Sort ก็จบเลย

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 67

    พอกด close & load ผลของ Q4 ก็จะมีการเรียงตามชื่อเลย จบ

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 68

    แถม Q5 : List รายชื่อทั้งหมดเลย แล้วแสดงคะแนนของแต่ละวิชา

    หากต้องการ List รายชื่อทั้งหมดจากทั้ง 2 ตาราง เราสามารถทำได้ 2 แบบ คือ

    1. ใช้การ Merge แบบ Full Outer Join
    2. Append ข้อมูลก่อนใช้ Left Join 2 ที

    Q5.1 : ใช้การ Merge แบบ Full Outer Join

    โดยคลิ๊กขวาที่ tblMath แล้วเลือก Merge แบบ Full Outer Join

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 69

    จะได้ผลลัพธ์ดังนี้

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 70

    จากนั้นกด Expand ออกมาแบบเอาทุกอย่างเลย

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 71

    จะได้ผลลัพธ์แบบนี้ ซึ่งจะได้ทุกแถวของทั้ง 2 ตารางมาเลย

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 72

    จากนั้นเราจะสร้างคอลัมน์ใหม่ โดยเลือกอะไรก็ได้คอลัมน์เดียวก่อน แล้วไปที่แถบ Add Column-> Conditional Column โดยเอาชื่อมารวมกันดังนี้ (ถ้าช่องนั้นว่างให้เอาอีกช่อง ไม่งั้นก็เอาช่องเดิม)

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 73

    ปล. ใครที่ไม่มี Conditional Column ให้ Add Custom Column แล้วใส่สูตร if เอาเองว่า

    if [ชื่อ] = null then [tblExcel.ชื่อ] else [ชื่อ]

    จะได้ผลัพธ์แบบนี้เหมือนกัน

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 74

    จากคลิ๊กคอลัมน์ ชื่อCombine กด Ctrl ค้างไว้แล้วคลิ๊ก คะแนน กับ tblExcel.คะแนน แล้วกดคลิ๊กขวา Remove Other Column

    จะได้ผลัพธ์เหลือเฉพาะตัวที่ต้องการเลย

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 75

    จากนั้น จะ sort หรือเปลี่ยนชื่อคอลัมน์อะไรก็ตามใจนะ เช่น

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 76

    Q5.1 : Append ข้อมูลก่อนใช้ Left Join 2 ที

    อีกวิธีนึงคือเราเอา tblMath กับ Excel Append กันก่อน

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 77

    จะได้แบบนี้ ซึ่งให้เราลบคอลัมน์คะแนนออกไปก่อน

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 78

    จากนั้นกด Home -> Remove Rows -> Remove Duplicates เพื่อกำจัดตัวซ้ำ

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 79

    จากนั้น Merge กับตารางคะแนนแต่ละอันแบบ Left Outer (ยึดฝั่งซ้าย หรือฝั่งบนเป็นหลัก)

    อันนี้ Merge กับ tblExcel ก่อน (อะไรก่อนก็ได้)

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 80

    ต่อไป Merge กับ tblMath

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 81

    จะได้แบบนี้

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 82

    จากนั้นกด Expand คะแนนแต่ละอันออกมา

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 83

    ทำครบทั้ง 2 ตารางก็จะได้แบบนี้เลย

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 84

    กด Sort ชื่อซะหน่อยก็จบเลย

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 85

    Close & Load to… Table ออกมาก็ได้ผลเหมือนกันแหละ

    วิธีเปรียบเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน? 86

    จบแล้ววว

    และนี่ก็คือ 2 วิธี ในการเทียบข้อมูล 2 ตาราง ว่ามีรายการไหนตรงกัน ไม่ตรงกัน มันยาวมากๆ เลย (มีใครอ่านจบบ้าง comment บอกหน่อยนะ 555)

    ใครลองแล้วได้ผลลัพธ์เป็นยังไง ทำได้ไม่ได้ยังไง? Comment บอกได้เลยนะครับ

  • วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3

    ตอนนี้เป็นภาค 3 แล้ว ซึ่งจะขอตัดฉากกลับมาที่การใช้ Line อีกครั้งนะครับ คราวนี้เราจะแสดงตัวอย่างการประยุกต์ใช้ Line Notify ในการส่งข้อความแจ้งเตือนจากข้อมูลที่อยู่ในไฟล์ Excel ของเราบ้างแล้วล่ะ ใครยังไม่ได้อ่านตอนแรกก็เชิญไปอ่านก่อนนะ ไม่งั้นทำต่อไม่ได้นะครับ

    ตัวอย่าง : ข้อความแจ้งเตือนเมื่อ Project เลยกำหนด Deadline

    ก่อนอื่น ผมลองเตรียมข้อมูลสมมติว่าเป็นแบบนี้ก่อน นั่นคือมี Project หลายอัน แต่ละอันมี Deadline แล้วก็บอกว่าทำเสร็จไปแล้วรึยัง?

    เป้าหมายคือ จะให้ส่ง Line Notify ไปเตือนเฉพาะอันที่เลย Deadline แล้วยังไม่เสร็จ (พร้อม Sticker หน้าโกรธ)

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 87

    เพื่อให้ง่ายต่อการอ้างอิง ผมจะแปลงข้อมูลให้เป็น Table ซะก่อน (โดยกด Insert->Table หรือ Ctrl+T) และตั้งชื่อว่า ProjectTable

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 88

    จากนั้นเราจะลองอ้างอิงข้อมูลใน Table บรรทัดที่สอง (Project-B) ดูว่าทำได้มั้ย?

    หัดอ้างอิงข้อมูลจาก Table ด้วย VBA

    ลองสร้าง Module ใหม่แล้วใส่ code แบบนี้ดู

    Sub LoopTable()
    
    Dim tbl As ListObject
    'อ้างอิงจาก ชื่อ table
    Set tbl = ActiveSheet.ListObjects("ProjectTable")
    
    'ลองดึงข้อมูลในตำแหน่งที่ต้องการ
    'หลักๆ อ้างโดย Cells(ลำดับแถว,ลำดับคอลัมน์) โดยมันอ้างใน range ที่กำหนด ในที่นี้คือ Data ใน Table
    'ใช้ tbl.ListColumns("ชื่อคอลัมน์").Index เพื่อหาว่าอยู่คอลัมน์ที่เท่าไหร่
    
    MsgBox tbl.DataBodyRange.Cells(2, tbl.ListColumns("Desc").Index)
    
    End Sub

    จากนั้นกด F5 จะได้ผลลัพธ์เป็นแบบนี้

    แสดงว่าเราสามารถอ้างอิง Row ที่ 2 ของ Table และเอาข้อมูลในคอลัมน์ Desc มาได้แล้ว

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 89

    ดังนั้นเดี๋ยวเราลองดึงให้ครบทั้งบรรทัดเลย โดยจะบอกให้ครบเลยว่า Project อะไร? Deadline เมื่อไหร่?

    โดยที่เราแก้ Code ให้เป็นแบบนี้

    โดยที่เราใส่ค่าแต่ละคอลัมน์ลงในตัวแปรก่อน จะได้อ้างอิงมาใช้ง่ายๆ

    Sub LoopTable()
    
    Dim tbl As ListObject
    'อ้างอิงจาก ชื่อ table
    Set tbl = ActiveSheet.ListObjects("ProjectTable")
    
    'ลองดึงข้อมูลในตำแหน่งที่ต้องการ
    'หลักๆ อ้างโดย Cells(ลำดับแถว,ลำดับคอลัมน์) โดยมันอ้างใน range ที่กำหนด ในที่นี้คือ Data ใน Table
    'ใช้ tbl.ListColumns("ชื่อคอลัมน์").Index เพื่อหาว่าอยู่คอลัมน์ที่เท่าไหร่
    
    projRow = 2
    
    projName = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("ชื่อ Project").Index)
    projDesc = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Desc").Index)
    projDeadline = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Deadline").Index)
    projFinish = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Finish").Index)
    
    projFullMsg = projName & " | " & projDesc & " | Dead Line : " & projDeadline & " | Finish : " & projFinish
    
    MsgBox (projFullMsg)
    
    End Sub
    

    พอกด F5 จะได้แบบนี้เลย

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 90

    เปลี่ยนโครงสร้าง Code ให้เรียกใช้สะดวกขึ้น

    คราวนี้เพื่อให้สะดวกขึ้น เดี๋ยวเราย้าย code แยกกันเป็น Function กับ Sub เลย จะได้เรียกใช้ง่ายๆ ว่าจะเอา Table ไหน? แถวไหนมาแสดง ดังนี้

    Public tbl As ListObject
    Function GetTableData(projRow)
    
    projName = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("ชื่อ Project").Index)
    projDesc = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Desc").Index)
    projDeadline = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Deadline").Index)
    projFinish = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Finish").Index)
    
    projFullMsg = projName & " | " & projDesc & " | Dead Line : " & projDeadline & " | Finish : " & projFinish
    
    GetTableData = projFullMsg
    
    End Function
    
    Sub LoopTable()
    Set tbl = ActiveSheet.ListObjects("ProjectTable")
    MsgBox GetTableData(2)
    
    End Sub

    ซึ่งถ้ากด F5 ก็จะแสดงผลได้ดังเดิมเลย

    ทำให้เตือนเฉพาะตัวที่เลยกำหนด

    คราวนี้เราจะเริ่มใช้ for loop + if เช็คแล้วว่าควรจะแสดงผลจากแถวไหนบ้าง?

    Logic คือ ถ้า Finish ไม่ใช่ Y และ Deadline < วันปัจจุบัน ก็จะทำให้เด้งข้อความ

    Public tbl As ListObject
    Function GetTableData(projRow)
    
    projName = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("ชื่อ Project").Index)
    projDesc = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Desc").Index)
    projDeadline = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Deadline").Index)
    
    
    projFullMsg = projName & " | " & projDesc & " | Dead Line : " & projDeadline
    
    GetTableData = projFullMsg
    
    End Function
    
    Sub LoopTable()
    Set tbl = ActiveSheet.ListObjects("ProjectTable")
    
    'get current date
    dateToday = Date
    
    'check number of rows
    NumRows = tbl.DataBodyRange.Rows.Count
    
        For i = 1 To NumRows
            projDeadline = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Deadline").Index)
            projFinish = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Finish").Index)
            If projFinish <> "Y" And projDeadline < dateToday Then
            MsgBox GetTableData(i)
            End If
        Next i
    End Sub

    พอกด F5 มันก็จะเด้ง MsgBox มา 2 รอบ คือ Project B และ Project H

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 91
    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 92

    เริ่มส่งข้อความเข้า Line จริงๆ ละ

    จากนั้นเราจะเปลี่ยนจาก MsgBox ไปใช้การส่งข้อความเข้า Line แทน ซึ่งเรามี Sub ตัวนึงที่ทำงานนั้นอยู่แล้ว (สร้างไว้ในบทแรก) นั่นคือ

    Sub LineNotify(msg As String, Optional stickID As Integer, Optional stickPack As Integer)

    ดังนั้น ใน Sub LoopTable() เราแค่เปลี่ยนจาก MsgBox GetTableData(i) เป็น LineNotify GetTableData(i) ก็จะได้ผลเลย

    เมื่อลองกด F5 จะได้ผลดังรูป ว่ามันยิงข้อความมา 2 รอบ

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 93

    ถ้าจะทำให้เตือนล่วงหน้าล่ะ?

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 94

    ที่นี้ลองเปลี่ยน Code ทั้งหมดใน Module เป็นดังนี้

    ใน Code ข้างล่างนี้ผมมีการแยกข้อมูลเป็น 2 กลุ่ม คือ เป็นกลุ่มที่เลยกำหนด กับกลุ่มที่เตือนล่วงหน้า โดยใช้ตัวแปร NumDayNoti = Range(“dayNoti”) ดึงค่ามาจากชื่อ dayNoti ที่ตั้งไว้ใน Sheet Excel แล้วเอามา Adjust กัย Logic ให้เหมาะสม

    โดยผมลองกลับมาใช้ MsgBox เพื่อทดสอบก่อนว่าได้ผลหรือไม่ เดี๋ยวไว้แก้ทุกอย่างเสร็จเรียบร้อยจะเปลี่ยนกลับไปส่ง Line อีกที

    Public tbl As ListObject
    Function GetTableData(projRow)
    
    projName = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("ชื่อ Project").Index)
    projDesc = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Desc").Index)
    projDeadline = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Deadline").Index)
    
    
    projFullMsg = projName & " | " & projDesc & " | Dead Line : " & projDeadline
    
    GetTableData = projFullMsg
    
    End Function
    
    Sub LoopTable()
    Set tbl = ActiveSheet.ListObjects("ProjectTable")
    
    'get current date
    dateToday = Date
    
    'check number of rows
    NumRows = tbl.DataBodyRange.Rows.Count
    
    'Due Already
        For i = 1 To NumRows
            projDeadline = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Deadline").Index)
            projFinish = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Finish").Index)
            If projFinish <> "Y" And projDeadline < dateToday Then
            MsgBox "เลยกำหนดแล้ว : " & GetTableData(i)
            End If
        Next i
        
       
    'Pre Noti
    'Get day to noti
    NumDayNoti = Range("dayNoti")
        For i = 1 To NumRows
            projDeadline = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Deadline").Index)
            projFinish = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Finish").Index)
            If projFinish <> "Y" And (projDeadline - NumDayNoti) < dateToday And projDeadline >= dateToday Then
            MsgBox "กำลังจะครบกำหนด : " & GetTableData(i)
            End If
        Next i
    End Sub
    

    เมื่อลองรัน Code ก็จะมี Msgbox มาหลายอันเลย แต่จะแยกเป็นตัวที่ครบกำหนดแล้ว กับที่กำลังจะครบกำหนด

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 95

    รวบข้อความให้เป็นแค่ 2 ข้อความ ข้อความละกลุ่ม

    ทีนี้ถ้าเราจะส่งข้อความไป Line บรรทัดละ 1 ข้อความเลยมันก็จะดูรกเกินไปหน่อย ดังนั้นเราจะมารวบข้อความพวกนี้เข้าด้วยกันก่อน ดังนี้

    Public tbl As ListObject
    Function GetTableData(projRow)
    
    projName = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("ชื่อ Project").Index)
    projDesc = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Desc").Index)
    projDeadline = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Deadline").Index)
    
    
    projFullMsg = projName & " | " & projDesc & " | Dead Line : " & projDeadline
    
    GetTableData = projFullMsg
    
    End Function
    
    Sub LoopTable()
    Set tbl = ActiveSheet.ListObjects("ProjectTable")
    
    'get current date
    dateToday = Date
    
    'check number of rows
    NumRows = tbl.DataBodyRange.Rows.Count
    
    'Due Already
        CountDue = 0
        For i = 1 To NumRows
            projDeadline = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Deadline").Index)
            projFinish = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Finish").Index)
            If projFinish <> "Y" And projDeadline < dateToday Then
            DueMsg = DueMsg & GetTableData(i) & Chr(13) & Chr(10)
            CountDue = CountDue + 1
            End If
        Next i
        
        MsgBox "เลยกำหนดแล้ว : " & CountDue & " รายการ" & Chr(13) & Chr(10) & DueMsg
        
       
    'Pre Noti
    'Get day to noti
    NumDayNoti = Range("dayNoti")
        CountPreNoti = 0
        For i = 1 To NumRows
            projDeadline = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Deadline").Index)
            projFinish = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Finish").Index)
            If projFinish <> "Y" And (projDeadline - NumDayNoti) < dateToday And projDeadline >= dateToday Then
            PreNotiMsg = PreNotiMsg & GetTableData(i) & Chr(13) & Chr(10)
            CountPreNoti = CountPreNoti + 1
            End If
        Next i
        
        MsgBox "กำลังจะครบกำหนด : " & CountPreNoti & " รายการ" & Chr(13) & Chr(10) & PreNotiMsg
        
    End Sub

    พอกด F5 เพื่อ test จะพบว่ามี MsgBox ออกมาแค่ 2 ชุด ผมใส่แถมไปด้วยว่ามีกี่รายการ

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 96
    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 97

    Final Version ส่งเข้า Line จริงๆ + Sticker ด่า 555

    เราเปลี่ยนจาก MsgBox เป็น LineNotify และใส่เงื่อนไขไปว่า ถ้าจำนวนเกิน Deadline >0 ให้ด่าไปด้วย จะได้ดังนี้

    Public tbl As ListObject
    Function GetTableData(projRow)
    
    projName = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("ชื่อ Project").Index)
    projDesc = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Desc").Index)
    projDeadline = tbl.DataBodyRange.Cells(projRow, tbl.ListColumns("Deadline").Index)
    
    
    projFullMsg = projName & " | " & projDesc & " | Dead Line : " & projDeadline
    
    GetTableData = projFullMsg
    
    End Function
    
    Sub LoopTable()
    Set tbl = ActiveSheet.ListObjects("ProjectTable")
    
    'get current date
    dateToday = Date
    
    'check number of rows
    NumRows = tbl.DataBodyRange.Rows.Count
    
    'Due Already
        CountDue = 0
        For i = 1 To NumRows
            projDeadline = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Deadline").Index)
            projFinish = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Finish").Index)
            If projFinish <> "Y" And projDeadline < dateToday Then
            DueMsg = DueMsg & GetTableData(i) & Chr(13) & Chr(10)
            CountDue = CountDue + 1
            End If
        Next i
        
        LineNotify "เลยกำหนดแล้ว : " & CountDue & " รายการ" & Chr(13) & Chr(10) & DueMsg
        
       
    'Pre Noti
    'Get day to noti
    NumDayNoti = Range("dayNoti")
        CountPreNoti = 0
        For i = 1 To NumRows
            projDeadline = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Deadline").Index)
            projFinish = tbl.DataBodyRange.Cells(i, tbl.ListColumns("Finish").Index)
            If projFinish <> "Y" And (projDeadline - NumDayNoti) < dateToday And projDeadline >= dateToday Then
            PreNotiMsg = PreNotiMsg & GetTableData(i) & Chr(13) & Chr(10)
            CountPreNoti = CountPreNoti + 1
            End If
        Next i
        
        LineNotify "กำลังจะครบกำหนด : " & CountPreNoti & " รายการ" & Chr(13) & Chr(10) & PreNotiMsg
        
    If CountDue > 0 Then
        Call LineNotify("ทำไมถึงปล่อยให้มีงานเกินกำหนดส่ง คราวหน้าปรับปรุงด้วยนะ!!", 118, 1)
    End If
        
    End Sub
    

    เมื่อกด F5 เพื่อ Run Code ก็จะได้ตามนี้

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 98

    สั่ง Code ให้ Run เมื่อกดปุ่มบน Excel

    ก่อนหน้านี้ทั้งหมด เราต้องกดปุ่ม F5 ใน VBA เพื่อรัน Code ซึ่งไม่สะดวกเลยในชีวิตจริง ดังนั้นเราจะมาทำปุ่มให้กดบน Sheet แล้วเมื่อกดปุ่ม มันก็จะมารัน Code ของ LoopTable ที่เราทำไว้ครับ

    ไป Insert Button แบบ Form Control ปุ่มดังรูป (ถ้าไม่มี Ribbon Developer ให้ไปกดเพิ่มใน Excel Option -> Customize Ribbon )

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 99

    พอกดลากเพื่อสร้างปุ่มมันจะมีหน้าต่างมาให้เลือกว่าจะรัน Code ไหน เราก็เลือก LoopTable ได้เลย

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 100

    จากนั้นก็เปลี่ยนชื่อปุ่มให้เหมาะสม

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 101

    จากนั้นลองกดปุ่มดู ก็จะพบว่ามีข้อความส่งมาใน Line เหมือนกับตอนที่เรากด F5 ใน Code เลย

    ทำให้แจ้งเตือนอัตโนมัติเมื่อเปิดไฟล์ Excel

    หากขี้เกียจกดปุ่มด้วย แต่อยากให้มันแจ้งเตือนอัตโนมัติเมื่อเปิดไฟล์เลย ก็ย่อมทำได้

    หลักการของ VBA คือ หากมี event บางอย่างเกิดขึ้น เราก็จะสามารถสั่งให้มันทำ Action ที่เราต้องการได้

    ซึ่งในที่นี้ event ก็คือ การเปิดไฟล์นี้ขึ้นมา และ action คือ การสั่ง sub LoopTable นั่นเอง

    วิธีการคือให้เข้าไปใน VBA อีกที แล้วกดไปที่ ThisWorkbook (เลข 1 ในรูป) จากนั้นใน Dropdown (เลข 2) ให้เปลี่ยจาก General เป็น Workbook แล้วเลข 3 จะเปลี่ยนเป็น Open เอง

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 102

    มันจะเกิด Private Sub Workbook_Open ขึ้นมาเอง และทุกสิ่งทุกอย่างที่เราเขียนในนี้ จะถูก Run ทันทีที่ไฟล์ถูกเปิด (ถ้าอยากได้ event อื่น ก็มีอีกใน Dropdown เลข 3 ในรูป)

    ดังนั้นเราจะใส่ code ว่า

    Private Sub Workbook_Open()
    Call LoopTable
    End Sub

    แค่นี้จบเลย

    จากนั้นลอง Save ไฟล์ แล้วเปิดขึ้นมาใหม่ จะพบว่ามัน Run Code อัตโนมัติ และมีการส่งข้อความไปที่ Line ทันที!! (แต่ผมว่ากดปุ่มเองดีกว่านะ 555)

    Event อื่นๆ มีอะไรอีก

    ถ้าอยากได้ Event อื่นอีก ก็มีเพียบเลย ลองไปกดดูได้ (ในรูปยังไม่ครบ)

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 103

    นอกจากนั้นยังมี Event ระดับ Worksheet อีก (แต่ต้องไปเลือกด้านซ้ายสุดเป็น Sheet)

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 3 104

    จะเห็นได้ว่าเราจะสามารถเอาไปประยุกต์ใช้ได้เพียบเลย เช่น เมื่อ Table อัปเดท เมื่อ Pivot Update เมื่อมีการเปลี่ยนข้อมูลในชีท หรืออะไรได้อีกเพียบ

    สำหรับตัวอย่างนี้ก็ยาวมากอีกแล้ว ดังนั้นผมขอจบเพียงเท่านี้ดีกว่า ใครมีอะไรสงสัยก็ถามได้ครับ

    ในตอนต่อไป เราจะมาดูวิธีส่งข้อความเข้า Group Chat และวิธีส่งรูปกันครับ

    ปล. สำหรับการดึงข้อความจาก Line มาเข้า Excel นั้น ส่วนตัวคิดว่ามันใช้ Line Notify ไม่ได้ และไม่แน่ใจว่าใช้ Line Messaging API ได้หรือไม่? ผมยังไม่ได้ลอง แต่ถ้าได้ ผมคิดว่าทำเป็น Line BOT ไปเลยอาจจะง่ายกว่าใช้ Excel ครับ

  • วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2

    ในตอนที่แล้วเราใช้ Excel VBA ส่งข้อความแจ้งเตือนเข้า Line กันไปแล้ว (แต่ยังไม่จบนะ) ในตอนนี้เราจะขอสลับฉากมาดูวิธีส่งเข้า Email กันบ้างครับ 555

    การส่งบางอย่างจาก Excel เข้า Email ผมขอแบ่งออกเป็น 4 วิธีหลักๆ ดังนี้

    1. ใช้ Insert Hyperlink
    2. ใช้สูตร HYPERLINK
    3. ใช้ VBA ส่งผ่าน Outlook
    4. ใช้ VBA ส่งผ่านช่องทางอื่นๆ เช่น Gmail

    เรามาดูแต่ละวิธีกันครับ เพราะมันไม่เหมือนกันเลย…

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

    ปล. บทความนี้ยาวมาก ถ้าไม่อยากอ่านทั้งหมดให้กดไปดูวิธีที่ตัวเองสนใจได้เลย

    ใช้ Insert Hyperlink

    วิธีนี้ง่ายสุด แต่ก็ทำอะไรได้น้อยสุดด้วย เพราะมันแค่ส่งข้อความบางอย่างจาก Excel เข้าโปรแกรมเมลของเราแล้วโปรยในช่องจะส่งหาใคร? subject อะไร? แล้วเปิดโปรแกรมเมลค้างไว้อย่างงั้น รอให้เรากดปุ่มส่งเองอีกที

    วิธีทำที่ง่ายสุดๆ ก็ดังนี้

    1. ให้พิมพ์ข้อความใน Cell ซักอันว่า Send Mail แล้วคลิ๊กขวา Insert Link…/Hyperlink => Email Address
    2. ใส่ข้อมูล Email ปลายทาง และ Subject ที่ต้องการ แล้ว ok
      วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 105
    3. จะได้ผลลัพธ์ออกมาดังรูปเลย
      วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 106

    ใช้สูตร HYPERLINK

    มาดูวิธีถัดไปกัน ซึ่งอันนี้จะดีขึ้นมากว่าวิธีแรกอีกนิดนึง 555

    =HYPERLINK(link_location,friendly_name)

    สูตรนี้มี input แค่ 2 ตัว คือ link_location กับ friendly_name ซึ่ง friendly_name ก็คือจะให้แสดงข้อความที่เป็นตัว link ว่าอะไร? ในที่นี้ผมจะให้เป็น Send Mail จากสูตร

    ตัวที่ยุ่งยากคือ link_location ต่างหาก ซึ่งการจะส่งเมลต้องใส่ link_location ในรูปแบบดังต่อไปนี้

     mailto:ที่อยู่ผู้รับ?subject=ข้อความหัวข้อเมล&body=ข้อความเนื้อหา

    เช่น ถ้าผมเขียนว่า

     mailto:Test123@gmail.com?subject=ทดสอบจาก Hyperlink&body=ข้อความเนื้อหา จาก Hyperlink

    จะได้ว่า

    =HYPERLINK("mailto:Test123@gmail.com?subject=ทดสอบจาก Hyperlink&body=ข้อความเนื้อหา จาก Hyperlink","Send Mail จากสูตร")

    หากลองกดที่ปุ่มดูจะได้ผลดังรูป

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 107

    ซึ่งเราก็สามารถ Link สูตรกับข้อความใน Cell ได้ดังนี้

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 108
    =HYPERLINK("mailto:"&C4&"?subject="&C5&"&body="&C6,"Send Mail จากสูตร")

    แต่พอกดปุ่ม ปรากฏว่าที่เรากดขึ้นบรรทัดใหม่ไว้ มันไม่ยอมขึ้นบรรทัดใหม่ด้วย

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 109

    ทางแก้คือ เราต้องทำการใส่สัญลักษณ์พิเศษในการขึ้นบรรทัดใหม่ด้วย นั่นคือ %0D%0A

    ดังนั้นเราจะทำการใช้ฟังก์ชัน SUBSTITUTE แทนการกด Alt+Enter ซึ่งก็คือ CHAR(10) ด้วยสัญลักษณ์พิเศษ คือ %0D%0A ดังนี้ โดยผมสร้างข้อความ body ขึ้นมาใหม่ในช่อง C7 ด้วยสูตร

    =SUBSTITUTE(C6,CHAR(10),"%0D%0A")

    แล้วแก้สูตร HYPERLINK ให้ไปเอาค่า Body จาก C7 แทน

    =HYPERLINK("mailto:"&C4&"?subject="&C5&"&body="&C7,"Send Mail จากสูตร")

    จะเห็นว่าเมื่อกดปุ่มแล้ว ผลลัพธ์ทุกอย่าง OK ละ มีการขึ้นบรรทัดใหม่ตามที่กด Alt+Enter ใน Excel เลย

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 110

    ใช้ VBA ส่งผ่าน Outlook

    วิธีนี้เหมาะกับคนส่งที่ใช้ Outlook เป็น Email นะครับ อาจจะเป็นเมลบริษัทอะไรแบบนี้ ซึ่งผมว่าเว็บนี้เขียนไว้ดี งั้นผมขอเอาเนื้อหามาดัดแปลงเลยนะครับ

    วิธีส่งข้อความเข้าไปแสดงใน Outlook

    เอาแบบรวบรัดเลยนะ ถ้าเราอยากจะส่งข้อความบางอย่างเข้าไปแสดงผลในโปรแกรม Outlook ให้ทำดังนี้

    ป.ล. ตอนแรกเราจะทำแบบให้มันเด้งหน้าต่างขึ้นมาให้เรากดส่งเองก่อน เพื่อจะทำสอบความถูกต้องของผลลัพธ์ ไว้ถ้ามันถูกแล้ว เราจะให้มันส่งเมลโดยที่ไม่ต้องเด้งหน้าต่างมาเลย

    ให้เราสร้าง Module ใน VBA (วิธีเดียวกับบทความที่แล้ว) แล้วปะ Code นี้ลงไป แล้วลองกด F5 เพื่อ Run ดูครับ

    Sub SendOutlook()
        ' SET Outlook APPLICATION OBJECT.
        Dim objOutlook As Object
        Set objOutlook = CreateObject("Outlook.Application")
        
        ' CREATE EMAIL OBJECT.
        Dim objEmail As Object
        Set objEmail = objOutlook.CreateItem(olMailItem)
    
        With objEmail
            .to = "ที่อยู่เมลปลายทาง"
            .Subject = "ส่งจาก Excel VBA"
            .Body = "ข้อความจาก Excel VBA"
            .Display   		' DISPLAY MESSAGE.
        End With
        
        ' CLEAR.
        Set objEmail = Nothing:    Set objOutlook = Nothing
    End Sub

    ถ้ารันสำเร็จก็จะเปิดหน้าต่าง Outlook ออกมา

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 111

    Tips : ถ้าใครกดแล้วไม่ติด ลองไปที่ Option ใน VBA -> References… -> ติ๊ก Microsoft Outlook xx.x Object Library เพิ่มดูนะครับ (แต่ผมไม่ได้ติ๊กยังใช้ได้เลย)

    วิธีเพิ่มไฟล์แนบลงไป

    ในระหว่าง With objEmail … กับ End With สามารถเพิ่มคำสั่งนี้ได้ครับ

    .Attachments.Add ("ที่อยู่ไฟล์")

    เช่น

    .Attachments.Add ("d:\thepexcel\ประวัติวิทยากร-ศิระ-เทพเอ็กเซล-new2020.pdf")

    สรุป คือ

    Sub SendOutlook()
        ' SET Outlook APPLICATION OBJECT.
        Dim objOutlook As Object
        Set objOutlook = CreateObject("Outlook.Application")
        
        ' CREATE EMAIL OBJECT.
        Dim objEmail As Object
        Set objEmail = objOutlook.CreateItem(olMailItem)
    
        With objEmail
            .to = "ที่อยู่เมลปลายทาง"
            .Subject = "ส่งจาก Excel VBA"
            .Body = "ข้อความจาก Excel VBA แบบมีไฟล์แนบ"
            .Attachments.Add ("ที่อยู่ไฟล์แนบ")
            .Display   		' DISPLAY MESSAGE.
        End With
        
        ' CLEAR.
        Set objEmail = Nothing:    Set objOutlook = Nothing
    End Sub

    พอกด F5 ก็จะเห็นว่ามีหน้าต่างเด้งขึ้นมา และคราวนี้มีไฟล์แนบด้วยล่ะ!!

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 112

    หลังจากนั้นจะลองกดปุ่ม Send ดูก็ได้ ว่ามันไปถูกต้องแล้วรึยัง? ถ้าถูกต้องแล้วเดี๋ยวเราจะทำ Step ถัดไปให้มันส่งไปเองโดยเราไม่ต้องขึ้นหน้าต่าง Outlook มาให้กดปุ่มเลย

    วิธีให้มันส่งเมลเลย โดยที่ไม่ต้องเด้งหน้าต่างขึ้นมา

    หลังจากทดสอบความถูกต้องหมดแล้วว่ามันได้ผล คราวนี้เราจะแก้ Code นิดหน่อย

    โดยจะเปลี่ยนจาก

    .Display    ' DISPLAY MESSAGE.

    เป็น

    .Send     ' SEND MESSAGE AUTO. 

    สรุปคือ code สุดท้าย จะเป็นดังนี้

    Sub SendOutlook()
        ' SET Outlook APPLICATION OBJECT.
        Dim objOutlook As Object
        Set objOutlook = CreateObject("Outlook.Application")
        
        ' CREATE EMAIL OBJECT.
        Dim objEmail As Object
        Set objEmail = objOutlook.CreateItem(olMailItem)
    
        With objEmail
            .to = "ที่อยู่เมลปลายทาง"
            .Subject = "ส่งจาก Excel VBA AUTO"
            .Body = "ข้อความจาก Excel VBA แบบมีไฟล์แนบ แบบ Auto"
            .Attachments.Add ("ที่อยู่ไฟล์แนบ")
            .Send     ' SEND MESSAGE AUTO.
        End With
        
        ' CLEAR.
        Set objEmail = Nothing:    Set objOutlook = Nothing
    End Sub

    จากนั้นกด F5 เพื่อ Run Code จะพบว่ามี email ส่งไปยังปลายทางได้ทันที !!

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 113

    ใช้ VBA ส่งผ่านช่องทางอื่นๆ เช่น Gmail

    เอาล่ะ มาถึงวิธีสุดท้ายแล้ว นั่นคือ เราจะส่ง Email แบบ Auto ด้วยคนส่งที่ใช้ Gmail กันล่ะ!!

    ซึ่งส่วนนี้ผมขอดัดแปลงจากเว็บนี้ครับ

    ขั้นตอนแรกคือ Add Library ก่อน

    การจะใช้วิธีนี้ได้ ต้องไป Add Library พิเศษก่อน โดยไปที่ ไปที่ Option ใน VBA -> References… -> ติ๊ก Microsoft CDO for Windows 2000 Library

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 114

    ต่อไปคือ Allow Less Secure App

    ให้ไปที่ https://www.google.com/settings/security/lesssecureapps แล้วเปิดคำสั่ง “Allow less secure apps”

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 115

    ปล. ถ้า Account Google ของเราเปิดโหมด 2-Step Verification เอาไว้ จะทำให้ใช้ Allow Less Secure Apps ไม่ได้นะ ต้องไปปิดโหมดนี้ก่อน ซึ่งก็จะอันตรายขึ้นนะ

    ใส่ Code VBA

    สร้าง Module ใหม่แล้ว Copy Code นี้ลงไป

    Sub SendGmail()
    
    Dim Mail As CDO.Message
    Dim strSubject As String
    Dim strFrom As String
    Dim strTo As String
    Dim strCc As String
    Dim strBcc As String
    Dim strBody As String
    Dim strAttach As String
    Dim GmailAccount As String
    Dim GmailPassword As String
    Dim msURL As String
    
    'เปลี่ยน code ที่นี่'============
    
    GmailAccount = "ที่อยู่gmailของคุณ"
    GmailPassword = "password gmail ของคุณ"
    
    strSubject = "ทดสอบยิง Gmail จาก Excel VBA"
    strFrom = GmailAccount
    strTo = "emailปลายทาง"
    strCc = ""
    strBcc = ""
    strBody = "เนื้อหาการทดสอบ"
    strAttach = "ที่อยู่ไฟล์แนบ"
    
    'เปลี่ยน code ที่นี่'============
    
    'creating a CDO object
    
       Set Mail = New CDO.Message
       msURL = "http://schemas.microsoft.com/cdo/configuration"
       
       With Mail.Configuration.Fields
    
           'Enable SSL Authentication
           .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        
           'Make SMTP authentication Enabled=true (1)
           .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        
           'Set the SMTP server and port Details
           'Get these details from the Settings Page of your Gmail Account
           .Item(msURL & "/smtpserver") = "smtp.gmail.com"
           .Item(msURL & "/smtpserverport") = 465
           .Item(msURL & "/sendusing") = 2
        
           'Set your credentials of your Gmail Account
           .Item(msURL & "/sendusername") = GmailAccount
           .Item(msURL & "/sendpassword") = GmailPassword
           'Update the configuration fields
           .Update
       
       End With
    
       'Set All Email Properties
       With Mail
          .Subject = strSubject
          .From = strFrom
          .To = strTo
          .CC = strCc
          .BCC = strBcc
          .TextBody = strBody
          .AddAttachment (strAttach) 'To attach Documents in mail
       End With
       'to send the mail
       Mail.Send
    
    End Sub

    จากนั้นเปลี่ยนพวก User/Pass และรายละเอียดของเมลเอาเองนะ ผมเขียนเอาไว้ใน section ‘เปลี่ยน code ที่นี่’============ แล้ว

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 116

    จากนั้นกด F5 เพื่อ Run จะเก็นว่ามี Email ส่งได้แล้ว

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 117

    แต่ถ้าใครขึ้นแบบนี้ แสดงว่ายังไม่ได้ไป enable คำสั่ง Allow Less Secure App นะครับ

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 2 118

    ถ้าไม่ใช่ Gmail ต้องทำยังไง?

    ถ้าจะส่งผ่านผู้ให้บริการรายอื่น เราต้องไปแก้ค่าใน Config ของ SMTP Server เช่นพวก Server/Port ดังนี้

    smtpserversmtpserverport
    Gmail smtp.gmail.com465
    Yahoo smtp.mail.yahoo.com465
    Office 365 smtp.office365.com587
    Hotmail/Windows Live smtp.live.com587

    สำหรับบทความนี้ที่ยาวมากๆ ก็ขอจบเพียงเท่านี้

    เดี๋ยวตอนหน้าเราจะเริ่มเอาความรู้จากทั้งสองตอนเข้ามาประยุกต์กับงานจริงมากขึ้นแล้ว เช่น แจ้งเตือนเมื่อเกิดเหตุการณ์บางอย่างในไฟล์ Excel เช่น Refresh ข้อมูลเสร็จ กรอกข้อมูลเสร็จตามกำหนด หรือว่า อาจมีงานที่ใกล้จะถึง Due Date ที่กำหนดไว้เป็นต้น

  • วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 1

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 1

    ปฏิเสธไม่ได้เลยว่าเรื่องการแจ้งเตือนจาก Excel ไปยัง Line หรือ Email เป็นสิ่งที่หลายๆ คนอยากรู้ แต่ยังทำไม่เป็น ไม่เป็นไรเดี๋ยวบทความนี้ผมจะอธิบายให้เอง

    บอกไว้ก่อนว่าการทำ Notification จาก Excel ไปยังที่ต่างๆ นี่หลีกเลี่ยงไม่ได้ที่จะต้องใช้ VBA (การเขียนโปรแกรมใน Excel) นะครับ มันยังไม่มีวิธีอื่นที่ทำได้ และผมเองก็ไม่ได้เชี่ยวชาญการเขียน VBA มากนัก นั่นคือ ผมรู้หลักการ รู้แนวคิดว่าควรจะทำอะไร แต่จำ Code แทบไม่ได้เลย ต้อง Google หรืออัด Macro ไว้แก้ไขตลอด 555

    เอาล่ะ เพื่อไม่ให้เสียเวลาเรามาเริ่มกันเลยที่การแจ้งเข้า Line กันก่อนละกัน (เพราะมันน่าสนใจกว่าไงล่ะ 555)

    วิธีแจ้งเตือนเข้า Line

    การจะแจ้งเตือนเข้า Line ได้นั้น เราจะใช้บริการที่ชื่อว่า Line Notify ซึ่งเป็นบริการที่เปิดให้เราสามารถส่งคำสั่งไปหา Line ได้ แต่ก็ต้องส่งในรูปแบบที่ Line กำหนดเป๊ะๆ นะ มันถึงจะเข้าใจ
    *ทางเทคนิค คือ มันเป็นการส่งผ่าน API (Application Programming Interface) ที่ Line ออกแบบเอาไว้

    สร้าง Token

    ทาง Line เองก็มีการกำหนดไว้ด้วยว่าถ้าจะส่งข้อความเข้าไปได้ จะต้องมีรหัส Token ซะก่อน โดยที่เราสามารถไปสร้าง Token ได้ฟรีๆ ที่ https://notify-bot.line.me/en/

    ให้เรากด Login ด้านขวาบนของหน้าจอ แล้ว Login line ของตัวเองลงไปซะ จากนั้นกดที่ชื่อแล้วไปที่ My Page หรือว่าหน้าของฉัน

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 1 119

    จากนั้นเลื่อนลงมาข้างล่างแล้วกด Generate Token แล้วติ๊กเลือกปลายทางที่จะส่งไปหา (ในที่นี้ผมเลือกตัวเองแบบ 1-1) โดยที่เราจะต้องใส่ด้วยว่า Noti นี้จะให้ขึ้นข้อความว่าส่งมาจากไหน ซึ่งผมใส่คำว่า Noti by ThepExcel เอาไว้

    จากนั้นกดปุ่ม Generate Token เขียวๆ ด้านล่าง (ถ้ามองไม่เห็นให้กด Zoom out ออกมาด้วย)

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 1 120

    จากนั้นให้กด Copy Token ที่มันสร้างขึ้นเก็บเอาไว้ (เดี๋ยวต้องเอา Code นี้ไปใส่ใน Excel) อ่อ และอย่าเอา Token ของตัวเองไปบอกใครล่ะ เดี๋ยวโดนเอาไปทำอะไรไม่ดีซวยเลย

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 1 121

    สร้าง Code VBA ใน Excel

    จากนั้นให้เรากลับมาเปิดสร้างไฟล์ Excel ใหม่ขึ้นมาอันนึง แล้ว Save ให้เป็นนามสกุล .xlsm (Excel Macro-Enabled Workbook) ด้วย ไม่งั้นมันจะใช้ VBA ไม่ได้

    จากนั้นกด Alt+F11 เพื่อเปิดหน้าต่าง VBA ขึ้นมา

    จากนั้นให้กดสร้าง Module ขึ้นมา โดยคลิ๊กขวาแล้วทำตามรูป

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 1 122

    แล้วก็ทำการ Paste Code นี้ลงไป (Copy ตั้งแต่แถว 1 ที่เป็นคำว่า sub นะ…)

    Sub LineNotify()
    
    Dim LineToken As String
    Dim lineMessage As String
    Dim objectXML As Object
    Dim URL As String
    
    '========================================
    
    'Line Notify Token ที่ Generate มา
    LineToken = "ใส่tokenของตัวเอง"
    
    'Line Message
    yourMessage = "ใส่ข้อความของตัวเอง"
    
    '========================================
    
    lineMessage = "message=" & yourMessage
    
    Set objectXML = CreateObject("Microsoft.XMLHTTP")
    URL = "https://notify-api.line.me/api/notify"
    With objectXML
        .Open "POST", URL, 0
        .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .SetRequestHeader "Authorization", "Bearer " & LineToken
        .send (lineMessage)
        Debug.Print objectXML.responseText
    End With
    
    Set objectXML = Nothing
    
    End Sub

    จากนั้นผมแก้ 2 จุดนี้

    • LineToken =”k5e5PVIMI1vCGgAxxxxxxxxxxxxx”
    • yourMessage =”ThepExcel สอนส่ง Noti เข้า Line”

    ปล. code พวกนี้เป็นคำสั่งที่ line ต้องการในการสื่อสารทาง API ซึ่งอ้างอิงจากเอกสารนี่ (ใช้วิธีการ POST)

    ทดสอบส่ง Notification เข้า Line

    ให้เราคลิ๊กตรง code ตรงไหนก็ได้ในหน้า VBA Editor แล้วกดปุ่ม F5 เพื่อ Run Code

    ถ้ามันสำเร็จ จะมี line ส่งมาหาเราด้วยข้อความที่เราใส่ทันที!!

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 1 123

    ปรับ Code ให้สะดวกและเจ๋งขึ้น

    ให้เราลองเปลี่ยน Code เป็นอันนี้แทน เพื่อให้สามารถเรียกคำสั่งได้สะดวกขึ้นด้วยการเรียก Sub Procedure ใน VBA (อย่าลืมแก้ Token ล่ะ)

    Sub test_noti()
    Call LineNotify("ใส่ข้อความของตัวเอง", stickerID, stickPackID)
    End Sub
    
    
    Sub LineNotify(msg As String, Optional stickID As Integer, Optional stickPack As Integer)
    
    Dim LineToken As String
    Dim lineMessage As String
    Dim objectXML As Object
    Dim URL As String
    
    '========================================
    
    'Line Notify Token ที่ Generate มา
    LineToken = "ใส่tokenของตัวเอง"
    '========================================
    
    'Line Message
    yourMessage = msg
    
    lineMessage = "message=" & yourMessage
    
    '========================================
    'เพิ่มเงื่อนไข Sticker
    If stickPack = 0 Or stickID = 0 Then
    Else
    lineMessage = lineMessage & "&stickerPackageId=" & stickPack & "&stickerId=" & stickID
    End If
    '========================================
    
    Set objectXML = CreateObject("Microsoft.XMLHTTP")
    URL = "https://notify-api.line.me/api/notify"
    With objectXML
        .Open "POST", URL, 0
        .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .SetRequestHeader "Authorization", "Bearer " & LineToken
        .send (lineMessage)
        Debug.Print objectXML.responseText
    End With
    
    Set objectXML = Nothing
    
    End Sub

    คราวนี้เราจะแก้ข้อความที่ข้างบนสุดเอาได้เลย และสามารถใส่ Sticker ได้ด้วย โดยต้องระบุ Sticker ID และ Sticker Package ID ที่ต้องการ โดยดูรายชื่อ Sticker ที่นี่

    จากคำสั่งนี้

    Call LineNotify(“ใส่ข้อความของตัวเอง”, stickerID, stickPackID)

    โดยแก้เป็น

    Call LineNotify("อย่าลืมกด Like&Share เทคนิคจาก ThepExcel นะ ", 4,1)

    จากนั้นคลิ๊กตรงส่วนบน ใน Sub test_noti() แล้วกดปุ่ม F5 เพื่อ Run Code

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 1 124
    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 1 125

    จะเห็นว่ามีทั้งข้อความและ Sticker เลย

    การส่งยืดหยุ่นขึ้นมาก

    แต่ถ้าอยากส่งแต่ข้อความ ก็ใส่แต่ข้อความได้เลย

    นอกจากนี้ Sub test_noti() จะใส่ Call LineNotify หลายรอบก็ได้ เช่น

    Sub test_noti()
    Call LineNotify("ตอนนี้ยาวมากแล้ว ขอจบเท่านี้ดีกว่า ไว้ติดตามต่อตอนหน้านะ")
    Call LineNotify("ขอบคุณทุกคนมากที่ติดตามอ่าน สวัสดีครับ", 125, 1)
    End Sub

    จากนั้นกด F5 ก็จะมี Line ส่งมาดังนี้

    วิธีส่งข้อความแจ้งเตือน (Notification) จาก Excel เข้า Line หรือ Email : ภาค 1 126

    ไว้ตอนหน้าเราจะมาลุยเรื่อง Email กันต่อ รวมถึงการปรับให้มันส่งเมื่อมี event บางอย่างเกิดขึ้น เช่น ถึงวันครบกำหนด หรือ เมื่อมีคนกดปุ่มบางอย่างก็ได้ และเราอาจทำอะไรเจ๋งๆ กับ Line ได้อีกนะ ไว้ติดตามต่อไปนะครับ

  • วิธีการใช้ D-Function เช่น DSUM DCOUNT DMAX DGET

    วิธีการใช้ D-Function เช่น DSUM DCOUNT DMAX DGET

    ปกติแล้วฟังก์ชันที่ใช้ในการสรุปผลข้อมูลที่เรามักจะใช้กันก็จะหนีไม่พ้นพวก SUMIFS, COUNTIFS, MAXIFS, MINIFS อะไรพวกนี้ ซึ่งมีความสามารถในการสรุปข้อมูลตามเงื่อนไขได้

    แต่ใน Excel ก็ยังมีฟังก์ชันอีกกลุ่มนึงที่สามารถสรุปข้อมูลตามเงื่อนไขได้เช่นกัน ซึ่งผมขอเรียกว่า D-Function ซึ่งย่อมาจาก Database Function เช่น เช่น DSUM DCOUNT DMAX DGET และในบทความนี้เราก็จะมาเรียนรู้เรื่องฟังก์ชันนี้กัน ว่ามันดียังไง? มีข้อจำกัดยังไง? ซึ่งผมเรียบเรียงเนื้อหาใหม่จากที่ผมเคยเขียนไว้ในหนังสือจอมเวทเทพเอ็กเซลนะครับ

    ขั้นตอนการใช้งาน D-Function

    มีอยู่ 3 ขั้นตอนหลักๆ คือ

    1. เตรียมข้อมูลให้อยู่ในรูปแบบของ Database (มีชื่อคอลัมน์ครบทุกอัน ไม่ซ้ำกัน)
    2. เตรียมเงื่อนไขให้อยู่ในรูปแบบตาราง (เหมือน criteria ของเครื่องมือ Advanced Filter เป๊ะ)
    3. เรียกใช้ D-Function !

    โดยที่ D-Function ส่วนใหญ่จะมีองค์ประกอบดังนี้

    =ชื่อ D-FUNCTION ที่ต้องการ (database,field,criteria)
    • Database ให้เลือกตารางทั้งอัน รวมหัวตารางด้วย (สำคัญมาก!)
    • Field คือ ชื่อคอลัมน์ที่เราต้องการเอามาสรุปผล
    • Criteria คือ ตารางเงื่อนไข โดยต้องมีชื่อ Field ที่จะเอามาทำเงื่อนไขด้วย
      • ถ้าเงื่อนไขอยู่บรรทัดเดียวกัน แต่คนละคอลัมน์ คือเงื่อนไขแบบ AND (และ)
      •  ถ้าเงื่อนไขอยู่คนละบรรทัด คอลัมน์เดียวกัน คือเงื่อนไขแบบ OR (หรือ)

    ตัวอย่างดังรูป

    วิธีการใช้ D-Function เช่น DSUM DCOUNT DMAX DGET 127
    • Database คือ A5:D15
    • Field คือ D5 หรือ ข้อความว่า ยอดขาย (ดังนั้นใส่ว่า “ยอดขาย” ก็ได้)
    • Criteria คือตารางสีม่วง ซึ่งต้องมีชื่อ Field (หัวตาราง) ที่เป็นเงื่อนไขอยู่

    ผลรวมของยอดขายจึงได้ 236,000 มาจากคอลัมน์ ยอดขาย ใน Database พื้นที่คือ A5:D15 โดยมีเงื่อนไขคือ

    • ชื่อ =นาย ก และ สินค้า=Food (บรรทัดเดียวกัน คือ AND และ) 
    • หรือ สินค้า=Toy โดยไม่สนว่าชื่ออะไร (คนละบรรทัด คือ OR หรือ)

    จะได้ว่า 17,000 + 37,000 + 77,000 + 60,000 + 45,000
    = 236,000 นั่นเอง

    ข้อดีของ D-Function

    1. สามารถใส่เงื่อนไขที่ซับซ้อนได้ เช่น มีทั้ง AND และ OR ผสมกันได้  โดยไม่จำเป็นต้องใช้ Helper Column มาทดไว้ก่อน
    2. เห็นชัดเจนว่าเงื่อนไขในการคัดกรองข้อมูลมาสรุปผลคืออะไร
    3. รองรับฟังก์ชั่นเยอะ (มีพอๆ กับ PivotTable) เช่น มี MIN, MAX แม้จะเป็น Excel Version เก่ากว่า 2019 (ใน Excel เก่ากว่า 2019 จะไม่มี MINIFS, MAXIFS)

    ข้อเสียของ D-Function

    ข้อเสียของ D-Function ที่สำคัญคือ เรื่องการจัดรูปแบบของตาราง Criteria นี่แหละครับ เพราะมันทำให้เราไม่สามารถ Copy สูตรลงมาข้างล่างเรื่อยๆ ได้เหมือนสูตรปกติ

    ข้อจำกัดที่ทำให้ลากสูตรลงมาข้างล่างไม่ได้ เพราะในส่วนของ criteria  ใน D-FUNCTION(database,field,criteria) ต้องมีชื่อคอลัมน์ในตาราง Criteria ด้วยตลอด ดังนั้นถ้าอยากจะหาผลรวม Food, Toy , Furniture  แยกกันคนละบรรทัด จะต้องสร้างตาราง Criteria 3 อันด้วย ซึ่งทำให้ลำบากและไม่สะดวกเอามาก ๆ

    วิธีการใช้ D-Function เช่น DSUM DCOUNT DMAX DGET 128

    แต่ถ้าอยากปลดล๊อคเรื่องเงื่อนไขหัวตารางของ Criteria นี้ สามารถใช้วิธีผสานพลัง D-Function ร่วมกับเครื่องมือ Data Table เช่น ตัวอย่างในรูป สามารถใช้ DMAX กับสินค้าหลายๆ ตัวได้เลยพร้อมๆ กัน โดยไม่ต้องสร้างหัวตารางทุกอันครับ

    วิธีการใช้ D-Function เช่น DSUM DCOUNT DMAX DGET 129

    อย่างไรก็ตาม ถ้ามีฟังก์ชันสรุปในกลุ่ม SUMIFS COUNTIFS MINIFS MAXIFS แล้ว ผมว่าใช้พวกนั้นน่าจะสะดวกกว่าครับ หรือถ้าเงื่อนไขซับซ้อนหน่อยอาจต้องเรียนรู้เรื่อง Array Formula เพิ่มเติม ก็จะทำเงื่อนไขยากๆ ได้โดยไม่ต้องใช้ D-Function ครับ

  • วิธี Run เลขเอกสารอัตโนมัติเมื่อเพิ่ม Sheet แบบไม่ใช้ VBA

    วิธี Run เลขเอกสารอัตโนมัติเมื่อเพิ่ม Sheet แบบไม่ใช้ VBA

    เรื่องการ Run เลขเอกสารอัตโนมัติเป็นเรื่องที่หลายๆ ท่านถามมา ผมเลยขอนำเสนอเทคนิคที่ผมคิดขึ้นเองสดๆ ซึ่งเทคนิคนี้เจ๋งตรงที่ว่าไม่ต้องใช้ VBA เลยด้วยนะ!!

    เริ่มต้นกันเลย

    ก่อนอื่นเราก็ทำเอกสารหน้าแรกให้เสร็จก่อน จะใส่ข้อความอะไร ตารางอะไรยังไง แต่สวยแค่ไหนก็ใส่ไปให้ครบ

    ซึ่งให้ตั้งชื่อชีทให้เรียบร้อยด้วย เช่น ผมตั้งว่า BillDoc (จริงๆ จะตั้งอะไรก็ได้นะ)

    วิธี Run เลขเอกสารอัตโนมัติเมื่อเพิ่ม Sheet แบบไม่ใช้ VBA 130

    ประเด็นหลักคือ เดี๋ยวเราจะทำให้ไอ้ตรงช่องเลข Running เอกสารสีเขียวๆ มันเพิ่มเองได้เวลาเพิ่ม Sheet

    โดยที่ผมแถมความพิเศษอีกอย่างให้ด้วย คือ เราสามารถกำหนด Parameter ด้านขวาได้ (นอกขอบเขต Print Area จะได้ Print ไม่ออก) เช่น กำหนดได้ว่าเลขจะให้ adjust บวกเพิ่มไปเท่าไหร่ กำหนดคำนำหน้าได้ และกำหนดจำนวน Digit ได้ด้วย

    สรุปวีธีรันเลขเอกสารแบบรวดรัด

    ใส่สูตรนี้ลงไปในช่องสีเขียว แค่นี้จบเลย (แต่ตำแหน่งตัว parameter ด้านขวาต้องอยู่ในช่องตรงกับผมนะ ถ้าไม่ตรงต้องแก้ในสูตรเองนะครับ)

    =M3&TEXT(IFERROR(MID(CELL("filename",A1),FIND("(",CELL("filename",A1))+1,FIND(")",CELL("filename",A1))-1-FIND("(",CELL("filename",A1))),1)+M2,REPT("0",M4))

    Copy Sheet เพื่อเปลี่ยนเลขอัตโนมัติ

    เมื่อเรา Copy Sheet ออกมา เลขจะเปลี่ยนเองอัตโนมัติด้วย ซึ่งวิธี Copy Sheet ที่ง่ายที่สุดคือ กด Ctrl ค้างไว้ แล้วคลิ๊กที่แถบ Sheet แล้วลากออกมาด้านขวา

    วิธี Run เลขเอกสารอัตโนมัติเมื่อเพิ่ม Sheet แบบไม่ใช้ VBA 131

    จะเห็นว่าเลข Running เปลี่ยนโดยอัตโนมัติเลย!! โดยไม่ต้องใช้ VBA ด้วยซ้ำ!!

    แก้ Parameter ได้

    วิธี Run เลขเอกสารอัตโนมัติเมื่อเพิ่ม Sheet แบบไม่ใช้ VBA 132

    นอกจากนี้เรายังแก้ Parameter ของแต่ละ sheet ได้ด้วย (ถ้าอยากให้แก้ทีเดียวแล้วแก้หมดทุก sheet ควรสร้าง sheet parameter แยกไว้ แล้วเอาสูตร Link ไปที่นั่นที่เดียว)

    เช่น

    • ผมแก้ให้เลข adj เพิ่มไป 4 ดังนั้นเลขจะกลายเป็น 2+4=6
    • แก้คำนำหน้าเป็นคำว่า PO-
    • แก้จำนวน Digit เป็น 3 หลัก

    จะเห็นว่าเลขเอกสารกลายเป็น PO-006 แล้วววว

    วิธี Run เลขเอกสารอัตโนมัติเมื่อเพิ่ม Sheet แบบไม่ใช้ VBA 133

    อธิบายหลักการของสูตรรันเลขเอกสาร

    ผมคิดสูตรนี้ขึ้นมาจากแนวคิดที่ว่า ปกติเวลา Copy Sheet เลขบนชื่อ Sheet จะเพิ่มขึ้นเองอยู่แล้ว โดยไม่ต้องใช้ VBA ถ้าอย่างนั้น เราดึงตัวเลขที่เพิ่มขึ้นเองนี้มาใช้ประโชน์ในการรันเลขเอกสารก็ได้น่ะสิ

    ดังนั้นจากสูตรยาวๆ อันนี้ ผมจะขออธิบายทีละส่วน ดังนี้

    =M3&TEXT(IFERROR(MID(CELL("filename",A1),FIND("(",CELL("filename",A1))+1,FIND(")",CELL("filename",A1))-1-FIND("(",CELL("filename",A1))),1)+M2,REPT("0",M4))

    M3 & … แค่เป็นการเอาข้อความ 2 ก้อนมาต่อกัน ไม่น่างงเนอะ

    ฟังก์ชัน TEXT เปลี่ยนตัวเลขไปเป็น Text ที่มี Format ตามต้องการ

    หลักๆ ในก้อน 2 จะมีการใช้ =TEXT(value,format_text) ซึ่งมีความสามารถในการเปลี่ยนตัวเลขไปเป็น Text ที่มี Number Format ตาม Custom Format ที่กำหนด

    เช่น ผมสามารถเปลี่ยนเลข 6 ให้กลายเป็น 0006 ได้ด้วยการเขียนว่า

    =TEXT(6,"0000")

    ซึ่งในที่นี้ format_text ผมมีการใช้ REPT (Repeat) เพื่อให้สร้างข้อความเลข 0 ต่อกันโดยให้มีจำนวนเท่ากับค่าใน M4 เช่นถ้า M4 เขียนว่า 3 จะสร้างข้อความว่า 000 ลงมาใน format_text

    ทำให้ TEXT สามารถเปลี่ยนเลข 6 ให้กลายเป็น 006 ได้ เป็นต้น

    ทีนี้เลข 6 ใน value มันมาจากไหน?

    ก็จะพบว่าเกิดจากส่วนสูตรยาวๆ สีฟ้า + ค่าใน M2 ซึ่ง M2 คือตัว Adjust เลขที่ผมใส้ไว้นั่นเอง

    IFERROR(MID(CELL("filename",A1),FIND("(",CELL("filename",A1))+1,FIND(")",CELL("filename",A1))-1-FIND("(",CELL("filename",A1))),1)+M2

    ดังนั้นเหลือไอ้ตัวสีฟ้าแล้วล่ะที่ซับซ้อน…

    CELL เอาไว้หาข้อมูลชื่อชีทได้

    หลักการคือ มันจะหาตัวเลขที่อยู่ในวงเล็บของชื่อ Sheet ซึ่งประยุกต์มาจากการหาชื่อชีทซึ่งสามารถหาได้จากฟังก์ชัน CELL(“filename”) ตามที่ได้อธิบายแล้วในบทความแฉความลับภาค 3 ข้อ3

    ซึ่งถ้าเขียนแค่ CELL(“filename”,A1) เฉยๆ เครื่องผมจะได้ตามนี้

    D:\ThepExcel\web\running number document\[runningdoc.xlsx]BillDoc (2)

    ซึ่งมันคือชื่อ path ตามด้วยชื่อไฟล์ และชื่อชีท ซึ่งผมอยากได้แค่ตัวเลขในวงเล็บสุดท้ายแค่นั้นเอง

    ซึ่งฟังก์ชันที่ใช้หาเลขในวงเล็บของชื่อชีท ผมใช้ฟังก์ชัน FIND โดยหาตำแหน่งวงเล็บเปิด และวงเล็บปิด ผสมกับการใช้ MID ช่วยในการดึงตัวเลขนั้นออกมาด้วยสูตรนี้

    MID(CELL("filename",A1),FIND("(",CELL("filename",A1))+1,FIND(")",CELL("filename",A1))-1-FIND("(",CELL("filename",A1)))

    ทวนเรื่อง MID ให้นิดนึง

    =MID(text,start_num,num_chars) มีความสามารถในการดึงบางส่วนของข้อความ text ออกมาโดยเริ่มต้นที่ start_num เป็นจำนวนตัวอักษรเท่ากับ num_chars

    • text คือ CELL(“filename”,A1)
    • start_num คือ FIND(“(“,CELL(“filename”,A1))+1 ซึ่งเราหาตำแหน่งของเครื่องหมาย ( นั่นเอง
    • num_chars หลักการเกิดจากการหาตำแหน่ง ) ลบด้วยตำแหน่ง ( แต่มี adj นิดหน่อย สูตรคือ FIND(“)”,CELL(“filename”,A1))-1-FIND(“(“,CELL(“filename”,A1))

    ซึ่งผมมีการเขียนดักด้วย IFERROR ไว้ว่า ถ้าไม่เจอวงเล็บให้ถือว่าได้เลข 1 ไปซะ มันก็เลยซับซ้อนขึ้นอีกนิดนึง

    วิธีที่ผมทำนี้ถ้าสร้างเอกสารคนละกลุ่มกัน เช่น ข้างหน้าเป็น INV กับ PO ให้รันแยกกัน โดยเลขจะ Run แยกของใครของมันในไฟล์เดียวกันได้เลยครับ (เพราะมันดูจากเลขในวงเล็บนั่นเอง)

    อีกวิธีนึงที่ง่ายมากๆ

    คุณ Bo แห่ง Excel Wizard แนะนำวิธีนี้มาครับ ใส่สูตรนี้ลงไปในช่องเขียวได้เลย

     =M3&TEXT(M2+SHEET(I6),REPT("0",M4))

    แบบนี้ก็ง่ายดีใช้ SHEET เพื่อหาลำดับ Sheet ที่สร้างได้เลย ตอนแรกที่ทำบทความผมคิดไม่ถึงว่ามีฟังก์ชัน SHEET ให้ใช้ด้วย (แต่วิธีนี้ถ้าสร้างจากเอกสารคนละกลุ่มกันต้องปรับเลข Adjust ให้เหมาะสมอีกที)

    และนี่ก็คือการสร้างเลข Running เอกสาร โดยไม่ต้องใช้ VBA ครับ ใช้ได้ผลยังไงมาบอกกันด้วยนะ ถ้าชอบช่วยกด Like กด Share ให้หน่อยนะครับผม ^^

  • วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน

    ตามปกติแล้ว เวลาเราใช้ Power Query เพื่อGet Data จากไฟล์ Excel เดียวกันกับตัว Power Query ที่กำลังสร้าง เราจะต้อง Get Data from Table/Range เท่านั้น ซึ่งหากใช้วิธีนี้ Excel จะบังคับให้แปลงข้อมูลเป็น Table ก่อนเสมอ และนั่นก็เป็นวิธีมาตรฐานที่ทาง Microsoft ออกแบบเอาไว้

    แต่ในหลายๆ สถานการณ์ เราอาจจะไม่ได้อยากแปลงข้อมูลเป็น Table ก็ได้ (ไม่ว่าด้วยเหตุผลอะไรก็ตาม)

    วิธีแก้ปัญหาสำหรับสถานการณ์นี้จริงๆ มีอยู่ 2 วิธี คือ

    1. ใช้ Get Data From Excel Workbook แล้วมา Browse หาไฟล์ปัจจุบันที่ทำงานอยู่ วิธีนี้ทำง่าย แต่ผมไม่แนะนำ เพราะว่าวิธีนี้มีข้อเสียสำคัญคือ ต้อง save ไฟล์ Excel ก่อน Power Query จึงจะสามารถ Refresh ข้อมูลล่าสุดมาได้
    2. ตั้งชื่อ (Define Name) ให้กับ Range ที่ต้องการเพื่อสร้าง Named Range ก่อน

    ซึ่งเดี๋ยวผมจะแสดงวิธีทำของแบบที่ 2 โดยละเอียดให้ดูครับ

    อ่อ! ขอบอกก่อนว่าบทความนี้อาจจะเหมาะกับคนที่อ่านหนังสือ Excel Power Up! หรือเคยใช้ Power Query มาบ้างแล้วนะครับ ไม่งั้นอาจจะไม่เข้าใจว่าทำไมถึงต้องมาทำอะไรยุ่งยากแบบนี้ด้วย

    วิธีเอาข้อมูลจาก Name เข้า Power Query

    ก่อนอื่นให้โหลดไฟล์ประกอบอันนี้ก่อน

    ในไฟล์จะมีข้อมูล 2 sheet คือ NormalData (เป็นข้อมูลปกติ) กับ Table-ForPivot (เป็น Table)

    เดี๋ยวสิ่งที่เราพยายามจะทำคือ เอาข้อมูลในชีท NormalData นี้เข้าสู่ Power Query โดยไม่แปลงเป็น Table ก่อน

    ขั้นตอน 1 : ตั้งชื่อให้กับข้อมูลก่อน โดยเลือกข้อมูลที่เกี่ยวข้องแล้วตั้งชื่อซะ ในที่นี้ผมตั้งชื่อว่า MyDataName

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 134

    ขั้นตอน 2 : สามารถทำได้ 2 วิธี

    ขั้นตอน 2 วิธีที่ 1 : หลังจากตั้งชื่อให้ข้อมูลแล้ว จากนั้นเลือกที่ข้อมูลแล้วกด Get Data From Table/Range ได้เลย โดยหากตั้งชื่อแบบเป็นพื้นที่เอาไว้แล้ว มันจะไม่บังคับให้สร้าง Table ก่อน (วิธีนี้คุณ Bo แห่ง Excel Wizard บอกมา) ซึ่งวิธีนี้ดีตรงใช้ง่ายมาก

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 135

    จะเห็นว่าข้อมูลของเราเข้าไปสู่ Power Query เรียบร้อยแล้ว โดยไม่ต้องทำเป็น Table ก่อน

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 136

    ขั้นตอน 2 วิธีที่ 2 : สร้าง Blank Query ดังนี้ (ถ้าใช้เครื่องมือนี้บ่อย ก็อย่าลืมกด Add to Quick Access Toolbar ไว้ล่ะ) วิธีนี้จะดีตรงที่ว่ามัน List Object ทุกอย่างในไฟล์ Excel ให้เลย เผื่อต้องการจะรวมข้อมูลจากหลายๆ ชื่อ หรือหลายๆ Table เข้าด้วยกันก็ทำได้ง่าย

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 137

    จากนั้นพิมพ์ใน Formula Bar ของ Power Query Editor ว่า =Excel.CurrentWorkbook() แล้วกด Enter

    จะเห็นว่ามีทั้งข้อมูลที่เป็น Table จริงๆ และข้อมูลที่มาจาก Name ด้วย ซึ่งมันเข้าทางเราล่ะ!! เพราะเราจะใช้ Name นี่แหละในการอ้างอิงข้อมูลเข้า Power Query

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 138

    Tips : ถ้ายังไม่มี Formula Bar ให้ไปกดติ๊กที่ View->Formula Bar ก่อน

    จากนั้นคลิ๊กคำว่า Table สีเขียวๆ ที่ตรงกับ Name ที่ต้องการ คือ MyDataName เราก็จะได้ Table นั้นออกมาใน Power Query แล้วล่ะ

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 139

    ขั้นตอนที่ 3

    หลังจากแก้ไขข้อมูลตามต้องการ ก็สามารถ Load ออกมาเป็น Table ผลลัพธ์ โดยกด Close & Load จะเห็นว่าผลลัพธ์ออกมาได้แล้ว

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 140

    ทีนี้เราลองไปแก้ข้อมูลต้นฉบับ ให้แอปเปิ้ลขายได้ 500 ชิ้น แล้วค่อยไปคลิ๊กขวา ที่ตารางผลลัพธ์ แล้วกด Refresh จะเห็นว่าผลลัพธ์เปลี่ยนตามทันที! (แม้ไม่ได้ save ไฟล์)

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 141

    ปัญหาสำคัญที่ควรจะต้องจัดการ

    ทีนี้จะเหลือปัญหาสำคัญอย่างนึงคือ ตอนที่เราตั้งชื่อ MyDataName เนี่ย เราสร้างด้วยวิธีปกติ ทำให้หลังจากเราไปเพิ่มข้อมูลในต้นฉบับภายหลัง เจ้า MyDataName นี้มันจะไม่รู้จักข้อมูลนั้น เช่น ผมไปเพิ่มมังคุดอีก 1 บรรทัด

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 142

    จะเห็นว่า แม้จะลอง Refresh ที่ตารางผลลัพธ์ มันก็จะไม่รู้จักมังคุด (เพราะมันอยู่นอกขอบเขต Name ที่ตั้งเอาไว้นั่นเอง)

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 143

    แก้ปัญหาด้วยการตั้งชื่อแบบ Dynamic Range

    แทนที่เราจะตั้งชื่อแบบ fix ตำแหน่งไปเลยว่าเอาที่ =NormalData!$A$1:$C$5 แบบปกติ คราวนี้เราจะตั้งชื่อด้วยสูตรที่มันสามารถขยายพื้นที่ตามข้อมูลได้ ซึ่งเรียกว่าสูตรแบบ Dynamic Range นั่นเอง

    ซึ่งสูตรแบบ Dynamic Range นั้นหลักๆ แล้วจะสร้างได้ 2 ฟังก์ชัน คือใช้ INDEX หรือไม่ก็ OFFSET ซึ่งในที่นี้ผมจะใช้ OFFSET ละกัน เพราะดูแล้วน่าจะง่ายสำหรับสถานการณ์นี้มากกว่า (ใครใช้ OFFSET ไม่เป็นอ่านได้ที่นี่)

    ก่อนอื่นเราเขียนสูตร OFFSET ให้อ้างอิงจุดเริ่มต้นที่ จุดซ้ายบนของตาราง โดยไม่เลื่อนแถว ไม่เลื่อนคอลัมน์ และให้มีความสูงโดยนับจำนวนข้อมูลในคอลัมน์ A และมีความกว้างโดยนับข้อมูลในแถวที่ 1 โดยที่เรากด F4 ใส่ $ เพื่อ Fix ตำแหน่งให้หมด ดังนั้นสูตรจะเป็นแบบนี้

    =OFFSET($A$1,0,0,COUNTA($A:$A),COUNTA($1:$1))
    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 144

    จากนั้นให้เรา Cut สูตรนี้ไป Paste แทน Range เดิมในชื่อ MyDataName (โดยกด Edit Name ใน Formula –> Name Manager) แล้วกด OK

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 145

    ทีนี้ลองไปที่ตารางผลลัพธ์ แล้วกดคลิ๊กขวา Refresh ดู จะเห็นว่าผลลัพธ์อัปเดทแล้วววว

    วิธีใช้ Power Query ดึงข้อมูลจากไฟล์ Excel เดียวกัน โดยไม่ต้องแปลงเป็น Table ก่อน 146

    อย่างไรก็ตาม การสร้าง Dynamic Named Range ไว้ก่อนจะไม่สามารถเอาเข้า Power Query ได้โดยตรงด้วยวิธีที่ 1 (กด Get Data From Table/Range) แต่ยังสามารถทำด้วยวิธีที่ 2 ( สูตร = Excel.CurrentWorkbook() ) ได้อยู่ครับ

    และนี่ก็คือเทคนิคที่ผมอยากจะนำเสนอครับ หากใช้เทคนิคนี้จะทลายข้อจำกัดหลายๆ อย่างของการใช้ Power Query ไปได้เยอะเลย ดังนั้น มาใช้ Power Query กันเยอะๆ นะครับ ^^

  • เรื่องประหลาดเกี่ยวกับวันที่ของ Excel vs Power Query

    เรื่องประหลาดเกี่ยวกับวันที่ของ Excel vs Power Query

    หลายๆ คนน่าจะพอรู้อยู่ว่าใน Excel นั้นจะมองวันที่เป็นแค่ Format ของค่าที่แท้จริงที่เป็นเลขจำนวนเต็มธรรมดา โดยเริ่มจากเลข 1 คือวันที่ 1/1/1900 (ค.ศ.) พอวันเพิ่มขึ้น 1 วัน ค่าที่แท้จริงก็จะเพิ่มขึ้น 1 หน่วยด้วย โดยวันที่สุดท้ายที่ Excel รองรับคือ 31/12/9999 (ค.ศ.)

    แต่ว่าใน Power Query นั้นรองรับวันที่วันแรกได้เก่าถึง 1/1/0001 (ค.ศ.) ซึ่งจะไม่สามารถแสดงออกมาเป็นวันที่หรือตัวเลขใน Excel ได้เลย ส่วนวันที่สุดท้ายก็รองรับถึง 31/12/9999 (ค.ศ.) เช่นเดียวกับ Excel

    ความผิดเพี้ยนอยู่ที่ต้นปี 1900

    แต่ที่แปลกคือ ช่วงวันแรกๆ ของปี ค.ศ. 1900 นี่แหละ เจ้า Excel กับ Power Query จะมองเลขจำนวนเต็มเดียวกันเป็นคนละวัน!! โดยที่ความเพี้ยนนี้จะอยู่แค่ถึงสิ้น กพ. ปี ค.ศ. 1900 เท่านั้น (โชคดีไป)

    ผมลองทำตารางเปรียบเทียบให้ดูแล้วดังนี้

    เรื่องประหลาดเกี่ยวกับวันที่ของ Excel vs Power Query 147

    จะเห็นว่า

    • เลข 1 ใน Excel คือ 1/1/1900 แต่ PQ คือ 31/12/1899
    • เลข 60 ใน Excel คือ 29/2/1900 แต่ PQ คือ 28/2/1900
    • เลข 61 จะกลับมาเท่ากัน คือ 1/3/1900 ทั้งคู่!!

    จะเห็นว่าความเพี้ยนนี้เกิดจากวันที่ 29 กพ. นี่เอง ที่ Excel มองว่าปี 1900 มี 29 กพ. แต่ PQ มองว่าไม่มี 29 กพ.

    แล้วใครกันแน่ที่ถูกต้อง?

    ตามหลักการคร่าวๆ คือ ถ้าปี ค.ศ. หารด้วย 4 ลงตัวจะมี 29 กพ. ซึ่งถ้าคิดแบบนั้น 1900 ก็หาร 4 ลงตัว มันก็ควรมี 29 กพ. ใช่มั้ย?

    แต่จริงๆ แล้วหลักการมันมีเพิ่มละเอียดกว่านั้นอีก คือ ปีที่หารด้วย 100 ลงตัว แต่หารด้วย 400 ไม่ลงตัว จะไม่มี 29 กพ.

    แปลว่าปี 1900 ก็ต้องไม่มี 29 กพ. ต่างหาก! (นั่นคือ 1700, 1800, 1900, 2100, 2200, 2300 จะไม่มี 29 กพ. ทั้งหมดเลย) แปลว่า Excel มันเทียบตารางวันที่ผิดไปอยู่นิดนึงนั่นเอง

    สรุป

    การที่ปี 1900 ต้องไม่มี 29 กพ. แต่ใน Excel ดันมี คือสาเหตุที่ Power Query ต้องแก้เรื่องนี้ให้ถูกต้อง ใน PQ จึงต้องไปเริ่มเลข 1 ที่วันที่ 31/12/1899 แทนที่จะเป็น 1/1/1900 เหมือนกับ Excel และยอมให้ค่าวันที่ไม่เหมือนกันอยู่ 2 เดือน หลังจากนั้นก็จะเท่ากันทุกประการไปจนถึง 31/12/9999 นั่นเอง

    แปลว่าการดึงข้อมูลจาก Excel ที่มีวันที่ในช่วง 1/1/1900 – สิ้นกพ. 1900 จะต้องระวังว่าค่าวันที่อาจจะผิดเพี้ยนได้นะครับ (อย่างไรก็ตามเรื่องวัน จันทร์-อาทิตย์ ยังตรงกันอยู่ครับ)

  • แจกแบบฝึกหัดคณิตศาสตร์ประถม บวก ลบ คูณ หาร (V2)

    แจกแบบฝึกหัดคณิตศาสตร์ประถม บวก ลบ คูณ หาร (V2)

    คุณอยากให้ลูกหลานฝึกบวกลบ คูณ หาร ให้แม่นๆ แต่ไม่มีโจทย์ให้ทำใช่มั้ย?

    ถ้าใช่ ลองโหลดนี่เลย ผมทำ Template แบบฝึกหัดคณิตศาสตร์ ให้ Print แบบฝึกหัด พร้อมเฉลยให้ด้วย (สามารถฉีกเฉลยทิ้งได้ก่อนให้ลูกหลานทำ อิอิ) มีทั้งแบบฝึกหัดการบวก การลบ บวกลบผสมกัน การคูณ การหารลงตัว และ การหารแบบอาจจะไม่ลงตัว

    โดยใน Version 2 ผมแก้ให้แบบฝึกหัดการบวก ลบ คูณ ผมเปลี่ยนใหม่ให้เป็นแนวตั้งให้แล้วตาม Feedback ที่ได้รับมาครับ

    ที่พิเศษคือ กำหนดจำนวน Digit ของตัวเลขได้ และ สามารถกด F9 เพื่อ Random เลข ออกมาได้ตามจำนวน digit ที่ต้องการ (ปรับความยากง่ายได้ตามใจชอบ)

    แจกแบบฝึกหัดคณิตศาสตร์ประถม บวก ลบ คูณ หาร (V2) 148

    และ สามารถ Print ออกมาให้ลูกหลานทำได้เรื่อยๆ ไม่จำกัด !!

    นี่ครับ ผมลอง print ออกมาแบบนี้ได้เลย

    แจกแบบฝึกหัดคณิตศาสตร์ประถม บวก ลบ คูณ หาร (V2) 149
    แจกแบบฝึกหัดคณิตศาสตร์ประถม บวก ลบ คูณ หาร (V2) 150

    สามารถ Download ไฟล์แบบฝึกหัดคณิตศาสตร์ได้ที่นี่

    หมายเหตุ อย่าให้ทำเยอะจนเด็กเครียดเกินไปนะครับ จุดประสงค์เพื่อการฝึกฝน โดยเด็กเองควรจะเต็มใจฝึกด้วยนะ ^^

  • แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก

    บทความนี้เป็นภาคต่อจากบทความที่ผมเคย post ในปี 2014 (เกือบ 6 ปีมาแล้วเหรอเนี่ย!! ) ซึ่งเกี่ยวกับเรื่องลับที่หลายคนไม่รู้ใน Excel ซึ่งได้รับความสนใจอย่างสุดๆ (ใครยังไม่เคยอ่านก็ลองเข้าไปดูนะ)

    ตอนนี้ก็ขึ้นปี 2020 แล้ว ผมคิดว่าได้เวลาที่จะ post ภาค 3 เป็นของขวัญปีใหม่ให้กับทุกท่านในปี 2020 นี้เลยละกัน

    แล้ว 10 เรื่องที่ผมคิดว่าเจ๋ง แต่หลายคนไม่รู้ในช่วงนี้ มีอะไรบ้าง? มาดูกันเลย!! (บอกเลยว่าหลายอันนี่ Advance มากๆ นะ และบางอันอาจมีใน Excel version ใหม่ๆ หน่อยนะครับ)

    Secret 1: Flash Fill คือสุดยอดเครื่องมือขี้โกงที่ใช้ง่ายที่สุด

    Flash Fill คือ เครื่องมือที่สามารถเลียนแบบ Pattern ที่เราพิมพ์ให้เป็นตัวอย่างได้อย่างง่ายดาย โดยเครื่องมือนี้มีมาตั้งแต่ Excel 2013 เป็นต้นไป

    ยกตัวอย่างเช่น หากผมมีข้อมูลตามตัวสีดำ แล้วผมพิมพ์ตัวอย่างผลลัพธ์ที่ต้องการตามตัวสีแดงแล้วกด Enter

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 151

    จากนั้นเราแค่กดปุ่ม Ctrl+E เพื่อเรียกใช้ Flash Fill แค่นั้น Excel ก็จะจัดการเสกผลลัพธ์ให้เราเลยอย่างง่ายดาย

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 152

    Tips : ผมแนะนำว่าใส่ตัวอย่างบรรทัดที่ค่อนข้างเห็น Pattern ชัดเจนที่สุด (เช่น ไม่ควรไปใส่บรรทัด Braben.b เพราะมันอาจคิดว่า .b คือชื่อตัวแรก)

    และเราใส่ตัวอย่างมากกว่า 1 ตัวได้นะครับ เพื่อให้ Flash Fill ไม่สับสนว่าต้องการอะไรกันแน่

    Secret 2: แสดงสูตรจาก Cell ที่สนใจด้วย FORMULATEXT

    สมัยก่อนเวลาที่เราอยากจะเขียนสูตรลงใน Cell เราจะต้องใช้เครื่องหมาย ‘ นำหน้า เพื่อให้ Excel มองเป็น text เพื่อจะได้ไม่ต้องคำนวณจริงๆ

    แต่ใน Excel 2013 เป็นต้นมา มีฟังก์ชันชื่อ FORMULATEXT ช่วยทำหน้าที่นี้ได้อย่างง่ายๆ เช่น =FORMULATEXT(cell ที่ต้องการ) ได้เลย

    เช่น ผมใช้ FORMULATEXT ในช่อง E3 เพื่อให้แสดงสูตรจากช่อง B3 ดังนี้

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 153

    Secret 3: CELL ฟังก์ชันสารพัดประโยชน์

    ตอนแรกคิดว่าจะเขียนถึงฟังก์ชันใหม่ๆ อย่างเช่น

    • XLOOKUP ที่มาแทน VLOOKUP
    • TEXTJOIN ที่มาช่วยให้เชื่อมข้อความแบบมีตัวคั่นได้ง่ายมาก
    • IFS และ SWITCH ที่มาแทนการใช้ IF ซ้อนกันเยอะๆ

    แต่ว่าคิดว่ามีคนเขียนถึงฟังก์ชันพวกนี้เยอะแล้วและมันดันเป็นฟังก์ชันที่ต้องมี Excel version ที่ใหม่สุดๆ งั้นมาเล่าฟังก์ชันที่มีนานแล้วแต่หลายคนอาจจะไม่รู้ดีกว่า

    ฟังก์ชันที่จะมาเล่าในบทความนี้ก็คือฟังก์ชัน CELL ซึ่งมันสามารถดึงข้อมูลต่างๆ จาก Reference ที่ระบุได้มากมาย

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 154

    ซึ่งเราสามารถนำมาประยุกต์หาได้ทั้งชื่อไฟล์และชื่อชีทที่เขียนสูตรอยู่ได้ (แต่ต้อง save ไฟล์ก่อนนะ) เช่น

    สมติว่าผม save ไฟล์ชื่อ testcell.xlsx ไว้ที่ folder d:\thepexcel จะเป็นแบบนี้

    ชื่อชีท

    =MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)

    ชื่อไฟล์

    =MID(CELL("filename",A1),FIND("[",CELL("filename",A1))+1,FIND("]",CELL("filename",A1))-1-FIND("[",CELL("filename",A1)))
    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 155

    แต่ที่หลายคนไม่รู้ก็คือ หากเราไม่ระบุช่อง reference มันจะอ้างอิงไปที่ Cell ล่าสุดที่มีการ Enter ข้อมูลลงไปได้โดยอัตโนมัติ เช่น

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 156

    Secret 4: Power Query คือสุดยอดเครื่องมือดัดแปลงข้อมูลให้อยู่ในรูปแบบ Database

    หากเราต้องการจะสรุปข้อมูลด้วย Pivot Table หนึ่งในขั้นตอนที่ควรจะต้องทำก่อนคือเตรียมข้อมูลให้อยู่ในรูปแบบ Database ซะก่อน

    สมมติว่าผมต้องการใช้ Pivot Table สรุปข้อมูลที่ดึงจากเว็บ ข้อมูลประชากรไทยรายจังหวัดในเว็บสำนักงานสถิติแห่งชาติหน้านี้ http://statbbi.nso.go.th/staticreport/page/sector/th/01.aspx

    ในนั้นจะมีไฟล์ จำนวนประชากรจากการทะเบียน จำแนกตามอายุ เพศ และจังหวัด พ.ศ. 2561 ซึ่งเป็นไฟล์ Excel หน้าตาแบบนี้

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 157
    http://statbbi.nso.go.th/staticreport/Page/sector/TH/report/sector_01_11101_TH_.xlsx

    ปกติแล้วคำสั่ง Get Data from Web ใน Power Query จะใช้ดึงข้อมูลจากหน้าเว็บไซต์ได้ แต่ว่าจริงๆ แล้วมันใช้ดึงไฟล์ที่วางไว้ในเว็บได้โดยตรงโดยไม่ต้อง save ไฟล์ออกมาก่อนก็ได้นะ

    ยกตัวอย่าง เช่น เราสามารถใช้ Get Data From Web ดึงข้อมูลไฟล์นั้นมาได้เลย โดยไม่ต้อง save ออกมาด้วยซ้ำ

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 158

    จากนั้นใส่ URL ของไฟล์ที่ต้องการลงไป เช่น http://statbbi.nso.go.th/staticreport/Page/sector/TH/report/sector_01_11101_TH_.xlsx แล้วกด ok

    แล้วเลือกที่ข้อมูล แล้วกด Transform หรือ Edit ได้เลย

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 159

    โดยที่พอดึงข้อมูลแล้วอยากจะได้ข้อมูลประชากรแต่ละช่วงอายุเป็นรายจังหวัดให้ผลลัพธ์มีหน้าตาแบบนี้

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 160

    หากเราใช้สูตรแก้ปัญหานี้จะยุ่งยากมาก แต่ถ้าหากใช้ Power Query แทน เรื่องนี้ก็จะง่ายกว่ามาก ดังนี้

    หลังจากกด Transform/Edit แล้วเราสามารถทำตามขั้นตอนดังต่อไปนี้ เพื่อให้ผลลัพธ์ออกมาได้ตามที่เราต้องการได้เลย (รายละเอียดวิธีทำพร้อมรูปประกอบดูได้ที่นี่)

    1. ปรับเรื่องหัวตารางให้เหมาะสม เช่น Remove Top Row ที่ไม่เกี่ยวออก / Use First Row as Header เพื่อปรับหัวตาราง
    2. ตัดคอลัมน์ที่ไม่ต้องการทิ้ง โดยตัดคอลัมน์ ภาค และ รวม ทิ้ง
    3. ถมช่องว่างในคอลัมน์จังหวัด
    4. จากนั้น Filter เอาบรรทัดที่ไม่ต้องการออก
    5. พลิกเอาอายุหลายๆ คอลัมน์ ให้มารวมกันในคอลัมน์เดียวด้วย Unpivot ซึ่งเครื่องมือนี้แหละคือขั้นตอนเด็ดสุดที่เครื่องมืออื่นทำยากมาก แต่ Power Query ง่ายมากๆ
    6. เปลี่ยนชื่อคอลัมน์ให้เหมาะสม โดยการดับเบิ้ลคลิ๊กที่หัวตารางแล้วเปลี่ยนได้เลย
    7. ตัดอายุให้เหลือเป็นแค่ตัวเลข
    8. เปลี่ยนประเภทข้อมูลอายุ ให้เป็นตัวเลข แล้ว Replace Error ด้วยค่าว่าง
      ตอนนี้เราจะได้ข้อมูลที่มีหน้าตาตามต้องการแล้ว
    9. Load ข้อมูลผลลัพธ์ออกไปใช้ ทีนี้เราก็สามารถเอาเข้า Pivot Table ได้แล้วล่ะ!! โดยไปที่ Home -> Close & Load To… ได้เลย
    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 161

    แค่นี้เราก็จะมีอิสระในการพลิกข้อมูลใน Pivot มากขึ้น รวมถึงจะ Group ช่วงอายุตัวเลข โดยคลิ๊กขวา -> Group ก็ย่อมทำได้ ซึ่งนี่คือความดีของการทำข้อมูลให้เป็นเชิง Database ซะก่อนนั่นเองครับ

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 162

    Secret 5: พลัง Load Power Query ออกมาเป็น Table แล้ว เราสามารถเขียนสูตร Excel ใน Table นั้นต่อได้เลย

    สมมติว่าเราใช้ Power Query สร้างผลลัพธ์อะไรซักอย่างออกมาได้ เช่น ข้อมูลจังหวัดเมื่อกี๊ ถ้าผมเปลี่ยนการ Load ออกมาให้เป็น Table ก่อน โดยคลิ๊กขวา Load to… –> Table

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 163

    จะได้หน้าตาแบบนี้

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 164

    เราสามารถสร้างคอลัมน์เพิ่มไปด้านขวาได้เลย เช่น เขียนสูตรว่า ถ้าเป็นกรุงเทพ ให้เขียนว่าเมืองหลวง ก็ทำได้ (จริงๆ อันนี้ทำใน Power Query เลยก็ได้นะ)

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 165

    หรือบางทีอยากใช้ฟังก์ชันใน Excel จัดการมากกว่า เช่น กรณีที่เป็นสูตรทางการเงิน เช่น FV ที่ใช้คำนวณ Future Value ใน Power Query จะไม่มีสำเร็จรูปให้ใช้ ดังนั้นมาใช้ใน Excel อาจจะง่ายกว่า

    เช่น จะ Forecast จำนวนประชากรในอีก 10 ปีข้างหน้า โดย assume ว่า growth คือ -0.3% ต่อปี (ผมมั่วนะ จริงๆ growth แต่ละช่วงอายุจะไม่เท่ากันหรอก)

    ก็ใส่สูตรได้ว่า =FV(-0.3%,10,0,-[@จำนวนประชากร])

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 166

    ความพิเศษคือ เรายังคงสามารถแก้ Query ที่ทำไว้ แล้วยัง Refresh ผลลัพธ์ได้ โดยคอลัมน์ใหม่ที่เราสร้างข้างนอกไม่หายไป เจ๋งป่ะล่ะ!!

    Secret 6: Power Query สามารถอ่านไฟล์ทั้งหมดใน Folder และ Sub Folder ได้นะ

    นอกจาก Power Query จะใช้ในการรวมรวม/ดัดแปลงข้อมูลแล้ว มันยังนำมาประยุกต์ใช้ได้หลายอย่าง เช่น การอ่านข้อมูลไฟล์ใน Folder เป็นต้น (โดยไม่จำเป็นต้องเอา content ในไฟล์มาใช้)

    เช่น ผมสามารถใช้ Power Query list ไฟล์ pdf ที่ต้องการใน Folder ตามที่กำหนดได้

    เริ่มต้นโดยให้ Get Data from Folder

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 167

    Browse เลือก Folder ที่ต้องการ แล้ว ok แล้วกด Transform Data

    จากนั้นเราจะ Filter หรือ Transform ยังไงก็แล้วแต่ เช่น เอาบางส่วนของชื่อไฟล์มาก็ย่อมทำได้ครับ

    เคสของผมเอง เร็วๆ นี้ก็ใช้วิธีนี้ดึงข้อมูลว่าผมทำใบเสร็จรับเงินสำหรับรายการที่ซื้อ Excel Power Up! แล้วหรือยัง โดยใช้วิธีนี้ดึงใบเสร็จ .pdf ต่างๆ มาเช็คโดย map กับเลข order ในชื่อไฟล์ได้ครับ

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 168

    Secret 7: วิธีทำให้ Pivot Table อัปเดทข้อมูลอัตโนมัติ ทุกๆ xx นาที

    คงปฏิเสธไม่ได้ว่า Pivot Table คือเครื่องมือสรุปข้อมูลที่ใช้ง่ายและทรงพลังมากที่สุดใน Excel อย่างไรก็ตามปัญหาหนึ่งที่กวนใจใครหลายๆ คนก็คือ เรื่องของการอัปเดทข้อมูลที่ต้องมาคอยกด Refresh อยู่เรื่อยๆ

    ถึงแม้ว่าใน Pivot Table Option จะมีให้เลือก Auto Refresh ตอนเปิดไฟล์ Excel ขึ้นมาแต่ก็ดูเหมือนว่ามันจะยังไม่ได้ดั่งใจใครหลายๆ คน

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 169

    หากเป็นสมัยก่อน เราอาจต้องเขียน VBA เพื่อให้ Excel ทำการ Refresh Pivot Table ด้วยความถี่ที่มากกว่านั้น แต่โชคดีที่ในยุคนี้เราสามารถใช้ Power Query เป็นแหล่งข้อมูลให้กับ Pivot Table ได้ และตัว Query เองมี Option ให้ Refresh ทุกๆ xx นาทีได้ด้วย!

    วิธีการทำคือสร้าง Query จาก Table ต้นฉบับ (โหลดไฟล์ประกอบได้ที่นี่)

    โดยเลือกข้อมูลต้นฉบับ แล้วกด Get Data From Table/Range (ถ้าข้อมูลยังไม่ได้เป็น Table มันจะแปลงเป็น Table ซะแล้วกด ok )

    เมื่อปรับหน้าตาใน Power Query Editor ตามต้องการเสร็จแล้ว ให้กด Home –> Close & Load to… –> Pivot Table แล้วนำไปสร้าง Pivot Table ได้เลย

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 170

    Tips : ถ้าใครกด Close & Load To… แล้วไม่มี Pivot Table ให้เลือก ก็ให้เลือก Only Create Connection ไปก่อน แล้วค่อยสร้าง Pivot Table จาก External Data ที่เป็น Query นั้นๆ ได้ โดยกด Insert->Pivot Table แล้วเลือก Choose Connection ตามรูป

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 171

    ความพิเศษอยู่ที่เราสามารถคลิ๊กขวาที่ Query ที่สร้างขึ้น แล้วเลือก Properties เพื่อตั้งค่าให้มัน Auto Refresh Query ทุกๆ xx นาทีได้

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 172

    และเมื่อ Query Refresh ปุ๊ป Pivot Table ก็จะถูก Refresh ตามไปด้วยโดยอัตโนมัติครับ!! นี่แหละวิธีทำให้ Pivot Refresh อัตโนมัติได้!!

    Secret 8: Pivot Table เพื่อนับข้อมูลแบบไม่ซ้ำกัน (Distinct Count)

    ปกติแล้วเวลาเราลากข้อมูลที่เป็นข้อความลงตาราง Pivot Table มันจะสรุปข้อมูลให้เราด้วยวิธีการ Count (นับ) โดยอัตโนมัติ เช่นแบบนี้ (ใช้ไฟล์ประกอบเดิม คือ โหลดไฟล์ประกอบได้ที่นี่)

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 173

    ซึ่งเลข 28 ที่ผม Highlight สีเหลืองไว้ หลายคนจะเข้าใจว่า มันคือเลขที่เกิดจาก Sales ข ขายหนังสือให้ลูกค้าได้ 28 คน… ซึ่งในความเป็นจริงมันไม่ใช่อย่างนั้นซะทีเดียว เพราะหากเราดับเบิ้ลคลิ๊กที่เลข 28 เพื่อเข้าไปดูว่าคำนวณมาจากรายการไหนบ้าง จะพบว่ามีลูกค้าหลายรายที่ซ้ำกัน

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 174

    ดังนั้นหากเราต้องการจะนับลูกค้าแบบไม่ซ้ำ ต้องใช้ Pivot Table โหมด Data Model โดยให้ไปที่ Field List ด้านขวา เลื่อนลงล่างสุด แล้วคลิ๊ก More Tables…

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 175

    จากนั้นให้กด Yes แล้วมันจะสร้าง Pivot Table ตัวใหม่ใน Sheet ใหม่ (ที่หน้าตาเหมือนเดิมทุกประการ)

    ให้เราคลิ๊กขวาที่ Count of ลูกค้า แล้วเปลี่ยน Summarized Values By -> More Option –> Distinct Count

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 176

    จะเห็นว่าคราวนี้ผลลัพธ์ที่ได้เหลือเพียง 10 คนที่ไม่ซ้ำกันแล้ว!!

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 177

    Secret 9: Pivot Table สามารถแสดง Values เป็นข้อความได้ด้วยนะ

    ปกติแล้วใน Pivot Table โหมดปกติ จะสรุปข้อมูลได้แค่ตัวเลขเท่านั้น เช่น การ Sum, Count, Average, Max, Min แต่มันไม่มีแบบไหนเลยที่จะแสดงข้อความออกมาได้

    แต่ถ้าเราใช้ Pivot Table โหมด Data Model (แบบเดียวกับตัวอย่างข้างบน) มันจะสามารถเขียนผลสรุปด้วยสิ่งที่เรียกว่า Measure ซึ่งสามารถเขียนสูตรที่หลากหลายมากๆ โดยใช้ภาษา DAX ในการเขียน (ภาษาเดียวกับ Power BI)

    ซึ่งภาษา DAX นี้มีข้อดีมากๆ คือ เป็นภาษาที่มีฟังก์ชันเหมือน Excel มากๆ ทำให้ลดเวลาในการเรียนรู้ลงได้มาก อย่างไรก็ตามก็ยังมีอีกหลายเรื่องที่ต้องศึกษาเพิ่ม (อีกเยอะมากๆ)

    ภาษานี้มันมีฟังก์ชันที่ Excel ไม่มีด้วย เช่น CONCATENATEX ซึ่งสามารถเอาข้อความมาต่อกันได้ เช่น ผมอยากแสดงว่าลูกค้าซื้อสินค้าอะไรบ้างโดยให้คั่นด้วยเครื่องหมาย / ก็สามารถทำได้ดังนี้ (ใช้ไฟล์ประกอบเดิม คือ โหลดไฟล์ประกอบได้ที่นี่)

    ให้คลิ๊กขวาที่ชื่อตารางใน Field List ของ Pivot โหมด Data Model แล้วเลือก Add Measure…

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 178

    ซึ่งในนั้นจะมีหน้าต่าง Measure ขึ้นมาให้เราสามารถตั้งชื่อ และกรอกสูตรคำนวณของ Measure (ด้วยภาษา DAX) ได้เลย ว่า

    =CONCATENATEX(DISTINCT(SalesTX[สินค้า]),[สินค้า],"/")
    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 179

    ตรงนี้คุณอาจยังอ่านสูตร DAX ไม่เข้าใจ (และบทความนี้ก็จะไม่ได้สอนด้วย) แต่วัตถุประสงค์ที่ผมเอามาโชว์แค่จะบอกว่า Measure นั้นมีความ Flexible สูงมากๆ ซึ่งช่วยให้ Pivot Table สามารถแสดงผลช่อง Values ออกมาเป็นข้อความก็ได้นะครับ

    ดังนั้นใครอยากปลดปล่อยประสิทธิภาพของ Pivot Table ออกมาให้เต็มที่ก็อย่าลืมหันมาศึกษาภาษา DAX เพิ่มด้วยนะ เรียกได้ว่าเรียนรู้ทีเดียวใช้ได้ทั้ง Excel และ Power BI เลยนะ

    Secret 10: เราสามารถ Plot กราฟแผนที่ใน Excel ได้นะ

    นอกจาก Power BI ที่มีกราฟแผนที่เจ๋งๆ แล้ว ใน Excel Version ใหม่ๆ อย่าง Excel 365 หรือ Excel 2019 ก็สามารถทำกราฟแผนที่ได้เช่นกัน โดยใช้ชื่อจังหวัดภาษาไทยได้เลยด้วย

    สมมติผมมีข้อมูลประชากรรายจังหวัดในข้อที่ผ่านมา เราสามารถนำไป Plot กราฟประเภท Map ได้ แต่ว่ามันไม่สามารถสร้างจาก Pivot Table ได้โดยตรงนะ (อันนี้คือข้อเสียของ Pivot Table เมื่อเทียบกับ Power BI ที่ Visual มีหลายแบบมากกว่า)

    ให้เรา Copy ข้อมูลจาก Pivot ออกมาเป็น Range ธรรมดาก่อน แล้วกด Insert -> Maps –> Filled Maps ก็จะได้ตามรูปเลย

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 180

    สำหรับคนที่มี Excel 365 แต่ไม่มีแผนที่ให้เลือก หรือ Power Query มีเครื่องมือน้อยกว่าของผม ลองเช็คการอัปเดท version ว่ามีการ update ล่าสุดแล้วหรือยัง? อาจดูแนวทางในข้อถัดไปนี้ได้ครับ

    ของแถมสุดพิเศษ : วิธีเปลี่ยน Excel 365 ให้มีการอัปเดทถี่ขึ้นเป็นรายเดือน (Monthly Channel)

    หากคุณใช้ Office 365 แล้วคิดว่าจะได้รับการอัปเดทล่าสุดเสมอ บางทีมันอาจจะไม่ใช่อย่างที่คุณคิดซะทีเดียว… เนื่องจากบางท่านอาจได้รับการอัปเดทอาจแบบครึ่งปีครั้ง แทนที่จะเป็นเดือนละครั้งก็ได้ (แบบนั้นก็ช้าไปเกือบ 6 เดือนเลยนะ!!)

    การอัปเดทช้าอาจทำให้ Power Query มีเครื่องมือหรือมีความสามมารถน้อยกว่าของผมได้นะ

    วิธีการดูว่าการอัปเดทของเราเป็นแบบไหนให้ไปดูใน File –> Account ครับ

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 181

    วิธีเปลี่ยนให้สามารถรับการอัปเดททุกเดือน สามารถทำได้ตามคำแนะนำของเว็บนี้เลยครับ https://docs.microsoft.com/en-us/office365/troubleshoot/updates/switch-channel-for-office-365?fbclid=IwAR2GIchDKqOg84bHUnRrNOxDOgqfm6oPfSeBwkPGFPt7sPjQKtHM7cORWGI

    หรือตามเว็บนี้ก็ได้ https://www.solver.com/switching-office-365-monthly-update-channel

    ถ้าเป็นคอมพ์บริษัท ผมแนะนำให้ทาง IT ทำให้นะครับ เพราะเราทำเองไม่น่าจะได้ และอาจจะไม่ปลอดภัยครับ

    ถ้าใครขี้เกียจทำตามในเว็บก็ใช้วิธีลัดอันนี้ได้เลยนะ

    1. สามารกโหลดไฟล์นี้ไปได้เลย ไฟล์ชื่อ updateo365.bat ซึ่งเป็น bat ไฟล์ที่ทำมาจากขั้นตอนในเว็บนะครับ

    2. คลิ๊กขวาที่ไฟล์ updateo365.bat ที่โหลดไป แล้วเลือก Run as administrator

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 182

    3. เข้า Excel –> File –> Account –> Update option –> Update Now จบ

    แฉ 10 ความลับของ EXCEL ภาค3 : เปิดโลก Excel ใบใหม่ที่หลายคนไม่รู้จัก 183

    และทั้งหมดนี่ก็คือ 10 ความลับของ Excel ยุคใหม่ๆ ที่ทำอะไรได้เยอะแยะมากกว่าที่คุณเคยรู้ หากอ่านแล้วสงสัยตรงไหนก็ Comment ถามได้เลยนะครับ

    ***==***==***==***==***==***
    เนื่องในโอกาสวันขึ้นปีใหม่ ขอสุขสันต์วันปีใหม่ Happy New Year 2020 ถึงแฟนเพจทุกคนด้วยนะครับ
    .
    สำหรับปีที่ผ่านมา รวมถึงปีก่อนหน้านั้นด้วย ผมอยากจะขอบคุณทุกท่านที่ช่วยสนับสนุนทางเทพเอ็กเซลมาโดยตลอด ทั้งเข้ามาอ่าน มาช่วยบอกแต่ ช่วยอุดหนุนหนังสือทั้ง 3 เล่มของผม (บางคนมีครบ 3 เลย ดีใจมากๆ)
    .
    ในปี 2020 นี้ผมสัญญาว่าจะมีอะไรเจ๋งๆ จากเทพเอ็กเซลออกมามากมายแน่นอน เดี๋ยวจะมีการประกาศอีกทีนะครับ
    .
    สุดท้ายนี้ขอให้ทุกท่านมีความสุข และสามารถพัฒนาความสามารถของตนเองให้เก่งขึ้นได้ตามต้องการครับ ^^

    ***==***==***==***==***==***

    Facebook Group : Power Query Thailand

    This image has an empty alt attribute; its file name is cover-1024x534.jpg
    Facebook Group : Power Query Thailand

    ผู้ที่สนใจ Power Query อย่างคุณที่มาอ่านบทความนี้ ผมขอเชิญชวนเข้ากลุ่มปิด Power Query Thailand ได้ตาม Link นี้ครับ

  • ตัวอย่างปฏิทินใน Power BI Deskstop มี demo ให้กดเล่นได้ (Power BI Calendar)

    ตัวอย่างปฏิทินใน Power BI Deskstop มี demo ให้กดเล่นได้ (Power BI Calendar)

    ก่อนหน้านี้ทำปฏิทินไปใน Excel ซึ่งมี Effect ได้ไม่สะใจ เลยลองมาทำใน Power BI Desktop ให้ดูว่าออกมาประมาณไหน

    ลองกดแบบ Full Screen ได้ที่ icon ขวาล่างนะ

    ปล. ใส่รูปไปแค่เดือน 12 กับเดือน 8 นะ ทำให้ดูเป็น concept เฉยๆ

    ใครอยากให้มันทำอะไรเพิ่มได้ comment บอกมาได้เลย เดี๋ยวจัดให้

  • วิธีสร้างปฏิทินใน Excel ด้วย Pivot Table ฉบับเก๋ไก๋ขึ้น (Excel Calendar with Pivot Table)

    วิธีสร้างปฏิทินใน Excel ด้วย Pivot Table ฉบับเก๋ไก๋ขึ้น (Excel Calendar with Pivot Table)

    ก่อนหน้านี้ผมได้ทำคลิปวีดีโอแสดงวิธีสร้างปฏิทินใน Excel (Excel Calendar) ด้วย Pivot Table แบบง่ายๆ กันไปแล้วตามนี้

    ทีนี้ ผมได้ไปเห็นการสร้างปฏิทินด้วยสูตรของ Excel Wizard มา แล้วมันมีสีแดงตรงวันหยุดด้วย! ถ้างั้นผมก็จะทำให้ปฏิทินของผมมีวันหยุดบ้าง เดี๋ยวสวยสู้ไม่ได้ 555

    Download ไฟล์ประกอบ

    ก่อนอื่นเราไปเตรียมตารางวันหยุดไว้ก่อน ซึ่งผมใช้ Power Query ทำไว้ให้ใน Excel ปฏิทินแล้ว โหลดได้ที่นี่เลย

    พอได้ไฟล์แล้วตอนแรกหน้าตาจะเป็นแบบนี้

    วิธีสร้างปฏิทินใน Excel ด้วย Pivot Table ฉบับเก๋ไก๋ขึ้น (Excel Calendar with Pivot Table) 184

    ปรับ Field Value ให้เป็นวันที่จริงๆ

    เดี๋ยวเราจะเปลี่ยน Field ที่ใช้สรุปใน Pivot Table จาก Sum of เลขวัน ให้กลายเป็น SUM of Date แทนครับ ซึ่งแต่ละช่องจะหลายเป็นเลข 4 หมื่นกว่าๆ (ซึ่งคือค่าที่แท้จริงของข้อมูลวันที่ใน Excel ) ดังนี้

    วิธีสร้างปฏิทินใน Excel ด้วย Pivot Table ฉบับเก๋ไก๋ขึ้น (Excel Calendar with Pivot Table) 185

    ปรับ Format ให้เห็นแค่วัน

    จากนั้นให้เราคลิ๊กขวาที่เลข 4 หมื่นกว่าซักช่องนึง ให้เลือก Number Format… แล้วใส่ Custom format เป็นตัว d (ย่อมาจาก day)

    วิธีสร้างปฏิทินใน Excel ด้วย Pivot Table ฉบับเก๋ไก๋ขึ้น (Excel Calendar with Pivot Table) 186

    พอ ok จะทำให้ Format จากเลข 4 หมื่นกว่าๆ กลายเป็นแค่เลขวัน เหมือนตอนแรกสุด (แต่ค่าที่แท้จริงคือวันที่ ซึ่งคือ 4 หมื่นกว่าๆ)

    วิธีสร้างปฏิทินใน Excel ด้วย Pivot Table ฉบับเก๋ไก๋ขึ้น (Excel Calendar with Pivot Table) 187

    ใส่ Conditional Format ให้แสดงวันหยุดเป็นสีแดง

    คราวนี้แหละ เราจะสามารถใช้ Conditional Formatting เพื่อ mark วันหยุดได้แล้ว โดยเลือกวันที่ในปฏิทินช่อง B6 (ซ้ายบนสุด) แล้วไปที่ Home –> Conditional Formatting –> New Rule แล้วเลือกดังรูป

    วิธีสร้างปฏิทินใน Excel ด้วย Pivot Table ฉบับเก๋ไก๋ขึ้น (Excel Calendar with Pivot Table) 188

    ซึ่งเราใช้หลักการใส่สูตรเอง ว่า

    =ISNUMBER(MATCH(B6,Holiday!$A:$A,0))

    ความหมายคือ ให้หาข้อมูลในช่อง B6 จากคอลัมน์แรกในชีท Holiday ถ้าเจอ (ผลลัพธ์จะเป็นตัวเลข) จะใส่ Format สีแดง ซึ่งเราจะไม่ Fix $ ที่ B6 เพื่อให้มันวิ่งครอบทั้งตารางปฏิทินได้

    แค่นี้เราก็จะได้วันหยุดสวยๆ มาเล่นแล้วล่ะ!!

    วิธีสร้างปฏิทินใน Excel ด้วย Pivot Table ฉบับเก๋ไก๋ขึ้น (Excel Calendar with Pivot Table) 189

    หลังจากนี้ จะเอาไปประยุกต์อย่างอื่นอีกก็ได้ เช่น วันพระวันเกิดแฟนเป็นสีชมพู 555 ซึ่งเราใส่ Conditional Format พร้อมกันหลายอันได้เลยครับ

    ใส่ Format ธรรมดาๆ โง่ๆ บ้างก็ได้

    และถ้าอยากให้วันเสาร์อาทิตย์มีพื้นเป็นสีเหลือง เราก็ลากครอบพื้นที่แล้วใส่สีเหลืองได้เลยครับ

    วิธีสร้างปฏิทินใน Excel ด้วย Pivot Table ฉบับเก๋ไก๋ขึ้น (Excel Calendar with Pivot Table) 190

    เปลี่ยนเดือนมันก็ใช้ได้นะ

    วิธีสร้างปฏิทินใน Excel ด้วย Pivot Table ฉบับเก๋ไก๋ขึ้น (Excel Calendar with Pivot Table) 191
  • วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม

    ผมได้คำถามทาง Inbox ถึงวิธีการใช้ Excel สรุปตารางการใช้ห้องประชุม ว่าวันไหนมีประชุมช่วงไหนบ้าง โดยข้อมูลที่ได้คือเริ่มประชุมกี่โมง จบกี่โมง อยากรู้ว่าในช่วงเวลาไหนของวันไหน มีการใช้ห้องประชุมบ้าง โดยแบ่งช่วงทีละ 1 ชม. ผมคิดว่าคำถามน่าสนใจดี เลยขอเอามาทำเป็นบทความดีกว่าครับ

    ในบทความนี้ผมจะขอเพิ่มความซับซ้อนเข้าไปเล็กน้อย ก็คือ จะให้สามารถมีได้หลายห้องประชุมด้วย จะได้เหมือนจริงมากขึ้นนะครับ

    ใช้สูตรเพื่อเตรียมข้อมูลเบื้องต้น

    ก่อนอื่นเลย เรามีข้อมูลดิบดังนี้

    ห้องประชุมStartFinish
    11/10/2019 5:251/10/2019 7:00
    11/10/2019 7:251/10/2019 7:55
    12/10/2019 7:202/10/2019 8:00
    12/10/2019 9:202/10/2019 10:00
    12/10/2019 10:202/10/2019 15:10
    21/10/2019 6:001/10/2019 9:00
    21/10/2019 7:051/10/2019 7:35
    22/10/2019 9:002/10/2019 14:55

    โดยที่ข้อมูลบันทึกเป็นวันที่และเวลาได้ถูกต้องแล้วตามการตั้งค่าใน control panel ของตัวเองซึ่งของผมตั้งเป็น วัน/เดือน/ปี

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 192

    หากเราต้องการเวลาว่าประชุมไปกี่นาที นี่ง่ายมาก นั่นคือเอาเวลาจบ ลบ เริ่ม ซึ่งเลขที่ออกมาจะมีหน่วยเป็นวัน

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 193

    หากเราอยากทำให้เลขเป็นหน่วยนาที เราก็เอาไปคูณ 24*60 แค่นั้นเอง

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 194

    เดี๋ยวเราจะสร้างคอลัมน์ใหม่เพื่อแยกวันที่กับเวลาออกจากกัน โดยใช้ INT มาช่วยในการแยกวันดังนี้ครับ

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 195

    และใช้ช่องเดิมลบ INT ก็จะได้เวลาครับ (เป็นวิธีคำนวณแบบคร่าวๆ ซึ่งจะผิดไปเล็กน้อยจากการคำนวณแบบ Floating Point ใน Excel แต่ไม่ต้องซีเรียสครับ)

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 196

    ส่วนเวลาจบก็ทำเหมือนกัน

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 197

    จากนั้นเพื่อไม่ให้งง เราจะเปลี่ยน Number Format เวลาเริ่มกับเวลาจบ ให้เป็นเวลาครับ

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 198

    ต่อไปเราจะทำการแบ่งเวลาออกเป็นช่วงๆ ทุกชั่วโมง โดยสร้างคอลัมน์ใหม่ดังนี้ครับ โดยเขียนแค่ 0:00 ตัวเดียว แล้วลาก Fill Handle ไปทางขวาเลย (โดยเราจะถือว่า ช่อง 0:00 คือเริ่มที่ 0:00 นั่นคือเป็นช่วง 0:00-1:00 ละกันครับ)

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 199

    ต่อไป ในช่อง H2 เราจะเขียนสูตร IF เพื่อเช็คว่ามีการใช้ห้องประชุมในช่อง H2 นั่นมั้ย? ถ้ามีเราจะใส่เลข 1 ถ้าไม่มีจะใส่เลข 0 ครับ

    หลักการคิดก็คือ ต้องตรงทั้งสองเงื่อนไขนี้ ดังนั้นจะใช้ AND มาช่วย

    • เวลาเริ่มต้องเกิดน้อยกว่าหรือเท่ากับเวลาจบช่องนั้น หรือให้น้อยกว่าเวลาเริ่มช่องถัดไป นั่นคือ F2<I1
    • เวลาจบต้องมากกว่าหรือเท่ากับเวลาเริ่มช่องนั้น G2>=H1

    ยกตัวอย่างเช่น ถ้าเริ่ม 10:20 จบ 15:10

    • ถ้าเป็นตอน 9:00 ก็จะผิดตั้งแต่เงื่อนไขเวลาเริ่ม แปลว่าไม่ติ๊ก
    • ถ้าเป็นตอน 10:00 จะตรงตามเงื่อนไขทั้งคู่ แปลว่าติ๊ก

    ดังนั้นใน H2 เราจะใส่สูตรว่า =AND( F2<I1 , G2>=H1 )*1
    (คูณ 1 เพื่อแปลง TRUE เป็น 1 FALSE เป็น 0)

    และเนื่องจากเราจะ Copy ไปทั้งตาราง ดังนั้นจะต้องใส่ $ fix ตำแหน่งดังนี้

    =AND( $F2<I$1 , $G2>=H$1 )*1

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 200

    จากนั้น Copy ไปทั้งตาราง

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 201

    จากนั้นใส่ Conditional Format -> Highlight Cell Rule -> Equal to 1 ให้เป็นสีแดง จะได้เห็นชัดๆ จะได้ตรวจสอบได้ง่ายหน่อยว่าแต่ละบรรทัดถูกต้องรึยัง?

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 202
    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 203

    Pivot Table ตรงๆ แบบไม่ใช้ Power Query

    พอได้ข้อมูลดังนี้แล้วก็สามาถเอาเข้า PivotTable ได้เลย แต่ว่ามันจะยากเพราะต้องดึงข้อมูลเวลาแต่ละช่วงมาที่ Value ถึง 24 อันแบบนี้

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 204

    จากนั้นลาก Sigma Value จาก column มาไว้ที่ Row จะได้เห็นชัดขึ้น

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 205

    แล้วเอาห้องประชุมไว้ที่คอลัมน์แทน แล้วเอาวันนี้ไปไว้ที่ Filter/Slicer/Timeline ก็ได้ จากนั้นเปลี่ยน Report Layout เป็น Tabular Form จะได้เห็นชัดๆ

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 206

    ซึ่งถามว่าผลลัพธ์วิธีข้างบนถูกมั้ย? มันก็ถูกนะ แต่จะเจ๋งกว่าถ้าช่วงเวลามันเป็น Field ที่เอามาพลิกเล่นไปมาได้ แทนที่จะเป็น Sum of 24 อันแบบนี้

    ดังนั้นเพื่อเราจะใช้ Power Query ช่วยในการตบคอลัมน์เวลา 24 อัน ให้มารวมเป็นคอลัมน์เดียวแต่มีหลายบรรทัดแทน

    ใช้ Power Query ตบข้อมูลให้เป็นลักษณะ Database มากขึ้น

    ตอนแรกที่ผมลองทำ Get Data from Table/Range จากข้อมูลที่เราทำไว้ ปรากฏว่า ใน Power Query เครื่องผมมันน่าจะมี Bug ทำให้เห็นเลขทุกอย่างเป็น 0 แทนที่จะเป็น 1 กับ 0 (หากเราใช้วิธี Get Data from Table/Range ตรงๆ)

    ดังนั้นผมเลยเปลี่ยนวิธี Get Data เล็กน้อย เป็นการ Get Data จากไฟล์ Excel ตัวเองแทน ซึ่งหากจะใช้วิธีนี้ต้อง Save ไฟล์ Excel ของเราไว้ซะก่อนครับ

    จากนั้นไปที่ Get Data -> From File -> From Workbook แล้วเลือก File ตัวเอง -> เลือก Sheet1 ที่มีตารางที่เราทำ -> กด Transform Data

    จะได้หน้าตาแบบนี้มา

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 207

    จากนั้นลบ Step Changed Type ด้านขวาออกไปซะ

    พอเลื่อนไปดูคอลัมน์ด้านขวาๆ ปรากฏว่ามันดันใส่วันที่มาในช่องเวลาของเราซะงั้น

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 208

    แต่ไม่เป็นไรเดี๋ยวเราใช้วิธี Transpose เพื่อกำจัดมันได้ โดยให้ไปที่ Transform -> Transpose จะได้แบบนี้

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 209

    จากนั้นเลือกคอลัมน์แรก แล้ว Split Column by Delimiter แล้วเลือกแบบใช้ space จะได้ดังนี้

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 210

    จากนั้นเราจะทำการถมช่องว่างในคอลัมน์ 1.2 โดยการ Transpose กลับมาก่อน แล้วเลือกคอลัมน์ 1-7 แล้วFill Down

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 211

    จากนั้นให้ลบแถวแรกออกไปซะ โดยไปที่ Home -> Remove Rows -> Remove Top Rows แล้วใส่เลข 1 เพราะจะเอาออก 1 แถว

    ให้เราเลือก Use First Row as Header ไปจะได้แบบนี้

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 212

    แล้วเรากดลบคอลัมน์เวลาเริ่มกับเวลาจบทิ้งไปซะ เพราะไม่ใช้แล้ว

    แล้วเราก็เลือกคอลัมน์เวลา 0:00-23:00 ที่เตรียมไว้ จากนั้นไปที่ Transform -> Unpivot -> Unpivot Only Selected Column (ถ้าใครไม่มีก็เลือก Unpivot Column ธรรมดา)

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 213

    จาก 24 คอลัมน์ จะมารวมหัวตารางกันในคอลัมน์เดียวชื่อ Attribute และมี Value แยกออกมาเป็นอีกคอลัมน์ดังนี้

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 214

    เราแค่ดับเบิ้ลคลิ๊กเปลี่ยนชื่อคอลัมน์จาก Attribute เป็น “ช่วงเวลา” และ Value เป็น “Flagใช้งาน”

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 215

    ตรงคอลัมน์ช่วงเวลา ให้เปลี่ยน Data Type เป็นเวลาซะ เวลาเรียงใน Pivot Table จะได้ไม่มีปัญหา

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 216

    จากนั้นเราก็ Close & Load to… ออกมาให้เป็น Pivot Table เลย

    สรุปข้อมูลด้วย Pivot Table หลังจากใช้ Power Query

    แล้วเราก็ลาก Field ต่างๆ ตามใจชอบ เช่น ช่วงเวลาไว้ที่ Row, ห้องประชุมไว้ที่ Column, Flagใช้งานไปที่ Value และเอาวันไปเป็น Slicer หรือ Timeline ก็ได้ครับ

    วิธีใช้ Excel สรุปตารางการใช้ห้องประชุม 217

    แบบนี้ก็จะตอบคำถามต่างๆ ได้ง่ายขึ้นว่า ช่วงที่มีคนใช้มากสุดคือ 7:00-8:00 อะไรแบบนี้ครับ

    นี่คือประโยชน์มากๆ ของการใช้ Pivot Table ช่วยสรุปข้อมูล เพราะมันพลิกมุมมองไปมาได้สะดวก และการที่ทำให้ช่วงเวลารวมกันในคอลัมน์เดียวด้วย Power Query ได้ ก็ทำให้เราสามารถพลิกมุมมองเกี่ยวกับช่วงเวลาได้สะดวกขึ้นเช่นกันครับ

  • วิธีใช้ EVALUATE เพื่อเปลี่ยนข้อความที่เป็นสูตร ให้กลายเป็นสูตรจริงๆ

    วิธีใช้ EVALUATE เพื่อเปลี่ยนข้อความที่เป็นสูตร ให้กลายเป็นสูตรจริงๆ

    เราจะเปลี่ยนข้อความ เช่น 5×3 ให้กลายเป็นสูตร =5*3 แล้วได้ผลลัพธ์ออกมาเป็น 15 ได้ยังไง ? ข่าวดีคือ Excel สามารถทำได้ด้วย EVALUATE ครับ มาดูวิธีกันเลย

    Step1 : เตรียม Name

    ขั้นตอนแรก ให้เราสร้าง Name ขึ้นมาใหม่ก่อน เพื่อเรียกใช้คำสั่ง EVALUATE ซึ่งเป็นคำสั่ง Macro สมัย Excel4.0 ที่จะช่วยเราได้ครับ

    ให้เราเลือกช่อง B1 ก่อน แล้ว

    Formula -> Define Name เพื่อสร้าง Name ว่า MyCal

    จากนั้นใน Refers to : ใส่สูตรใน Name ว่า

    =EVALUATE(A1)

    (เพื่อให้ Evaluate ช่องด้านซ้ายของตัวเอง)

    วิธีใช้ EVALUATE เพื่อเปลี่ยนข้อความที่เป็นสูตร ให้กลายเป็นสูตรจริงๆ 218

    Step2 : ทำสูตรให้พร้อม

    ต่อไปเราจะทำสูตรให้พร้อมโดยการเปลี่ยน x เป็น * ซะก่อน (เพราะการคูณใน Excel ต้องใช้ * แทน x ) ซึ่งเราจะใช้ SUBSTITUTE มาช่วยครับ

    โดยใส่สูตรว่า

    =SUBSTITUTE(คำoriginal,"x","*")


    แปลว่า เอา x ออกจากคำ original แล้ว แทนด้วย *

    วิธีใช้ EVALUATE เพื่อเปลี่ยนข้อความที่เป็นสูตร ให้กลายเป็นสูตรจริงๆ 219

    Step3 : คำนวณผลลัพธ์พื้นที่

    ในขั้นตอนนี้เราจะเรียกใช้ชื่อ MyCal ที่สร้างขึ้นมา เพื่อให้ทำการ EVALUATE ช่องด้านซ้ายของตัวเองนะครับ โดยใส่สูตรว่า

    =MyCal 

    แค่นี้เลย

    วิธีใช้ EVALUATE เพื่อเปลี่ยนข้อความที่เป็นสูตร ให้กลายเป็นสูตรจริงๆ 220

    Step4: save ไฟล์เป็น xlsm (macro-enable)

    ขั้นตอนสุดท้ายคือ ต้อง save ไฟล์นี้ให้รองรับ Macro ด้วย เพราะเราดันมีการเรียกใช้ EVALUATE ซึ่งเป็นคำสั่ง Macro 4.0 นั่นเอง

    วิธีใช้ EVALUATE เพื่อเปลี่ยนข้อความที่เป็นสูตร ให้กลายเป็นสูตรจริงๆ 221

    สรุปทุกขั้นตอนดังนี้

    วิธีใช้ EVALUATE เพื่อเปลี่ยนข้อความที่เป็นสูตร ให้กลายเป็นสูตรจริงๆ 222

    มันทำอะไรได้อีก?

    นอกจากจะคำนวณตัวเลขธรรมดาแล้ว มันก็ใช้คำนวณสูตรใน Excel ได้ตามปกติเลยครับ เช่น ถ้าข้อความเป็น SUM(A4:A7) มันก็สามารถคำนวณให้เป็น =SUM(A4:A7) ซึ่งได้ 10 ได้เลยนะ

    วิธีใช้ EVALUATE เพื่อเปลี่ยนข้อความที่เป็นสูตร ให้กลายเป็นสูตรจริงๆ 223

    หวังว่าเพื่อนๆ คงสามารถนำไปใช้กับงานของตัวเองได้นะครับ ถ้าสงสัยอะไรก็ Comment ถามได้ครับ

  • บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder

    การดึงข้อมูลจากทั้ง Folder มาทีเดียวพร้อมกันได้นี่ ผมคิดว่ามันเป็นสุดยอดแห่งการ Get Data ที่หลายคนปรารถนาเลยล่ะ 

    ลองคิดดูว่าหากเราต้องทำ Regular Report ทุกอาทิตย์หรือทุกเดือนแล้วเราสามารถโยนข้อมูลเดือนใหม่ที่ได้ไฟล์มาจากฝ่ายงานต่างๆ เข้าไปใน Folder ที่เราออกแบบไว้แล้ว หลังจากนั้นกด Refresh แล้วรายงานทุกอย่างก็ถูก Power Query + Pivot Table ปั่นออกมาจนเสร็จได้เลยมันจะสุดยอดขนาดไหน!!

    ประเด็นที่น่าสนใจในการดึงข้อมูลจาก Folder มีอยู่ 3 เรื่องหลักๆ เลยคือ 

    1. มีไฟล์อื่นปนมาหรือไม่ ? : ถ้ามีโอกาสที่จะมีไฟล์อื่นปนมา ก็ควรจะมีการ Filter เลือกเอาเฉพาะสิ่งที่ต้องการเท่านั้น 
    2. มีข้อมูลกี่รูปแบบ? : ถ้าข้อมูลมีอยู่หลายรูปแบบ (Pattern) ให้เลือกมาทำทีละรูปแบบ แล้วสุดท้ายค่อยเอามารวมกันหรือเชื่อมกันทีหลัง
    3. ต้องการรวมไฟล์แบบ Auto หรือทำแบบสร้าง Custom Column? : แบบ Auto จะง่ายกว่า แต่แบบ Custom Column มีความยืดหยุ่นสูงกว่าครับ
    4. ไฟล์ที่ต้องการเป็น Excel หรือว่า Text/CSV ? : การจัดการข้อมูลแต่ละแบบไม่เหมือนกัน เดี๋ยวเรามาดูรายละเอียดกันครับ

    หลักการดึง Folder ที่มี หลายๆ ไฟล์

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 224

    ให้เรา Get Data → From File → From Folder แล้วเลือก Folder ที่ต้องการ

    โหลดไฟล์ประกอบได้ที่นี่ครับ (เป็นไฟล์ zip ในนั้นมี Folder อยู่ด้วย)

    จากนั้นกด Transform Data มันจะดูว่าใน Folder ที่เราเลือกมีไฟล์อะไรบ้าง?

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 225

    Tips : มันจะ List ทุกไฟล์ใน Folder รวมถึง Sub Folder ทุกอันด้วยนะครับ จะมีคอลัมน์ให้เรา Filter ได้อยู่ด้านขวา

    คัดเลือกให้เหลือเฉพาะไฟล์ที่เกี่ยวข้อง

    ในที่นี้เราจะ Filter ตามนามสกุลของไฟล์ว่าต้องเป็น File ที่ต้องการก่อน สมมติว่าผมต้องการไฟล์ csv ที่มีคำว่า hora ซึ่งสุดท้ายผม Filter ให้เหลือแต่ไฟล์ csv ที่ผมต้องการได้แล้ว

    Tips : ก่อนจะ Filter อย่าลืมแปลง Extension เป็น lowercase ด้วยเพื่อความปลอดภัย เผื่อในอนาคตใส่นามสกุลไฟล์เป็นตัวพิมพ์ใหญ่มาจะได้ใช้ได้

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 226

    หากการ Filter ที่ชื่อไฟล์กับ Extension ไม่เพียงพอ ลองกดที่ Attribute ดูจะเห็นว่ามันดึงรายละเอียดของ File แต่ละอันมาอีกหลายเรื่องมากๆ ซึ่งเราสามารถนำใช้เป็นตัว Filter ได้ด้วยครับ

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 227

    รวมข้อมูลแบบ Auto

    เราสามารถรวมข้อมูลแบบ Auto ได้โดยการกดที่ลูกศรคู่ ตรงคอลัมน์ที่ชื่อว่า Content เพื่อ Combine File ได้เลย เหมาะกับไฟล์ที่มีหน้าตาเหมือนๆ กัน ดังนั้นเหมาะมากกับการดึงไฟล์ CSV ทั้ง Folder ครับ

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 228

    มันจะมีหน้าต่างขึ้นมาถามว่าจะให้พยายามดูไฟล์ไหนเป็นตัวอย่าง (เหมาะกับกรณีที่บางไฟล์มีหน้าตาดูดีกว่าไฟล์อื่น) ถ้าไม่คิดอะไรมากก็ปล่อยเป็น First File แล้วปรับค่าให้เหมาะสมแล้ว Ok 

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 229

    ซึ่งเมื่อ OK เจ้า Power Query จะทำการรวมทุกไฟล์เข้าด้วยกัน ซึ่งมันบอกด้วยว่า Data แต่ละแถวมาจากไฟล์ชื่อว่าอะไร

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 230

    ทีนี้เราก็สามารถดัดแปลงข้อมูลต่อได้ตามที่ต้องการ เช่น จะลบคอลัมน์ที่ไม่ต้องการทิ้ง หรือจะ Filter อะไรก็ทำได้

    Power Query จะทำการสร้าง Query หลายๆ ตัวขึ้นมาเองโดยอัตโนมัติ เพื่อจะทำการ Transform ให้เหมาะสมตามไฟล์ตัวอย่างที่เราเลือกไป โดยใช้หลักการของ Custom Function ซึ่งเป็นเรื่องที่ค่อนข้าง Advance ซึ่งผมจะมีการพูดถึงอีกทีตอนหลังครับ

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 231

    กรณีที่เราอยากจะแก้วิธีการ Transform ของ Sample File ที่ Power Query ทำ เราสามารถไปแก้ Query ที่ชื่อ Transform Sample File ได้เลย แล้วมันจะส่งผลมาที่ Query ผลลัพธ์สุดท้ายหลังรวมไฟล์เองครับ

    ยกตัวอย่างเช่น ผมไปลบคอลัมน์ที่ไม่ต้องการทิ้งซะ รวมถึงมีการเปลี่ยนประเภทข้อมูลวันที่ ใน Transform Sample File ดังนี้

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 232

    จากนั้นกลับไปดูที่ Query MyHora แล้วลบ Step Changed Type ออก (เพราะเราลบ Column ไปเพียบเลย) ให้เหลือสุดท้ายคือ Step Expanded Table Column จะเห็นว่าผลลัพธ์สุดท้ายที่ออกมามันจะเหลือแค่ 3 คอลัมน์ และ Start Date ได้ถูกเปลี่ยนเป็นวันที่เรียบร้อยแล้ว

    ดังนั้นการ Transform ข้อมูลสามารถทำได้ 2 จุดหลักๆ คือ ทำในไฟล์ตัวอย่าง (Transform Sample File) หรือ ทำหลังจากรวมทุกอย่างแล้ว (หลัง Expanded Table Column) ก็ได้ครับ 

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 233

    ทีนี้ลอง Load ผลลัพธ์ออกมาเป็น Table ดู 

    จากนั้นลอง Copy ไฟล์ปี 2562 ที่ชื่อ myhora-holiday-calendar-2562.csv เข้าไปใน Folder เดิมที่เคยมีแค่ปี 2556-2561 แล้วกด Refresh ที่ Table ผลลัพธ์ดูครับ 

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 234

    จะเห็นว่าข้อมูลไฟล์ใหม่ของปี 2562 ได้เข้ามาในตารางเรียบร้อยแล้ว นี่แหละคือความสุดยอดของการดึงข้อมูลจาก Folder ครับ!!

    การใช้วิธี Auto กับไฟล์ Excel

    หากข้อมูลเป็นไฟล์ Excel ให้เราเลือก Sample File เป็นตัวหลัก ที่มี icon Folder อย่าไปเลือกที่ชื่อ Sheet เพราะว่ามันจะเอาเฉพาะข้อมูลใน Sheet ที่เราเลือกเท่านั้น (และกรณีชื่อ Sheet ไม่เหมือนกันจะมีปัญหาอีก)

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 235

    พอกด OK มันจะ List ข้อมูล Object ทั้งหมดใน Folder นั้นมาให้จากทุก File แต่มันดันลบชื่อไฟล์ทิ้งไปด้วยซะงั้น

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 236

    ให้เราย้อนลบ Step หลังๆ ทิ้งให้หมด จนให้เหลือแต่ Remove Other Column แล้วเลือกเอา Name กลับมา

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 237

    จากนั้นค่อยกดลูกศรขยายเพื่อ Expand คอลัมน์ Transform File จะได้ดังนี้

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 238

    แล้วเราค่อย Expand คอลัมน์ Data ออกมาอีกที ซึ่งคราวนี้จะมี Data จริงๆ แล้ว

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 239

    จะเห็นว่าชื่อหัวตารางยังคงอยู่ใน Row ของ Data ปกติอยู่ (ซึ่งมีหลายแถวด้วย) ดังนั้นเราต้องมานั่งแก้ไขเรื่องนี้อีก เช่น เอาบรรทัดแรกเป็นหัวตารางซะด้วย Home → Use First Row As Header

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 240

    จากนั้นต้องมาหาทาง Filter เอาแถวที่เป็นหัวตารางข้างล่างทิ้งอีก เช่น Filter คอลัมน์สินค้า เอาคำว่า สินค้า ออกไป 

    ปัญหายังไม่จบเพราะชื่อคอลัมน์ Sales ก อันนี้ก็ผิดอีก และหากไฟล์แรกไม่ใช่ sales ก Query ก็จะพังใน Step ที่เราสั่งเปลี่ยนชื่อคอลัมน์อีก…

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 241

    จะเห็นว่าวิธีการกด Combine แบบ Auto นี้ไม่ค่อยเหมาะกับไฟล์ Excel เอาซะเลยครับ งั้นมาดูอีกวิธีดีกว่า

    รวมข้อมูลแบบสร้าง Custom Column

    ถ้าจะรวมไฟล์ Excel ผมแนะนำให้เราสร้าง Custom Column ขึ้นมาครับ 

    โดยใช้คำสั่ง =Excel.Workbook([Content],true) เพื่อดึงข้อมูลประเภท Excel จากคอลัมน์ชื่อ Content ซึ่งเก็บข้อมูลทั้งไฟล์ไว้ครับ

    หมายเหตุ : true ในวงเล็บ คือ การให้ Promote Header ในแต่ละไฟล์ ซึ่งจะช่วยแก้ปัญหาเรื่องหัวตารางที่เราเจอตอนรวมไฟล์แบบ Auto ได้ครับ

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 242
    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 243

    คอลัมน์ Custom จะออกมาเป็น Table ซึ่งให้เรากด Expand ออกมาให้หมดครับ

    สิ่งที่ออกมามีจุดที่ต้องสนใจ 2 อัน คือ Kind กับ Data ครับ

    • Kind (ที่อยู่ใน Custom) จะเป็นตัวบอกว่า Object นั้นๆ เป็นแบบไหน เช่น Sheet หรือ Table ซึ่งเรา Filter ให้เหลือเฉพาะสิ่งที่ต้องการได้ครับ 
    • Data (ที่อยู่ใน Custom) จะเก็บข้อมูลจริงๆ ไว้ ซึ่งเรา Expand ได้อีกครับ
    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 244
    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 245

    ซึ่งคราวนี้ข้อมูลทั้งหมดจะออกมา โดยที่เราจะรู้ด้วยว่ามาจากไฟล์ไหน และ Sheet หรือ Table ชื่อว่าอะไร

    สำหรับคอลัมน์ Content ที่เป็น Binary เราไม่ใช้แล้ว (เพราะเอา Excel.Workbook ดึงข้อมูลออกมาแล้ว) ก็ลบทิ้งได้เลยครับ แค่นี้เราก็สามารถดึงข้อมูล Excel ทุก File ทุก Sheet หรือทุก Table ได้แล้ว!!

    บทความนี้มีที่มายังไง?

    บทความนี้เป็นส่วนหนึ่งของตัวอย่างจาก หนังสือ Excel Power Up! เพิ่มพลังการใช้ Excel ของคุณด้วย Power Query โดยผมเอาเนื้อหาบทแรกๆ ซัก 25-30% มาลงในเว็บให้อ่านกันฟรีๆ เลย คนอ่านจะได้ตัดสินใจได้ว่าอยากจะรู้เรื่องราวหลังจากนั้นอีกมั้ย? ซึ่งแค่นี้ก็น่าจะช่วยงานคุณได้เยอะพอสมควรแล้วล่ะ


    หากสนใจอ่านตัวอย่างบทอื่นๆ ของหนังสือ ลองดูที่สารบัญข้างล่างได้เลยครับ ^^

    สารบัญ Power Query

    บทนำ : ทำไมต้องเรียนรู้ Power Query? [ไฟล์ประกอบ]
    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล [ไฟล์ประกอบ]
    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query [ไฟล์ประกอบ]
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query [ไฟล์ประกอบ]
    บทที่ 4 : งานที่ยุ่งยากใน Excel กลับง่ายมากใน Power Query [ไฟล์ประกอบ]
    บทที่ 5 : การจัดการหัวตาราง [ไฟล์ประกอบ]
    บทที่ 6 : การคำนวณเบื้องต้น [ไฟล์ประกอบ]
    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ [ไฟล์ประกอบ]
    บทที่ 8 : การสร้างคอลัมน์ใหม่แบบกำหนดเองด้วย Custom Column [ไฟล์ประกอบ]
    บทที่ 9 : การสร้างคอลัมน์ใหม่ตามเงื่อนไข [ไฟล์ประกอบ]
    บทที่ 10 : การรวมกลุ่มข้อมูลด้วย Group By [ไฟล์ประกอบ]
    บทที่ 11 : การพลิกคอลัมน์เป็นหัวตารางด้วย Pivot Column [ไฟล์ประกอบ]
    บทที่ 12 : การยุบหัวตารางหลายคอลัมน์ให้เหลือคอลัมน์เดียวด้วย Unpivot [ไฟล์ประกอบ]
    บทที่ 13 : การแยกข้อมูลในคอลัมน์เดียวออกจากกันด้วย Split Column [ไฟล์ประกอบ]
    บทที่ 14 : การใช้ Query เป็นตัวแปร [ไฟล์ประกอบ]
    บทที่ 15 : การรวมข้อมูลจากหลาย Query [ไฟล์ประกอบ]
    บทที่ 16 : การดึงข้อมูลจาก Excel ไฟล์อื่น [ไฟล์ประกอบ]
    บทที่ 17 : การดึงข้อมูลจาก Text File/ CSV File [ไฟล์ประกอบ]
    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder [ไฟล์ประกอบ]
    บทที่ 19 : การดึงข้อมูลจากแหล่งอื่นๆ
    บทที่ 20 : การเตรียม Data เพื่อทำ Dashboard
    บทที่ 21 : การทำ Pivot Table เพื่อสร้าง Dashboard
    บทที่ 22 : เจาะลึก M Code หัวใจของ Power Query
    บทที่ 23 : Function คือ ขุมพลังที่แท้จริงของ M Code [ไฟล์ประกอบ]
    บทที่ 24 : ตัวอย่างการสร้าง Custom Function [ไฟล์ประกอบ]
    บทที่ 25 : การวน Loop [ไฟล์ประกอบ]
    บทส่งท้าย : เทพที่แท้จริง

    อ่านเนื้อหาบท 22 เป็นต้นไปแบบปรับปรุงใหม่ได้ฟรี ที่นี่ (อัปเดทเรื่อยๆ)

    Facebook Group : Power Query Thailand

    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder 246
    Facebook Group : Power Query Thailand

    ผู้ที่สนใจ Power Query อย่างคุณที่มาอ่านบทความนี้ ผมขอเชิญชวนเข้ากลุ่มปิด Power Query Thailand ได้ตาม Link นี้ครับ

  • วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets

    บทความนี้จะอธิบายวิธีการใช้ Power Query เชื่อมกับ Google Form/Google Sheets โดยที่เราสามารถกด Refresh ที่ Excel/Power BI เพื่อดูดข้อมูลจาก Google Form/Google Sheets ณ ตอนนั้นได้เลย

    ซึ่งเป็นเรื่องที่ผมคิดว่ามีประโยชน์มากๆ วิธีทำจะเป็นยังไงมาดูกัน (อันนี้ไม่มีในหนังสือนะ แต่ผมทำบทความให้อ่านกันฟรีๆ เลยครับ 555)

    ก่อนอื่นก็ไปสร้างฟอร์มใน Google Form ซะก่อน อันนี้แล้วแต่คุณเลย แต่ผมจะลองสร้างฟอร์มใหม่ให้กรอกเล่นๆ ละกัน

    Step หลัก 1 : เตรียม Google Form และหา URL

    สร้างฟอร์มที่ Google Form

    ผมก็ใส่คำถามไปประมาณนี้

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 247

    สร้าง Link + ลองกรอกข้อมูล

    เราก็จะมาลองกรอกข้อมูลมั่วๆ ลงไปซัก 2 อันละกัน
    ก่อนอื่นก็ไปสร้าง Link เพื่อให้คนเข้ามากรอกฟอร์มได้ ดังนี้

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 248

    แล้ว Copy Link ไปเปิดใน Tab ใหม่ แล้วลองกรอกข้อมูลดู

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 249

    เสร็จแล้วแล้ว Submit ซะ

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 250

    สร้าง Google Sheet ไว้บันทึกข้อมูล

    จากนั้นกลับไปที่หน้าสร้างฟอร์ม แล้วกดที่ Responses จากนั้นกด icon รูป Sheet เขียวๆ ตามรูป เพื่อให้ Form บันทึกข้อมูลลง Google Sheets

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 251

    จากนั้นมันจะเปิดหน้าต่าง Google Sheet ขึ้นมาโดยมีคำถามเป็นหัวตารางข้อมูล และมีข้อมูลที่เราลองกรอกลงไป

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 252

    วิธีที่เอา URL มี 2 วิธี

    วิธีที่ 1 (วิธีใหม่ ง่ายกว่า) : ใช้วิธี Publish to Web

    *** วิธีนี้แนะนำมาโดย คุณ Bo แห่งเพจ Excel Wizard ครับ***

    ให้ไปที่ File -> Publish to Web

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 253

    จากนั้นเลือกรูปแบบที่ต้องการ ในที่นี้ผมเลือกเป็น csv

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 254

    จากนั้นจะได้ URL มาให้ Ctrl+C เพื่อ Copy เก็บไว้เพื่อเอาไว้ใส่ใน Power Query ครับ

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 255

    วิธีที่ 2 (วิธีเก่า) : เอาจาก link download

    เปิด Link Sharing ก่อน

    ให้กดปุ่ม Share เขียวๆ ที่มุมบนขวา แล้วเปิดให้ anyone with link can view

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 256

    จากนั้นให้ Download ไฟล์ออกมาเป็น excel หรือ csv ก็ได้ ในที่นี้ผมเป็น csv ละกัน โดยให้ไปที่ File –> Download –> Comma Separate Value

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 257

    แล้ว Save ไว้ที่ไหนก็ได้ (ตรงนี้ไม่สำคัญ เพราะเราไม่ได้จะ link กับไฟล์ที่ save มาหรอก)

    หา URL ของไฟล์จาก Section Download

    ให้ไปที่ Section Download (ถ้าเป็น chrome กด Ctrl+J ได้)

    แล้วคลิ๊กขวา –> Copy Link Address ของไฟล์ที่เพิ่งโหลดมาซะ สิ่งที่ Copy มานี่แหละ จะเป็น URL ที่จะเอามาใช้ใน Power Query ครับ

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 258

    Step หลัก 2 : เอาข้อมูลเข้า Power Query

    เปิด Power Query ซะ แล้ว Get Data จาก Web จากนั้นใส่ URL ที่ Copy ไว้จาก Step ที่แล้วลงไป (ไม่ว่าจะวิธีไหนก็ตาม) แล้ว ok

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 259

    จากนั้นมันจะ preview ผลลัพธ์มาให้ ถ้าอ่านไม่ออกให้เปลี่ยน Encoding เป็น UTF8 นะ

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 260

    จากนั้นกด Transform เพื่อจัดการข้อมูลที่อาจจะผิด เช่นวันที่

    อย่างของผมเนี่ย มัน convert วันที่ผิดปี ถ้า control panel ผม set Region เป็น Thai วันที่ที่ถูกต้องตอน Preview จะต้องเป็น พ.ศ. แต่อันนี้มันดันเป็น ค.ศ. แถมเป็น เดือน/วัน/ปี อีก…

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 261

    ดังนั้นผมต้องกด Convert วันที่แบบ Using Locale ใหม่ แต่ก่อนจะทำ ผมต้องเปลี่ยน Format วันที่กลับเป็น Text ก่อน แล้วกด Replace Current

    จากนั้นค่อย กด Convert วันที่แบบ Using Locale ใหม่

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 262

    จากนั้นเลือก Date/Time รูปแบบเป็น English (United States) เพราะ Format มาเป็น เดือน/วัน/ปี ค.ศ.

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 263

    พอแก้ Locale เสร็จ ผลลัพธ์เป็นแบบนี้ถึงจะถูกต้องครับ (กรณีใน Control Panel เป็น Thai จะต้องเห็นเป็น พ.ศ.)

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 264

    ที่นี้ก็กด Home –> Close & Load เพื่อให้ออกไปเป็น Table ดู

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 265

    จะเห็นว่าผลลัพธ์ใช้ได้เลยล่ะ

    กลับไปกรอกฟอร์มเพิ่ม แล้วกลับมา Refresh

    ลองไปกรอกเพิ่มดูอีกซักรายการแล้วกด Submit ฟอร์ม

    จากนั้นกลับมาที่ตารางผลลัพธ์ใน Excel แล้วคลิ๊กขวา Refresh (โดยไม่ต้องไป Download หรือ Copy Link อะไรอีกแล้ว)

    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 266
    วิธีใช้ Power Query ดึงข้อมูลจาก Google Form/Google Sheets 267

    จะเห็นว่าผลลัพธ์ถูกดึงมาใน Excel อย่างง่ายดายเลย!!

    นี่แหละครับ ความสุดยอดของ Power Query ซึ่งใช้ได้ทั้งใน Excel และ Power BI เลยนะ ใครอยากลองกรอกฟอร์มของผมเล่นดู ก็ไปกรอกได้ที่ https://forms.gle/2wAbkYeJdP6oHwEHA นะครับ

    ใครมีคำถามหรือติดอะไรตรงไหนก็สามารถ Comment ไว้ได้นะครับ ส่วนคนที่อยากเรียนรู้เรื่อง Power Query เพิ่มเติม สามารถอ่านได้ที่ Category Power Query

    credit knowledge :

    ผมศึกษาวิธีเก่ามาจากเว็บนี้ครับ https://www.excelinppc.com/using-google-sheets-as-data-source-in-power-query/

    ส่วนวิธี Publish to Web จาก Google Sheets คุณ Bo แห่งเพจ Excel Wizard แนะนำมาครับ

  • บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ

    กำจัดค่าว่างและค่า Error

    ในบางครั้งข้อมูลในตารางที่เรามี มันก็ไม่ได้ดีขนาดที่จะเอาไปใช้ได้ทันที แต่ว่าต้องจัดการบางอย่างก่อน ดังนั้นความรู้ในส่วนนี้จึงเป็นเรื่องที่สำคัญมากครับ

    ยกตัวอย่างเช่น สมมติผม Get Data ข้อมูลจาก Excel แบบนี้ ซึ่งมีข้อมูลหลากหลายรูปแบบ (โหลดไฟล์ประกอบได้ที่นี่)

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 268

    ใน Power Query ก็จะตีความออกมาเป็นแบบนี้

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 269

    จุดที่น่าสังเกต

    • ช่องที่เป็นค่าว่างจริงๆ จะขึ้นเป็น null
    • ช่องที่เป็น empty text (มาจากสูตร =””) จะกลายเป็นช่องว่างๆ ที่ไม่มีคำว่า null ซึ่งหากลองกด Filter ดูจะเห็นเป็นคำว่า (blank)
    • ข้อมูล Error ใน Excel ไม่ว่าจะเป็นแบบใดก็ถูกตีความเป็น Error ทั้งหมด

    การจัดการข้อมูล Error

    ถ้าข้อมูลยังมี Error อยู่แบบนี้ จะ Transform ต่อแล้วเกิดปัญหา เช่น จะ Sort ก็ไม่ได้ จะ Load Data ออกมาก็ไม่ได้ ดังนั้นเราจะต้องมีวิธีจัดการข้อมูล Error ซะก่อน

    ข้อมูลที่ Error มีวิธีการจัดการ 2 แบบใหญ่ๆ คือ 

    1. ตัดข้อมูลแถวนั้นทิ้งโดยการ Remove Row ที่ Error ออกไปเลย
    2. แทนที่ค่า Error ด้วยค่าอื่น ด้วยการ Replace Errors

    ซึ่งมันก็แล้วแต่สถานการณ์ว่าจะจัดการแบบไหน แต่ในเคสส่วนใหญ่ผมคิดว่าแนวทาง Replace Errors น่าจะ Work กว่า เพราะข้อมูลในคอลัมน์อื่นก็จะไม่หายไปด้วย

    ในที่นี้ผมขอ Replace Errors ด้วยคำว่า –Err– แล้วกัน จะได้เห็นชัดๆ

    การ Filter

    หนึ่งในเครื่องมือที่มีการใช้บ่อยมากที่สุดอันหนึ่งใน Power Query นั่นก็คือ เครื่องมือ Filter ที่เรากดได้ที่หัวตารางแต่ละคอลัมน์นั่นเอง

    เครื่องมือ Filter นั้นใช้ง่ายและสะดวกมาก สามารถช่วยคัดเลือกข้อมูลบรรทัดที่ต้องการได้ทันที แบบเดียวกับที่เราลอง Filter กันไปก่อนหน้านี้ในตัวอย่างแรกๆ นั่นแหละ

    อย่างไรก็ตาม มีประเด็นที่ควรจะต้องระวังมากๆ เวลาจะใช้งานเครื่องมือนี้อยู่ด้วยดังนี้

    ประเด็น 1 : ใน Power Query ตัวพิมพ์ใหญ่/ตัวพิมพ์เล็ก มีผลต่างกัน (Case-Sensitive) เสมอ

    หากเราลองกด Filter ว่าต้องการเอาเฉพาะบรรทัดที่มีค่า aa ก็จะได้แต่ aa จริงๆ (ไม่ได้บรรทัดที่มี AA ด้วย หรือ Aa หรือ aA ด้วย) เพราะมันมองว่าแต่ละค่าต่างกันโดยสิ้นเชิง

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 270

    ดังนั้นหากเราต้องการได้ข้อมูล aa แบบไม่สนตัวพิมพ์เล็กตัวพิมพ์ใหญ่ ก็มีแนวทางที่เข้าใจง่ายคือ แปลงข้อมูลให้เป็นตัวพิมพ์เล็ก หรือ ตัวพิมพ์ใหญ่ ก่อนทำการ Filter นั่นเอง 555

    วิธีทำตัวพิมพ์เล็กด้วย lowercase

    ผมใช้คำสั่งในเมนู Add Column เพื่อให้สร้างเป็นคอลัมน์ใหม่ ตัวเดิมจะได้ไม่เปลี่ยนวิธีสะกดนะครับ

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 271

    จากนั้นค่อยไป Filter คอลัมน์ใหม่ให้เอาเฉพาะ aa

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 272

    จะได้ผลลัพธ์แบบนี้

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 273

    เราก็จะเหลือบรรทัดที่คอลัมน์ Data เป็น aa ทุกรูปแบบแล้ว

    Tips : อย่าลืมว่าหากมีข้อมูลที่ Error อยู่ด้วย ผลลัพธ์จะติด Error ออกมาอีก แล้วจะโหลดข้อมูลออกมาไม่ได้ ดังนั้นต้องจัดการข้อมูลที่ Error ก่อนนะครับ

    ประเด็น 2 : Filter ด้วยการติ๊ก เอา/ไม่เอาตัวไหน ต้องสังเกตสูตรที่ออกมาด้วย 

    เวลาเราติ๊ก Filter ว่าเอาไม่เอาตัวไหน ให้ดูสูตรด้วยว่ามันใช้วิธีตัดบางตัวทิ้ง หรือ เลือกบางตัวไว้ เพราะมันอาจไม่ได้ผลอย่างที่เราคิด โดยอาจจะมีปัญหาเวลามีข้อมูลใหม่มาเพิ่มอีก

    หลักการในการคิดสูตรของมันคือ 

    • หากเราติ๊กเลือกไว้จำนวนน้อยกว่าครึ่งนึง มันจะใช้สูตรแบบ เอาสิ่งที่เราเลือกไว้
    • หากเราติ๊กเลือกไว้จำนวนมากกว่าครึ่ง มันจะใช้สูตรแบบ ตัดตัวที่เราไม่เลือกทิ้ง

    ดังนั้นหากผลลัพธ์ออกมาไม่ใช่อย่างที่ต้องการ (โดยเฉพาะเวลา List มันน้อยๆ) ก็มีแนวทางแก้ไข คือ ควรระบุเงื่อนไขแบบชัดเจนไปเลย เช่น More Than, Less Than, Contain, Not Contain, Equal, Not Equal

    ซึ่งเมนูพวกนี้จะโผล่มาก็ต่อเมื่อเรามีการกำหนด Data Type ของหัวตารางคอลัมน์นั้นๆ แล้วเท่านั้น ดังนี้

    ถ้า Data Type เป็นตัวเลข

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 274

    ถ้า Data Type เป็น วันที่/เวลา

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 275

    Data Type เป็น Text

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 276

    Remove Duplicates

    Remove Duplicates คือเครื่องมือที่ใช้กำจัดข้อมูลซ้ำ โดยให้เหลือแต่ตัวบนสุดไว้ ประเด็นสำคัญที่ต้องระวัง คือ Power Query มันมองตัวพิมพ์เล็กตัวพิมพ์ใหญ่เป็นคนละตัวกันนะ (แต่ใน Excel เครื่องมือ Remove Duplicates จะมองเป็นตัวเดียวกัน)

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 277

    สมมติถ้าเราอยากลอง Remove Duplicates แบบทื่อๆ เลย ไม่ได้ระวังเรื่อง Case Sensitive ก็ให้เลือกคอลัมน์ Name แล้วไปที่ Home → Remove Rows → Remove Duplicates 

    จะเห็นว่ามีบางรายการหายไป เช่นรายการที่ 3, 9, 12, 14 เพราะมันซ้ำแบบเป๊ะๆ จริงๆ

    อย่างไรก็ตาม รายการที่ 4 ที่เป็นชื่อ SIRA EKABUT ไม่หายไป เพราะมันเป็นตัวพิมพ์ใหญ่ ถือว่าไม่ซ้ำกัน

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 278

    ดังนั้นหากเราอยากให้ตัดตัวซ้ำแบบไม่สนใจตัวพิมพ์เล็กพิมพ์ใหญ่ใน Power Query ก็อย่าลืมจัดการแปลงข้อมูลด้วยพวก lowercase ด้วย (คล้ายๆ ตอนเรา Filter นั่นแหละ) ดังนั้นเราจะลบ Step Removed Duplicates ไปก่อน แล้วเลือกคอลัมน์ Name แล้วไปที่ Add Column → Format → lowercase

    จากนั้นค่อยสั่ง Remove Duplicates จากคอลัมน์ lowercase ที่เพิ่งสร้างมาใหม่

    คราวนี้จะเห็นว่าผลลัพธ์เหลือน้อยลงแล้ว

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 279

    หากอยากให้เหลือชื่อไม่ซ้ำ แต่อยากได้ Transaction ล่าสุดล่ะ?

    หากอยากได้ Transaction ล่าสุด เราก็ต้องจัดเรียง Transaction ล่าสุดให้อยู่ข้างบนก่อน โดยกด Sort ที่หัวตาราง Transaction แล้วเลือก Sort Descending ก่อน

    จากนั้นค่อยไปเลือกคอลัมน์ lowercase แล้วสั่ง Remove Duplicates ครับ 

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 280

    จะเห็นว่าเราได้ SIRA EKABUT ที่ Transaction 4 มาแทนเดิมที่เป็นเลข 2 แล้วครับ

    บทความนี้มีที่มายังไง?

    บทความนี้เป็นส่วนหนึ่งของตัวอย่างจาก หนังสือ Excel Power Up! เพิ่มพลังการใช้ Excel ของคุณด้วย Power Query โดยผมเอาเนื้อหาบทแรกๆ ซัก 25-30% มาลงในเว็บให้อ่านกันฟรีๆ เลย คนอ่านจะได้ตัดสินใจได้ว่าอยากจะรู้เรื่องราวหลังจากนั้นอีกมั้ย? ซึ่งแค่นี้ก็น่าจะช่วยงานคุณได้เยอะพอสมควรแล้วล่ะ


    หากสนใจอ่านตัวอย่างบทอื่นๆ ของหนังสือ ลองดูที่สารบัญข้างล่างได้เลยครับ ^^

    สารบัญ Power Query

    บทนำ : ทำไมต้องเรียนรู้ Power Query? [ไฟล์ประกอบ]
    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล [ไฟล์ประกอบ]
    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query [ไฟล์ประกอบ]
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query [ไฟล์ประกอบ]
    บทที่ 4 : งานที่ยุ่งยากใน Excel กลับง่ายมากใน Power Query [ไฟล์ประกอบ]
    บทที่ 5 : การจัดการหัวตาราง [ไฟล์ประกอบ]
    บทที่ 6 : การคำนวณเบื้องต้น [ไฟล์ประกอบ]
    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ [ไฟล์ประกอบ]
    บทที่ 8 : การสร้างคอลัมน์ใหม่แบบกำหนดเองด้วย Custom Column [ไฟล์ประกอบ]
    บทที่ 9 : การสร้างคอลัมน์ใหม่ตามเงื่อนไข [ไฟล์ประกอบ]
    บทที่ 10 : การรวมกลุ่มข้อมูลด้วย Group By [ไฟล์ประกอบ]
    บทที่ 11 : การพลิกคอลัมน์เป็นหัวตารางด้วย Pivot Column [ไฟล์ประกอบ]
    บทที่ 12 : การยุบหัวตารางหลายคอลัมน์ให้เหลือคอลัมน์เดียวด้วย Unpivot [ไฟล์ประกอบ]
    บทที่ 13 : การแยกข้อมูลในคอลัมน์เดียวออกจากกันด้วย Split Column [ไฟล์ประกอบ]
    บทที่ 14 : การใช้ Query เป็นตัวแปร [ไฟล์ประกอบ]
    บทที่ 15 : การรวมข้อมูลจากหลาย Query [ไฟล์ประกอบ]
    บทที่ 16 : การดึงข้อมูลจาก Excel ไฟล์อื่น [ไฟล์ประกอบ]
    บทที่ 17 : การดึงข้อมูลจาก Text File/ CSV File [ไฟล์ประกอบ]
    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder [ไฟล์ประกอบ]
    บทที่ 19 : การดึงข้อมูลจากแหล่งอื่นๆ
    บทที่ 20 : การเตรียม Data เพื่อทำ Dashboard
    บทที่ 21 : การทำ Pivot Table เพื่อสร้าง Dashboard
    บทที่ 22 : เจาะลึก M Code หัวใจของ Power Query
    บทที่ 23 : Function คือ ขุมพลังที่แท้จริงของ M Code [ไฟล์ประกอบ]
    บทที่ 24 : ตัวอย่างการสร้าง Custom Function [ไฟล์ประกอบ]
    บทที่ 25 : การวน Loop [ไฟล์ประกอบ]
    บทส่งท้าย : เทพที่แท้จริง

    อ่านเนื้อหาบท 22 เป็นต้นไปแบบปรับปรุงใหม่ได้ฟรี ที่นี่ (อัปเดทเรื่อยๆ)

    Facebook Group : Power Query Thailand

    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ 281
    Facebook Group : Power Query Thailand

    ผู้ที่สนใจ Power Query อย่างคุณที่มาอ่านบทความนี้ ผมขอเชิญชวนเข้ากลุ่มปิด Power Query Thailand ได้ตาม Link นี้ครับ

  • บทที่ 6 : การคำนวณเบื้องต้น

    บทที่ 6 : การคำนวณเบื้องต้น

    การสรุปข้อมูลโดยใช้เครื่องมือ Statistics

    คำสั่ง Statistics ต่างๆ เช่น Sum, Minimum, Count Rows อะไรพวกนี้มันทำงานได้ 2 แบบ คือ

    • หากเลือกคอลัมน์เดียวแล้วกดแบบ Transform จะให้ผลลัพธ์สรุปข้อมูลจากคอลัมน์ที่กำหนดออกมาเป็นตัวเลขค่าเดียวเลย
    • หากเลือกหลายคอลัมน์ก่อนแล้วกดแบบ Add Column ก็จะเป็นการคำนวณสำหรับข้อมูลในแต่ละแถวแยกกันออกมาเป็นคอลัมน์ใหม่

    โหลดไฟล์ตัวอย่างได้ที่นี่ => คลิ๊ก

    ตัวอย่าง กรณีที่ใช้ Statistics → Minimum
    สมมติผมมีข้อมูลแบบนี้

    บทที่ 6 : การคำนวณเบื้องต้น 282
    บทที่ 6 : การคำนวณเบื้องต้น 283

    หากเลือกคอลัมน์ราคาในห้าง → Transform → StatisticsMinimum จะได้ค่าที่น้อยสุดในคอลัมน์นั้นออกมาเป็นค่าเดียว

    หากเลือกคอลัมน์ราคาในตลาด และราคาในห้างพร้อมกัน → Add Column  → StatisticsMinimum มันจะหาว่าค่าที่น้อยสุดในแต่และแถวเป็นค่าอะไร?

    บทที่ 6 : การคำนวณเบื้องต้น 284

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

    การคำนวณโดยใช้เครื่องมือกลุ่ม Standard

    การคำนวณแบบ Standard ก็คือการคำนวณพื้นฐาน ไม่ว่าจะเป็นการบวก ลบ คูณ หาร ยกกำลัง เป็นต้น

    ซึ่งมีวิธีการใช้หลากหลายรูปแบบ เช่น

    • เลือกคอลัมน์เดียว หรือ เลือกหลายคอลัมน์ (ถ้าเลือกหลายคอลัมน์จะ Transform ไม่ได้)
    • ใช้ Transform หรือ Add Column

    สมมติผมมีข้อมูลแบบนี้

    บทที่ 6 : การคำนวณเบื้องต้น 285

    ผมคำนวณยอดขายได้โดยการ เลือกคอลัมน์ ราคาต่อหน่วย และ จำนวนชิ้นที่ขายได้ พร้อมกัน 2 คอลัมน์ แล้วกด Add Column  → Standard → Multiplication

    บทที่ 6 : การคำนวณเบื้องต้น 286

    จะได้ดังรูป

    Tips : หากเป็นการลบหรือหาร ต้องระวังลำดับในการคลิ๊กสองคอลัมน์ที่จำคำนวณด้วย เพราะลำดับจะให้ผลต่างกันว่าจะเอาอะไรมาเป็นตัวตั้งต้น

    หากต้องการเปลี่ยนชื่อหัวตาราง ผมสามารถดับเบิ้ลคลิ๊กที่หัวตารางเพื่อเปลี่ยนชื่อจาก Multiplication เป็น ยอดขาย ได้เลย (หรือจะกดปุ่ม F2 เพื่อเปลี่ยนชื่อก็ได้)

    จากนั้นผมอยากคำนวณว่าถ้าผมต้องจ่าย Commission 10% ของยอดขาย จะต้องเสีย Commission เท่าไหร่ ในที่นี้ผมเลือกยอดขายช่องเดียว แล้ว Add Column→ Standard → Multiplication แล้วกรอก 10%

    บทที่ 6 : การคำนวณเบื้องต้น 287

    แล้วจะได้ผลลัพธ์ดังรูป

    บทที่ 6 : การคำนวณเบื้องต้น 288

    คราวนี้ผมจะแก้ชื่อคอลัมน์จากใน Formula Bar เลย จะได้ไม่ต้องมี Step เพิ่ม

    = Table.AddColumn(#”Renamed Columns”, “Multiplication”, each [ยอดขาย] * 0.1, type 

    = Table.AddColumn(#”Renamed Columns”, “Commission”, each [ยอดขาย] * 0.1, type number)

    ซึ่งวิธีแก้ชื่อคอลัมน์ที่ Formula Bar หรือ ที่ M Code ไปเลยจะดีกว่าครับ เพราะโดยหลักการแล้วยิ่งขั้นตอนน้อย ยิ่งคำนวณเร็วกว่า และการเพิ่ม Step โดยไม่จำเป็นจำทำให้อ่านแล้วงงด้วย

    สมมติว่า Commission ที่จะจ่าย ต้องหักค่าดำเนินการพิเศษ 50 บาทเสมอ ดังนั้นผมจะเลือกที่คอลัมน์ Commission → Transform → Standard → Substract แล้วใส่เลข 50 ลงไป

    บทที่ 6 : การคำนวณเบื้องต้น 289
    บทที่ 6 : การคำนวณเบื้องต้น 290

    จะเห็นว่าผลลัพธ์ที่ได้ มันเปลี่ยนที่คอลัมน์เดิมเลย โดยไม่มีการเพิ่มคอลัมน์ใหม่ครับ

    ใน Power Query เราสามารถลบข้อมูล Step ต้นทางที่ไม่ใช้แล้วได้

    เมื่อเราได้ผลลัพธ์ยอดขายกับ Commission แล้ว เราสามารถลบคอลัมน์ ราคาต่อหน่วย และ จำนวนชิ้น ได้เลย (หากไม่อยากได้แล้ว) โดยที่ผลลัพธ์ไม่พังด้วยนะครับ 

    บทที่ 6 : การคำนวณเบื้องต้น 291
    บทที่ 6 : การคำนวณเบื้องต้น 292

    ซึ่งเรื่องแบบนี้เราทำใน Excel ไม่ได้เด็ดขาด เพราะแหล่งที่มาของข้อมูลที่ใช้ในสูตรมันหายไป แต่ว่าใน Power Query ทำได้ครับ

    ระวังค่า null ตอนคำนวณตัวเลข

    เวลามีค่าที่เป็น null เราจะไม่สามารถคำนวณด้วยเครื่องมือกลุ่ม Standard ได้ครับ ซึ่งมีวิธีแก้ได้หลายแนวทาง สมมติผมมีตารางบันทึกเงินเข้าออกไว้ดังนี้

    บทที่ 6 : การคำนวณเบื้องต้น 293

    หากเราจะคำนวณ Net Cashflow (เงินเข้า – เงินออก) แต่ละวันจะทำยังไง? มาดูกันครับ

    ก่อนอื่น หากลองเอาเงินเข้า – เงินออกดูเลย จะพบว่า ตัวเลข กับ null มันคำนวณกันไม่ได้ ซึ่งแปลว่า Step ล่าสุดนี้ใช้ไม่ได้นะ

    บทที่ 6 : การคำนวณเบื้องต้น 294

    ทางแก้ทำได้หลายทาง

    1. Replace ค่า null ในคอลัมน์เงินเข้าและเงินออกด้วย 0 ก่อนแล้วค่อย Subtract

    บทที่ 6 : การคำนวณเบื้องต้น 295

    โดยกด Step ก่อนจะ  Subtract แล้วเลือกคอลัมน์เงินเข้า และ เงินออก แล้วไปที่ Transform → Replace Values จะมีหน้าต่างให้ Confirm ว่าจะ Insert Step หรือไม่ ก็ ok ไปได้เลย จากนั้นกรอกแทน null ด้วย 0

    พอ ok แล้วกดไปที่ Step สุดท้ายที่ทำการ Subtract ผลลัพธ์ก็จะไม่ Error แล้ว

    บทที่ 6 : การคำนวณเบื้องต้น 296

    2. เปลี่ยนมาใช้เครื่องมือกลุ่ม Statistics แทน เพราะกลุ่มนี้ทำงานกับ null ได้

    แต่เนื่องจากกลุ่ม Statistics มีแต่ Sum ดังนั้นผมต้องทำการแปลงคอลัมน์เงินออกให้ติดลบก่อน โดยการ Transform→ Standard → Multiply ด้วย -1

    บทที่ 6 : การคำนวณเบื้องต้น 297

    จากนั้นเลือกคอลัมน์เงินเข้า และ เงินออก แล้ว Add Column → Statistics → Sum เพื่อเอาค่าในคอลัมน์ที่เลือกมารวมกัน แต่เมื่อบวกเจอค่าลบ ก็จะได้ผลลัพธ์เหมือนเอามาลบกันนั่นเอง และผมตั้งชื่อว่า Net

    บทที่ 6 : การคำนวณเบื้องต้น 298

    เพียงเท่านี้เราก็สามารถแก้ปัญหากรณีต้องคำนวณเลขแล้วเจอค่า null ได้แล้วครับ

    บทความนี้มีที่มายังไง?

    บทความนี้เป็นส่วนหนึ่งของตัวอย่างจาก หนังสือ Excel Power Up! เพิ่มพลังการใช้ Excel ของคุณด้วย Power Query โดยผมเอาเนื้อหาบทแรกๆ ซัก 25-30% มาลงในเว็บให้อ่านกันฟรีๆ เลย คนอ่านจะได้ตัดสินใจได้ว่าอยากจะรู้เรื่องราวหลังจากนั้นอีกมั้ย? ซึ่งแค่นี้ก็น่าจะช่วยงานคุณได้เยอะพอสมควรแล้วล่ะ


    หากสนใจอ่านตัวอย่างบทอื่นๆ ของหนังสือ ลองดูที่สารบัญข้างล่างได้เลยครับ ^^

    สารบัญ Power Query

    บทนำ : ทำไมต้องเรียนรู้ Power Query? [ไฟล์ประกอบ]
    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล [ไฟล์ประกอบ]
    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query [ไฟล์ประกอบ]
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query [ไฟล์ประกอบ]
    บทที่ 4 : งานที่ยุ่งยากใน Excel กลับง่ายมากใน Power Query [ไฟล์ประกอบ]
    บทที่ 5 : การจัดการหัวตาราง [ไฟล์ประกอบ]
    บทที่ 6 : การคำนวณเบื้องต้น [ไฟล์ประกอบ]
    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ [ไฟล์ประกอบ]
    บทที่ 8 : การสร้างคอลัมน์ใหม่แบบกำหนดเองด้วย Custom Column [ไฟล์ประกอบ]
    บทที่ 9 : การสร้างคอลัมน์ใหม่ตามเงื่อนไข [ไฟล์ประกอบ]
    บทที่ 10 : การรวมกลุ่มข้อมูลด้วย Group By [ไฟล์ประกอบ]
    บทที่ 11 : การพลิกคอลัมน์เป็นหัวตารางด้วย Pivot Column [ไฟล์ประกอบ]
    บทที่ 12 : การยุบหัวตารางหลายคอลัมน์ให้เหลือคอลัมน์เดียวด้วย Unpivot [ไฟล์ประกอบ]
    บทที่ 13 : การแยกข้อมูลในคอลัมน์เดียวออกจากกันด้วย Split Column [ไฟล์ประกอบ]
    บทที่ 14 : การใช้ Query เป็นตัวแปร [ไฟล์ประกอบ]
    บทที่ 15 : การรวมข้อมูลจากหลาย Query [ไฟล์ประกอบ]
    บทที่ 16 : การดึงข้อมูลจาก Excel ไฟล์อื่น [ไฟล์ประกอบ]
    บทที่ 17 : การดึงข้อมูลจาก Text File/ CSV File [ไฟล์ประกอบ]
    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder [ไฟล์ประกอบ]
    บทที่ 19 : การดึงข้อมูลจากแหล่งอื่นๆ
    บทที่ 20 : การเตรียม Data เพื่อทำ Dashboard
    บทที่ 21 : การทำ Pivot Table เพื่อสร้าง Dashboard
    บทที่ 22 : เจาะลึก M Code หัวใจของ Power Query
    บทที่ 23 : Function คือ ขุมพลังที่แท้จริงของ M Code [ไฟล์ประกอบ]
    บทที่ 24 : ตัวอย่างการสร้าง Custom Function [ไฟล์ประกอบ]
    บทที่ 25 : การวน Loop [ไฟล์ประกอบ]
    บทส่งท้าย : เทพที่แท้จริง

    อ่านเนื้อหาบท 22 เป็นต้นไปแบบปรับปรุงใหม่ได้ฟรี ที่นี่ (อัปเดทเรื่อยๆ)

    Facebook Group : Power Query Thailand

    บทที่ 6 : การคำนวณเบื้องต้น 299
    Facebook Group : Power Query Thailand

    ผู้ที่สนใจ Power Query อย่างคุณที่มาอ่านบทความนี้ ผมขอเชิญชวนเข้ากลุ่มปิด Power Query Thailand ได้ตาม Link นี้ครับ

  • บทที่ 5 : การจัดการหัวตาราง ใน Power Query

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query

    เรื่องพื้นฐานที่ควรจะรู้เลยคือ การจัดการหัวตาราง ไม่ว่างจะเป็นการ Promote บรรทัดแรกให้กลายเป็นหัวตาราง หรือการปรับหัวตารางให้กลับมาเป็น Data บรรทัดแรก รวมถึงการจัดการบรรทัดข้อมูลที่ไม่ต้องการออกไปก่อน กรณีหัวตารางไม่ได้อยู่บรรทัดบนสุด 

    บทนี้ให้ Get Data → From Table/Range จากไฟล์ตัวอย่าง (โหลดที่นี่) เพื่อเอาข้อมูลเข้าไปใน Power Query แต่คราวนี้เราไม่ต้องติ๊ก My table has headers เนื่องจากเพราะบรรทัดแรกมันไม่ใช่หัวตาราง

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 300

    จะได้ Query หน้าตาแบบนี้ ซึ่งจะเห็นว่าหัวตารางจะชื่อ Column1 Column2… ซึ่งไม่ใช่ชื่อหัวตารางที่ควรจะเป็น

    Power Query

    สิ่งที่เราควรทำคือ พยายามทำให้ชื่อหัวตารางที่แท้จริงมาอยู่ที่บรรทัดแรกให้ได้ ซึ่งทำได้ 2 วิธี แล้วแต่ความเหมาะสม คือ

    1. เลือก Home→ Remove Rows→ Remove Top Rows แล้วใส่เลข 2 จะพบว่า Power Query จะเอา 2 แถวบนออกไปเลย
    2. เลือกคอลัมน์ที่ข้อมูลในตารางจริงมีครบ แต่ข้างบนว่าง เช่น Column2 แล้วกดที่หัว Filter → Remove Empty (ถ้าไม่มีให้เลือก ต้องกด Filter แล้วเลือกแบบ Not Equal แล้วใส่ว่า null)

    ผลลัพธ์จะได้หน้าตาออกมาเหมือนกัน คือ ชื่อหัวตารางที่แท้จริงมาอยู่บรรทัดแรกแล้ว

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 301

    จากนั้นสิ่งที่เราควรทำคือ Promote ให้ข้อมูลแถวแรกกลายเป็นหัวตารางซะ โดยไปที่ Home → Use First Row as Headers จะได้ดังรูป ซึ่งพบว่ามีการ Detect ประเภทข้อมูลให้อัตโนมัติด้วย (ดูที่ icon ของหัวตาราง) 

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 302

    ซึ่งสิ่งที่ได้เกือบจะ Perfect แล้ว เหลือแค่คอลัมน์ผลไม้ มันยังมีช่องว่างๆ อยู่ ซึ่งจะเห็นว่าเราควรจะเอาค่าผลไม้ต่างๆ ที่อยู่ด้านบนมาถมลงช่องว่างเหล่านั้นให้หมด เพื่อให้เราสามารถนำข้อมูลผลลัพธ์ไปวิเคราะห์ต่อได้ง่ายขึ้น ไม่ว่าจะเป็นการ Filter/Sort/SUMIFS/Pivot Table เป็นต้น

    การถมช่องว่าง

    วิธีการถมช่องว่างให้เลือกคอลัมน์ผลไม้ แล้วไปที่ Transform → Fill → Down (เพราะเราจะถมข้อมูลจากบนลงล่าง) แค่นั้นจบเลย ช่างง่ายดายกว่าการใช้ Excel ธรรมดามากนัก 555

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 303

    แล้วถ้าจะถมไปด้านขวาล่ะ?

    Power Query มีแต่ Fill Down กับ Fill Up ซึ่งทำง่ายมาก แต่ไม่มีคำสั่ง Fill Right หรือ Fill Left ให้เราใช้… 

    หากเราจะต้องการจะถมข้อมูลไปด้านขวา ก็จะมีเทคนิคในการพลิกข้อมูลจากคอลัมน์เป็นแถวด้วยการ Transpose ซะก่อน แล้วค่อย Fill Down ครับ เช่น ผมมีข้อมูลแบบนี้

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 304

    พอเอาเข้า Power Query (ไม่ต้องติ๊กว่า Table มี Header นะ) ช่องที่ Merge ก็จะเห็นเป็น null

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 305

    ซึ่งจะเห็นว่าเราควรจะ Fill Right เพื่อเอาข้อมูลผลไม้ไปถมช่อง null ด้านขวา แต่มันไม่มีให้เลือก

    ดังนั้นเราจะพลิกตารางก่อน โดย ไปที่ Transform → Transpose เราจะได้ผลลัพธ์หน้าตาคล้ายๆ ตัวอย่างก่อนหน้านี้ ซึ่งเราก็จะ Fill Down ได้แล้ว และเราควรจะ Promote Header ด้วยโดยไปที่ Home → Use First Row as Headers

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 306
    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 307

    ถ้าเราพอใจกับผลลัพธ์นี้จริงๆ ก็จบได้เลยนะ แต่ถ้ายังอยากจะพลิกให้ผลไม้ไปอยู่ที่คอลัมน์เหมือน Data Source เราก็ควรทำให้หัวตารางไม่ซ้ำกัน เราจะเอาข้อมูลในคอลัมน์ผลไม้กับเกรด มา Merge รวมกัน เช่น แอปเปิ้ล A มันจะได้ไม่ซ้ำกัน

    จากนั้นเราค่อยเลือกทั้งสองคอลัมน์ แล้วไปที่ Transform → Merge Columns แล้วเราสามารถเลือกตัวคั่นได้ ในที่นี้ผมเลือกเป็น Space

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 308

    เราจะได้ข้อมูลในคอลัมน์ Merged โดยที่แต่ละตัวไม่ซ้ำกันแล้ว

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 309

    แล้วเราค่อย Transform → Transpose กลับไปให้หน้าตาเหมือนเดิม

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 310

    จากนั้นก็ Home → Use First Row as Headers เป็นอันจบครับ

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 311

    ระวังเรื่องการอ้างอิงชื่อคอลัมน์ในสูตร M Code

    อย่างไรก็ตาม จะเห็นว่าการเปลี่ยน Data Type รวมถึงการถมช่องว่างมันมีการอ้างอิงชื่อคอลัมน์ในสูตรด้วย (ซึ่งการ Transform หลายๆ ตัวจะเป็นแบบนี้เช่นกัน) 

    การเปลี่ยน Data Type

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 312

    การ Fill Down

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 313

    ดังนั้นถ้าหากในอนาคตชื่อคอลัมน์ในตารางต้นทางเปลี่ยนไป Query นี้ก็จะมีปัญหาทันทีครับ

    เช่น ผมลองเปลี่ยนชื่อคอลัมน์ ผลไม้ หรือแม้กระทั่งเกรด เป็นชื่ออื่น มันก็จะพัง Refresh ไม่ได้ทันที

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 314

    หากลองเข้าไป Edit ใน Query ดู จะเก็นว่ามัน Error ตั้งแต่ Step Change Type เลยครับ

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 315

    จะแก้ไขก็ต้องลบ Step นั้นทิ้งไปซะ และอาจต้องแก้บางอย่างอีก ซึ่งยุ่งยากพอสมควร ดังนั้นการทำงานกับ Power Query โดยทั่วไปแล้วผมแนะนำอย่างยิ่งว่าอย่าไปแก้ชื่อหัวตารางเล่นเด็ดขาดครับ

    การเปลี่ยนประเภทข้อมูลใน Power Query

    เวลาเราเอาข้อมูลเข้า Power Query ปกติแล้วมันจะ Detect ประเภทข้อมูลของหัวตารางให้เราโดยอัตโนมัติ ซึ่งส่วนใหญ่แล้วมันก็จะทำได้ถูกต้อง อย่างไรก็ตามหากมันทำผิด เราก็ต้องแก้ไขประเภทข้อมูลให้เป็น

    สมมติผมเอาข้อมูล Table แบบนี้เข้าใน Power Query โดย Get Data → From Table/Range

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 316

    จะเห็นว่ามันเปลี่ยน Data Type ให้เราโดยอัตโนมัติ (สังเกตที่สัญลักษณ์ที่ซ้ายมือของชื่อคอลัมน์)

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 317

    ที่ Applied Step ก็จะมี Change Type โดยอัตโนมัติด้วย

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 318

    ตรงนี้หากเราอยากให้ ID สินค้า เป็น Text แทนที่จะเป็นตัวเลข ก็สามารถกดเปลี่ยนที่ icon ด้านซ้ายของหัวตารางแต่ละคอลัมน์ที่ต้องการได้เลย 

    ซึ่งจะเห็นว่าจริงๆ แล้วมีข้อมูลประเภทอื่นๆ อีกเต็มเลย!!

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 319

    กลุ่มตัวเลขจะมี 4 แบบ คือ 

    • Decimal ทศนิยมแบบละเอียด
    • Currency สกุลเงิน โดยมีทศนิยมสูงสุดแค่ 4 ตำแหน่ง
    • Whole Number จำนวนเต็ม
    • Percentage ก็คือ แสดงให้เห็นเป็นเปอร์เซ็นต์ใน Preview (แต่โหลดออกมาก็เหมือน Decimal)

    วันที่และเวลา มี 5 แบบ คือ 

    • Date/Time มีทั้งวันที่/เวลา
    • Date มีแต่วันที่
    • Time มีแต่เวลา
    • Date/Time/Timezone จะมีทั้งวันที่/เวลา/timezone เช่น +7:00 คือ GMT+7
    • Duration เป็นระยะเวลา แสดงเป็น วัน:ชม:นาที:วินาที (มักเกิดจากการคำนวณ)

    นอกนั้นมีอย่างละแบบ

    • Text ข้อความ
    • True/False เป็นค่า Logic จริง เท็จ
    • Binary คือ ตัวข้อมูลกลุ่มโครงสร้างพิเศษ ไม่ได้มีตัวเดียว
    • Using Locale เอาไว้จัดการเวลาเจอข้อมูลที่มี Format แปลกๆ ที่ขึ้นอยู่กับแต่ละประเทศ เช่น วันที่ หรือ สกุลเงิน ซึ่งจะอธิบายละเอียดในบทหลังๆ ไปครับ

    กรณีที่ Step ก่อนหน้าเคยเปลี่ยน Data Type ไปแล้ว และเรากดเปลี่ยน Data Type อีก (เช่น เปลี่ยน ID สินค้าเป็น Text หลังจาก Changed Type แบบ Auto เป็นตัวเลขไปแล้ว) มันจะขึ้นมาถามว่า จะสร้าง Step ใหม่ หรือ แก้ไข Step เดิม

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 320

    ถ้าเราตอบว่า Add New Step มันจะมีการแปลงประเภทข้อมูลโดย Add Step ใหม่เพิ่มเข้ามา

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 321

    แต่ถ้ากด Replace Current มันจะแก้สูตรใน Step เดิม ให้ ID สินค้าเป็น Text โดยไม่เพิ่ม Step ใหม่

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 322

    สังเกตว่าสูตรเดิมมีการเปลี่ยน 

    จาก

    = Table.TransformColumnTypes(Source,{{“ID สินค้า”, Int64.Type}…

    เป็น

    = Table.TransformColumnTypes(Source,{{“ID สินค้า”, type text}…

    ส่วนตัวผมขอแนะนำให้ Replace Current จะดีกว่าครับ เพราะบางครั้งการแก้ Data Type ไปแล้วมันอาจสูญเสียข้อมูลบางอย่างไปเรียบร้อย เช่น แก้ให้เป็นจำนวนเต็มก่อน แล้วปรับเป็นทศนิยมทีหลังก็จะไม่มีผล เพราะค่าทศนิยมมันก็หายกลายเป็น 0 ไปหมดแล้ว

    บทความนี้มีที่มายังไง?

    บทความนี้เป็นส่วนหนึ่งของตัวอย่างจาก หนังสือ Excel Power Up! เพิ่มพลังการใช้ Excel ของคุณด้วย Power Query โดยผมเอาเนื้อหาบทแรกๆ ซัก 25-30% มาลงในเว็บให้อ่านกันฟรีๆ เลย คนอ่านจะได้ตัดสินใจได้ว่าอยากจะรู้เรื่องราวหลังจากนั้นอีกมั้ย? ซึ่งแค่นี้ก็น่าจะช่วยงานคุณได้เยอะพอสมควรแล้วล่ะ


    หากสนใจอ่านตัวอย่างบทอื่นๆ ของหนังสือ ลองดูที่สารบัญข้างล่างได้เลยครับ ^^

    สารบัญ Power Query

    บทนำ : ทำไมต้องเรียนรู้ Power Query? [ไฟล์ประกอบ]
    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล [ไฟล์ประกอบ]
    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query [ไฟล์ประกอบ]
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query [ไฟล์ประกอบ]
    บทที่ 4 : งานที่ยุ่งยากใน Excel กลับง่ายมากใน Power Query [ไฟล์ประกอบ]
    บทที่ 5 : การจัดการหัวตาราง [ไฟล์ประกอบ]
    บทที่ 6 : การคำนวณเบื้องต้น [ไฟล์ประกอบ]
    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ [ไฟล์ประกอบ]
    บทที่ 8 : การสร้างคอลัมน์ใหม่แบบกำหนดเองด้วย Custom Column [ไฟล์ประกอบ]
    บทที่ 9 : การสร้างคอลัมน์ใหม่ตามเงื่อนไข [ไฟล์ประกอบ]
    บทที่ 10 : การรวมกลุ่มข้อมูลด้วย Group By [ไฟล์ประกอบ]
    บทที่ 11 : การพลิกคอลัมน์เป็นหัวตารางด้วย Pivot Column [ไฟล์ประกอบ]
    บทที่ 12 : การยุบหัวตารางหลายคอลัมน์ให้เหลือคอลัมน์เดียวด้วย Unpivot [ไฟล์ประกอบ]
    บทที่ 13 : การแยกข้อมูลในคอลัมน์เดียวออกจากกันด้วย Split Column [ไฟล์ประกอบ]
    บทที่ 14 : การใช้ Query เป็นตัวแปร [ไฟล์ประกอบ]
    บทที่ 15 : การรวมข้อมูลจากหลาย Query [ไฟล์ประกอบ]
    บทที่ 16 : การดึงข้อมูลจาก Excel ไฟล์อื่น [ไฟล์ประกอบ]
    บทที่ 17 : การดึงข้อมูลจาก Text File/ CSV File [ไฟล์ประกอบ]
    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder [ไฟล์ประกอบ]
    บทที่ 19 : การดึงข้อมูลจากแหล่งอื่นๆ
    บทที่ 20 : การเตรียม Data เพื่อทำ Dashboard
    บทที่ 21 : การทำ Pivot Table เพื่อสร้าง Dashboard
    บทที่ 22 : เจาะลึก M Code หัวใจของ Power Query
    บทที่ 23 : Function คือ ขุมพลังที่แท้จริงของ M Code [ไฟล์ประกอบ]
    บทที่ 24 : ตัวอย่างการสร้าง Custom Function [ไฟล์ประกอบ]
    บทที่ 25 : การวน Loop [ไฟล์ประกอบ]
    บทส่งท้าย : เทพที่แท้จริง

    อ่านเนื้อหาบท 22 เป็นต้นไปแบบปรับปรุงใหม่ได้ฟรี ที่นี่ (อัปเดทเรื่อยๆ)

    Facebook Group : Power Query Thailand

    บทที่ 5 : การจัดการหัวตาราง ใน Power Query 323
    Facebook Group : Power Query Thailand

    ผู้ที่สนใจ Power Query อย่างคุณที่มาอ่านบทความนี้ ผมขอเชิญชวนเข้ากลุ่มปิด Power Query Thailand ได้ตาม Link นี้ครับ

  • บทที่ 4 : งานที่ยุ่งยากใน Excel กลับง่ายมากใน Power Query

    บทที่ 4 : งานที่ยุ่งยากใน Excel กลับง่ายมากใน Power Query

    Power Query นั้นมีจุดแข็งอย่างมากเรื่องความสามารถในการดัดแปลงข้อมูลให้อยู่ในรูปแบบที่เหมาะสม โดยมีเครื่องมือมากมายที่จะช่วยเราในเรื่องนั้นได้ เรามาดูกันรวมๆ ก่อนว่ามันมีเครื่องมืออะไรที่น่าสนใจบ้าง ซึ่งผมคัดเลือกเครื่องมือที่ผมคิดว่าเจ๋งๆ มาให้บางส่วนดังนี้

    ลองอ่านดูคร่าวๆ ก่อน จะได้เห็นภาพว่า Power Query นั้นทำอะไรได้แบบที่กดด้วยเครื่องมือได้เลยบ้าง สำหรับบางตัวที่มีความซับซ้อนมากๆ ผมจะมีการอธิบายโดยละเอียดอีกทีนึงด้วยครับ

    เครื่องมือจัดการโครงสร้างหัวตาราง

    ชื่อเครื่องมือ
    ใน Power Query
    ความสามารถคล้ายอะไร
    ใน Excel?
    Use First Row as Headersทำให้แถวแรกสุดเป็นหัวตารางInsert Table แล้วติ๊กหัวตาราง
    Use Headers as First Rowทำให้หัวตารางมาเป็นแถวแรกConvert Table to Range
    Change Data Typeเปลี่ยนประเภทข้อมูล=A1*1 แปลงเป็นเลข
    =A1&”” แปลงเป็น Text

    จัดการแถว

    ชื่อเครื่องมือ
    ใน Power Query
    ความสามารถคล้ายอะไร
    ใน Excel?
    Remove Rows →
    Remove Top/Bottom Rows
    ลบแถวบนสุด/ล่างสุด xxx แถวDelete Row แบบ Manual
    Remove Rows →
    Remove Duplicates
    ทำให้เหลือแต่ข้อมูลที่ไม่ซ้ำกันData → Remove Duplicates
    Remove Rows →
    Remove Blank Rows
    เอาแถวว่างแบบว่างทั้งแถวออก
    กด Filter หัวตารางแต่ละคอลัมน์เลือกว่าจะให้เหลือบรรทัดที่มีข้อมูลแบบไหนบ้างData → Filter
    (แต่ Power Query เอาข้อมูลทิ้งไปเลย ไม่ใช่แค่ซ่อนแถวเหมือน Excel)
    กด Sort หัวตารางแต่ละคอลัมน์เรียงข้อมูลตามที่กำหนด แต่กดหลายๆ Step ต่อเนื่องกันได้เลยData → Sort
    Reverse Rowกลับแถวล่างสุดมาอยู่บนสุดData → Sort ข้อมูลกลับด้าน

    จัดการคอลัมน์

    ชื่อเครื่องมือ
    ใน Power Query
    ความสามารถคล้ายอะไร
    ใน Excel?
    Remove Columns →
    Remove Columns
    ลบคอลัมน์ที่เลือกDelete Column แบบ Manual
    Remove Columns →
    Remove Other Columns
    ลบคอลัมน์ที่ไม่ได้เลือกออกให้หมด
    และเรียงลำดับคอลัมน์ใหม่ตามลำดับการคลิ๊กด้วย

    Choose Columnsติ๊กเลือกว่าจะเอาคอลัมน์ไหนไว้บ้าง
    Merge Columnsรวมข้อมูลจากหลายคอลัมน์
    เข้าด้วยกัน ใส่ตัวคั่นได้
    เหมือนการใช้ & ในสูตร เช่น =A1&A2
    Custom Columnเพิ่มคอลัมน์แบบสามารถเขียนสูตรเอง
    โดยใช้ภาษา M Code เป็นตัวเขียน
    เขียนสูตรใน Excel Table แบบ Structure Reference

    เช่น
    สูตรยอดขายจะเขียนว่า
    =[@ราคาต่อหน่วย]*[@จำนวนชิ้น]
    Column from Examplesเพิ่มคอลัมน์ตามตัวอย่างที่เรากรอกให้
    แล้วมันจะคิดสูตรให้เอง
    เครื่องมือ Flash Fill
    Invoke Custom Functionเรียกใช้ฟังก์ชันที่เขียนขึ้นมาเอง เป็นสุดยอดเครื่องมือที่มีความสามารถสูง
    เพราะเราสามารถรวบคำสั่งหรืองาน
    ที่ต้องทำไว้เป็นฟังก์ชัน แล้วนำมาเรียกใช้ตรงนี้ได้
    เรียกใช้ User Defined Function ที่เขียนใน VBA
    Index Columnสร้างเลข Running ขึ้นมาได้ลาก Fill Handle แบบ Running

    เครื่องมือแก้ไขตัวข้อมูลในแต่ละช่อง

    ชื่อเครื่องมือ
    ใน Power Query
    ความสามารถคล้ายอะไร
    ใน Excel?
    Replace Valuesแทนค่าข้อมูลที่กำหนด ด้วยข้อมูลอีกตัวเครื่องมือ Find & Replace (Ctrl+H)
    Fill → Down / Fill →  Upถมค่าช่องว่างด้วยค่าด้านบน /ด้านล่าง (ถ้าจะ Fill Right/Left ต้องใช้ Transpose มาช่วย) ดับเบิ้ลคลิ๊กที่ Fill Handle ของตัวด้านบน
    Format →Lower Case / Upper Caseทำให้เป็นตัวพิมพ์เล็ก/พิมพ์ใหญ่ (จำเป็นมาก เพราะ Power Query เป็น Case-Sensitive)
    Format →Trimตัดช่องว่างหน้าคำและหลังคำออก (ระวัง! Trim ใน Power Query ไม่ตัดช่องว่างกลางออกให้เหมือน Excel)ฟังก์ชัน TRIM

    (แต่ TRIM ใน Excel ตัดช่องว่างตรงกลางให้เหลือแค่ 1 เคาะด้วย)
    Extract →
    Length
    หาจำนวนตัวอักษรฟังก์ชัน LEN
    Extract →
    First/Last Character
    เอาบางส่วนของข้อความจากทางซ้าย/ขวา ตามจำนวนตัวอักษรที่กำหนดฟังก์ชัน LEFT / RIGHT
    Extract →
    Range
    เอาบางส่วนของข้อความจากช่วงที่กำหนดฟังก์ชัน MID
    Extract →
    Text Before/After Delimiter
    เอาบางส่วนของข้อความที่อยู่ก่อน/หลัง ตัวคั่นที่กำหนด
    Extract →
    Text Between Delimiter
    เอาบางส่วนของข้อความที่อยู่ระหว่างตัวคั่นที่กำหนด

    เครื่องมือเกี่ยวกับโครงสร้างหน้าตาตาราง

    นี่คือกลุ่มเครื่องมือที่ทรงพลังที่สุดครับ เพราะว่าเป็นเรื่องยากที่จะใช้ VBA หรือ สูตร กับเรื่องแบบนี้ได้เมื่อเทียบกับ Power Query ซึ่งแค่กดปุ่มเดียวจบ อย่างไรก็ตามมันก็มีความซับซ้อนมากที่สุดด้วยเช่นกัน

    ชื่อเครื่องมือ
    ใน Power Query
    ความสามารถคล้ายอะไร
    ใน Excel?
    Transposeพลิกแถวเป็นคอลัมน์ คอลัมน์เป็นแถว (มักใช้กับการแก้หัวตาราง)Copy → Paste แบบ Transpose
    Append Queriesเอาข้อมูลสองตารางขึ้นไปมาต่อกัน โดยดูจากชื่อหัวตารางที่เหมือนกัน (บน-ล่าง)
    Merge Queriesเอาคอลัมน์มาจากอีกตารางที่มีความเกี่ยวข้องกัน (ซ้าย-ขวา)ฟังก์ชัน VLOOKUP
    Group ByGroup ข้อมูลตามคอลัมน์ที่กำหนด ทำให้เหลือรายการที่ไม่ซ้ำกัน แล้วสามารถสรุปข้อมูลในคอลัมน์ที่เหลือได้คล้ายใช้ Pivot Table ลาก Field ไปไว้ที่ Row แล้วลากอีก Field ไว้ที่ Value
    Pivot Columnพลิกเอาข้อมูลที่มีหลายรายการในคอลัมน์ที่กำหนด ทำให้ไม่ซ้ำกัน แล้วย้ายให้ไปเป็นหัวตาราง (หลายคอลัมน์) แล้วสรุปข้อมูลจากคอลัมน์ที่กำหนดได้คล้ายใช้ Pivot Table ลาก Field ไปไว้ที่ Column แล้วลากอีก Field ไว้ที่ Value
    Unpivot Columnsพลิกเอาข้อมูลที่แยกอยู่หลายคอลัมน์ ให้มาอยู่ในคอลัมน์เดียวแต่หลายบรรทัดแทน
    Split Columnแยกข้อความคอลัมน์ที่กำหนดออกมาเป็นหลายๆ คอลัมน์หรือหลายๆแถวเครื่องมือ Text to Column
    Convert to Listเปลี่ยนคอลัมน์ที่เลือกให้กลายเป็น List
    Count Rowsให้ผลลัพธ์ค่าเดียวว่าตารางมีทั้งหมดกี่แถว (นับแถวว่างด้วย)

    เครื่องมือเพื่อสรุปข้อมูล / คำนวณข้อมูล

    ชื่อเครื่องมือ
    ใน Power Query
    ความสามารถคล้ายอะไร
    ใน Excel?
    Statistics → Sum / Minimum / Maximumหาผลรวม / ค่าน้อยสุด/มากสุดฟังก์ชัน SUM / MIN / MAX
    Statistics →Median / Averageหาค่ามัธยฐาน (ค่าที่อยู่กลางเวลาเรียงจากน้อยไปมาก) /
    หาค่าเฉลี่ย
    ฟังก์ชัน MEDIAN / AVERAGE
    Statistics →Count Valuesนับจำนวนข้อมูล (ไม่นับช่องว่าง)ฟังก์ชัน COUNTA
    Statistics →Count Distinct Valuesนับจำนวนข้อมูลแบบไม่ซ้ำกัน (ไม่นับช่องว่าง)เหมือนใช้ Distinct Count ใน Power Pivot / DAX 
    Standard →
    Add/Multiply/
    Subtract/Divide
    บวก/ลบ/คูณ/หาร ปกติเหมือนเครื่องหมาย +, -, *,/
    Standard →
    Integer-Divide
    หารแล้วปัดเศษทิ้งให้เป็นจำนวนเต็ม
    Standard →
    Modulo
    คำนวณหาเศษเหลือจากการหาร
    เช่น 10 หาร 3 เหลือเศษ 1
    ฟังก์ชัน MOD
    Standard →
    Percentage
    คำนวณเอาคอลัมน์ที่เลือกไปคูณกับ % ที่กำหนด
    Standard →
    Percent Of
    คำนวณว่าค่าในคอลัมน์ที่เลือกเป็นกี่ % ของค่าที่กำหนด

    บทความนี้มีที่มายังไง?

    บทความนี้เป็นส่วนหนึ่งของตัวอย่างจาก หนังสือ Excel Power Up! เพิ่มพลังการใช้ Excel ของคุณด้วย Power Query โดยผมเอาเนื้อหาบทแรกๆ ซัก 25-30% มาลงในเว็บให้อ่านกันฟรีๆ เลย คนอ่านจะได้ตัดสินใจได้ว่าอยากจะรู้เรื่องราวหลังจากนั้นอีกมั้ย? ซึ่งแค่นี้ก็น่าจะช่วยงานคุณได้เยอะพอสมควรแล้วล่ะ


    หากสนใจอ่านตัวอย่างบทอื่นๆ ของหนังสือ ลองดูที่สารบัญข้างล่างได้เลยครับ ^^

    สารบัญ Power Query

    บทนำ : ทำไมต้องเรียนรู้ Power Query? [ไฟล์ประกอบ]
    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล [ไฟล์ประกอบ]
    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query [ไฟล์ประกอบ]
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query [ไฟล์ประกอบ]
    บทที่ 4 : งานที่ยุ่งยากใน Excel กลับง่ายมากใน Power Query [ไฟล์ประกอบ]
    บทที่ 5 : การจัดการหัวตาราง [ไฟล์ประกอบ]
    บทที่ 6 : การคำนวณเบื้องต้น [ไฟล์ประกอบ]
    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ [ไฟล์ประกอบ]
    บทที่ 8 : การสร้างคอลัมน์ใหม่แบบกำหนดเองด้วย Custom Column [ไฟล์ประกอบ]
    บทที่ 9 : การสร้างคอลัมน์ใหม่ตามเงื่อนไข [ไฟล์ประกอบ]
    บทที่ 10 : การรวมกลุ่มข้อมูลด้วย Group By [ไฟล์ประกอบ]
    บทที่ 11 : การพลิกคอลัมน์เป็นหัวตารางด้วย Pivot Column [ไฟล์ประกอบ]
    บทที่ 12 : การยุบหัวตารางหลายคอลัมน์ให้เหลือคอลัมน์เดียวด้วย Unpivot [ไฟล์ประกอบ]
    บทที่ 13 : การแยกข้อมูลในคอลัมน์เดียวออกจากกันด้วย Split Column [ไฟล์ประกอบ]
    บทที่ 14 : การใช้ Query เป็นตัวแปร [ไฟล์ประกอบ]
    บทที่ 15 : การรวมข้อมูลจากหลาย Query [ไฟล์ประกอบ]
    บทที่ 16 : การดึงข้อมูลจาก Excel ไฟล์อื่น [ไฟล์ประกอบ]
    บทที่ 17 : การดึงข้อมูลจาก Text File/ CSV File [ไฟล์ประกอบ]
    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder [ไฟล์ประกอบ]
    บทที่ 19 : การดึงข้อมูลจากแหล่งอื่นๆ
    บทที่ 20 : การเตรียม Data เพื่อทำ Dashboard
    บทที่ 21 : การทำ Pivot Table เพื่อสร้าง Dashboard
    บทที่ 22 : เจาะลึก M Code หัวใจของ Power Query
    บทที่ 23 : Function คือ ขุมพลังที่แท้จริงของ M Code [ไฟล์ประกอบ]
    บทที่ 24 : ตัวอย่างการสร้าง Custom Function [ไฟล์ประกอบ]
    บทที่ 25 : การวน Loop [ไฟล์ประกอบ]
    บทส่งท้าย : เทพที่แท้จริง

    อ่านเนื้อหาบท 22 เป็นต้นไปแบบปรับปรุงใหม่ได้ฟรี ที่นี่ (อัปเดทเรื่อยๆ)

    Facebook Group : Power Query Thailand

    บทที่ 4 : งานที่ยุ่งยากใน Excel กลับง่ายมากใน Power Query 324
    Facebook Group : Power Query Thailand

    ผู้ที่สนใจ Power Query อย่างคุณที่มาอ่านบทความนี้ ผมขอเชิญชวนเข้ากลุ่มปิด Power Query Thailand ได้ตาม Link นี้ครับ

  • บทที่ 3 : ภาพรวมการทำงานกับ Power Query

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query

    Power Query นั้นมีขั้นตอนการทำงานหลักๆ อยู่ 3 ขั้น คือ

    1. Get Data : เอาข้อมูลจากไหน?
    2. Transform Data : ดัดแปลงข้อมูลยังไง?
    3. Load Data to… : เสร็จแล้วจะเอา Data ไปไว้ไหน?

    ก่อนอื่นให้โหลดไฟล์ตัวอย่างอันนี้ แล้วเรามาดูรายละเอียดแต่ละขั้นตอนกันครับ

    Step1 : Get Data เอาไว้เลือกว่าเอาแหล่งข้อมูลจากไหน?

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 325

    Get Data เป็นขั้นตอนแรกที่เราต้องทำ ซึ่งเป็นการเลือกว่าอยากให้ Power Query เอาข้อมูลจากไหน? เราสามารถเลือกข้อมูลได้หลากหลายรูปแบบมากๆ เช่น ข้อมูลจากในไฟล์ Excel เดียวกับที่เปิดอยู่ หรือเอาจากแหล่งอื่น? 

    ถ้าเอาจากแหล่งอื่นก็จะต้องกดปุ่ม Get Data (หรือ บางคนจะเห็นเป็นปุ่ม New Query) ก็จะดึงข้อมูลเช่น จาก Excel ไฟล์อื่น, Text File, CSV, Access, Database ต่างๆ, Website, Facebook 

    แต่แบบที่ผมคิดว่าเจ๋งสุดๆ คือ การดึงข้อมูลทุกไฟล์จาก Folder ที่กำหนด ซึ่งจะทำให้เราทำงานได้อัตโนมัติมากขึ้นอีก เพราะแค่โยนไฟล์ที่เกี่ยวข้องลงไปใน Folder นั้นแล้วกด Refresh มันก็ดูดข้อมูลไฟล์ใน Folder นั้นมาจัดการได้เลย ซึ่งในสมัยก่อน หากเราจะทำแบบนี้ได้ต้องเขียนโปรแกรม VBA เพื่อวน Loop รายชื่อไฟล์ใน Folder เท่านั้น ซึ่งยากกว่าการใช้ Power Query แยะครับ 555

    Tips : อย่างไรก็ตาม การดึงข้อมูลจากแต่ละ Source นั้นมีประสิทธิภาพไม่เท่ากัน เช่น การดึงไฟล์ CSV จะเร็วกว่าการดึงไฟล์จาก Excel แต่ก็ยังแพ้ให้กับความเร็วในการดึงข้อมูลจาก Database โดยตรง ซึ่งเร็วกว่ามากๆ เพราะว่ามันรองรับการ Query ข้อมูลบางส่วนมาได้โดยไม่ต้องโหลดข้อมูลทั้งหมดมาก่อนครับ

    ลอง Get Data จากในไฟล์ Excel ตัวเองเข้าไปใน Power Query ก่อน

    หากเราจะดึงข้อมูลในไฟล์ Excel เดียวกับที่ทำ Power Query และข้อมูลอยู่ติดกันหมดอยู่แล้ว ให้เลือกข้อมูลช่องใดช่องหนึ่ง แล้วกด Data → From Table/Range เพื่อสร้าง Table ได้เลย (แต่ถ้าขอบเขตพื้นที่ไม่ค่อยชัดเจนต้องเอา Mouse เลือกพื้นที่ดีๆ ก่อนทำเป็น Table นะ)

    หากข้อมูลเป็น Table อยู่แล้ว มันจะเอาเข้า Power Query ไปเลย แต่ถ้ายังเป็น Rangle ธรรมดาๆ อยู่ มันจะบังคับให้แปลงเป็น Table ก่อนเสมอ (พฤติกรรมนี้จะเกิดขึ้นเฉพาะกรณีดึงจากข้อมูลในไฟล์ตัวเองเท่านั้น)

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 326

    พอกด Ok มันจะเอาข้อมูลใน Table นี้เข้าไปในเครื่องมือ Power Query Editor ทันที !!

    Tips : ถ้าดึงข้อมูลจากไฟล์อื่นมันจะให้เลือกก่อนว่าจะ Load Data ออกมาเลย หรือจะ Edit/Transform ถ้ากด Edit/Transform ก็จะเข้าสู่ Power Query Editor เช่นกัน

    Step2 : Power Query Editor เลือกว่าจะดัดแปลงข้อมูลแบบไหน?

    Power Query Editor มีองค์ประกอบ 5 ส่วนหลักๆ คือ

    1. Ribbons : แถบเครื่องมือด้านบน มีเครื่องมือให้เลือกใช้มากมาย
    2. Formula Bar : แสดงสูตรของ Step ที่เราเลือก (เข้ามาครั้งแรกอาจจะยังไม่เห็น)
    3. Queries Pane : อยู่ด้านซ้ายมือ โดย List ของ Query ทั้งหมดในไฟล์ Excel หรือ Power BI ที่เราเปิดอยู่ (มันอาจจะหดอยู่ สามารถกดลูกศรให้แสดงออกมาได้) เราสามารถเปลี่ยนชื่อ Query ในนี้ได้ด้วยการ Double Click ที่ Query ที่ต้องการด้วยครับ
    4. Preview Pane : พื้นที่ตรงกลางที่จะแสดงผลลัพธ์ข้อมูล (แค่บางส่วน)
    5. Query Setting  : อยู่ด้านขวามือ มี Applied Steps บอกว่าเราทำอะไรไปกับข้อมูลบ้าง ซึ่งสามารถแก้ไข/ลบ/สลับลำดับ Step ได้ด้วย และก็สามารถเปลี่ยนชื่อ Query ในช่อง Name ได้เช่นกัน
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 327

    ข้อมูลวันที่ แต่ละคนอาจเห็นไม่เหมือนกัน

    หากลองสำรวจดูในส่วนที่ Preview Pane จะพบว่า ข้อมูลวันที่หากออกมาถูกต้องจะอยู่ชิดขวา และจะใช้รูปแบบวันที่ตามที่ตั้งค่าไว้ใน Control Panel ของเครื่องคอมพิวเตอร์ของเรา (ตรงกับรูปแบบด้านขวาล่างของหน้าจอ ซึ่งของผม ณ ตอนนี้เป็นแบบ Thai) ดังนั้นแต่ละคนอาจเห็นรูปแบบเป็น วัน/เดือน/ปี  เดือน/วัน/ปี หรืออาจจะเห็นเป็น ค.ศ. หรือ พ.ศ. ก็ได้ 

    ตรงนี้ยังไม่ต้องซีเรียสหากวันที่ขึ้นไม่เหมือนกับผม เพราะหากเรายังใช้การ Get Data จากวันที่ใน Excel (ซึ่งบันทึกข้อมูลวันที่แบบถูกต้องแล้วจริงๆ) Power Query จะไม่มีปัญหาเรื่องวันที่ครับ แต่ถ้าดึงข้อมูลจาก CSV/Text File หรือวันที่ที่เป็น Text จะต้องมีการจัดการวันที่อย่างเหมาะสม ซึ่งผมจะมีการอธิบายโดยละเอียดในบทที่เราดึงข้อมูลจาก Text/CSV ในช่วงหลังครับ

    สำรวจ Toolbar

    ถ้ายังไม่เห็น Formula Bar ให้เราเข้าไปติ๊ก option ใน View → Formula Bar ซะก่อน

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 328

    Tips : กรณีที่สูตรยาวมากๆ ให้กดลูกศรด้านขวาของ Formula Bar เพื่อขยายพื้นที่ให้มันใหญ่ขึ้นครับ

    ถ้าสังเกตใน Ribbon ซึ่งจะมี 4 แถบ ดังนี้

    • Home : รวมคำสั่งที่น่าจะใช้บ่อยเอาไว้
    • Transform : เป็นการดัดแปลงข้อมูล โดยแก้ที่ข้อมูลในคอลัมน์เดิมที่เลือกไว้เลย
    • Add Column : เป็นการดัดแปลงข้อมูล โดยไปสร้างคอลัมน์ขึ้นมาใหม่เลย คอลัมน์เดิมจะไม่ได้รับผลกระทบไปด้วย
    • View : เอาไว้ดูเรื่องที่ Advance มากขึ้น เช่น Formula Bar, Advanced Editor, Query Dependency

    คำสั่งหลายๆ อันจะอยู่ทั้งในแถบเครื่องมือ Transform กับ Add Column เหมือนกัน แต่จะต่างกันตรงที่หากกดจาก Transform จะเป็นการแก้ข้อมูลในคอลัมน์เดิม (แก้ทับช่องเดิม) แต่ Add Column จะเป็นการเพิ่มคอลัมน์ใหม่ (ไม่กระทบอันเดิม) เช่น 

    • ถ้ากด Format → UPPERCASE ที่ Transform จะแก้คอลัมน์ที่เราเลือกให้เป็นตัวพิมพ์ใหญ่ทันที
    • ถ้ากด Format → UPPERCASE ที่ Add Column จะสร้างคอลัมน์ใหม่ โดยเอาข้อมูล Input จากคอลัมน์ที่เราเลือกแล้วแปลงเป็นตัวพิมพ์ใหญ่

    เอาล่ะเกริ่นเรื่องเครื่องมือไปแล้วนิดหน่อย กลับมาสู่งานที่จะทำต่อดีกว่า

    เริ่ม Transform ข้อมูล

    ต่อไปเราจะ Filter เอาเฉพาะผู้ขายเป็น sales ค และสินค้าเป็น หนังสือ เท่านั้น โดยเราสามารถไป Filter ทีละคอลัมน์ได้เลย โดยผมขอ Filter ผู้ขายเป็น sales ค ก่อน

    หากลองไปดูที่ Applied Steps ด้านขวามือจะเห็น Action ที่เราทำแต่ละขั้นตอนถูกบันทึกเอาไว้

    และขั้นตอน Filtered Rows จะมีรูปฟันเฟืองขึ้นมาให้เราสามารถกดแก้ไขเงื่อนไขการ Filter ครั้งนี้ได้ด้วย (เผื่อว่าในอนาคตอยากแก้ไข Step นี้ก็สามารถกดที่ฟันเฟืองได้เลยครับ)

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 329
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 330

    แต่ว่าตอนนี้เราจะยังไม่แก้อะไรที่ฟันเฟือง แต่จะลอง Filter ที่คอลัมน์สินค้าให้เหลือแต่หนังสือ จะพบว่า ผลลัพธ์ก็จะเหลือแค่ sales ค และ สินค้าเป็น หนังสือตามที่เราทำ

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 331

    แต่ปรากฏว่าใน Applied Step มันจะบันทึกรวมการ Filter ทั้งสองอันนี้ไว้ในขั้นตอนเดียวเลย ทั้งนี้เพราะปกติแล้ว Power Query จะพยายามรวบสูตรให้เหลือ Step เดียวถ้าเป็นคำสั่งเดียวกัน (เช่น Filter หลายคอลัมน์ หรือ Sort หลายคอลัมน์) ทั้งนี้เพื่อไม่ให้ Step ขึ้นมาเยอะเกินไป (แต่ที่แย่คือรูปฟันเฟืองอาจจะหายไปด้วย!) 

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 332

    โดยที่เราสามารถลบ Step ที่ไม่ต้องการทิ้ง หรือ ลากสลับลำดับการทำได้ตามใจชอบ หรือจะคลิ๊กกลับไปดู Step ก่อนหน้าว่าผลลัพธ์ของ Step นั้นมีหน้าตายังไงได้ด้วย และอย่าลืมว่าหาก Step ไหนมีรูปฟันเฟือง แปลว่าเราสามารถกดเข้าไปแก้ไขรายละเอียดใน Step นั้นได้นะ

    Tips: ถ้าเราทำการดัดแปลงข้อมูลด้วย Step ที่เป็นคนละคำสั่งกัน มันจะแยก Step ออกมาชัดเจนเลยครับ เช่น Filter ก่อน แล้วทำอย่างอื่นเช่น Sort แล้ว Filter อีกที คราวนี้จะแยกกันหมดเลย ดังนั้นหากมันเกิดการรวบ Step แบบที่เราไม่ต้องการ เราบังคับแยก Step ด้วยวิธีนี้ก่อนแล้วเราค่อยกดลบ Step คั่นกลางที่ไม่ต้องการออกทีหลังได้นะ

    สิ่งที่เราทำลงไปทั้งหมดจะถูกบันทึกไว้เป็น M Code

    สูตรใน Formula Bar

    หากเรากดดูที่แต่ละ Step ที่เราทำไป เช่น ดู Step ที่ชื่อว่า Filtered Rows จะพบว่ามีสูตรเกิดขึ้นใน Formula Bar ที่แตกต่างกันในแต่ละ Step ด้วย 

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 333

    ดังนั้นการที่เรากด Filter โดยแท้จริงก็คือการเลือกว่าจะเอาบรรทัดไหนไว้ สิ่งที่เกิดขึ้นก็คือ Power Query จะทำการสร้างสูตร M Code ที่ชื่อว่า Table.SelectRows ขึ้นมาโดยอัตโนมัติ นั่นแปลว่า การกดคำคั่งเป็นเมนู เป็นแค่ตัวช่วยสร้าง M Code ขึ้นมานั่นเอง

    เจ้า M Code หรือ M Language นี่เองเป็นภาษาที่ Power Query ใช้ทำงานทั้งหมด ทุกอย่างที่เกิดขึ้นใน Power Query สามารถเขียนหรือถูกแปลงออกมาเป็น M Code ได้ทั้งนั้น

    ยกตัวอย่างเช่น ผมลองลบคอลัมน์ที่ไม่ต้องการออก เช่น ผมจะเอาคอลัมน์วิธีการชำระเงินออกไป โดย คลิ๊กขวา Remove หรือ เลือกคอลัมน์แล้วกด Del บนคีย์บอร์ดก็ได้

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 334

    จะเห็นว่าคอลัมน์ที่เราเลือกก็จะหายไป และสูตรใน Formula Bar ก็จะเปลี่ยนไปด้วย กลายเป็นสูตรของ Step ที่เราลบคอลัมน์ออก

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 335

    ดู M Code ทั้งหมดได้ใน Advanced Editor

    การดู M Code ที่ Formula Bar นั้นเป็นการดู Code ทีละ Step แต่ถ้าหากเราอยากดู M Code ทั้งหมดของทั้ง Query นี้เลย ให้กดดูที่ View → Advanced Editor ได้เลย เจ้า M Code นี่เองคือเบื้องหลังการทำงานทั้งหมดของ Query นี้ (ถ้ายังดูไม่รู้เรื่องเลยก็ไม่ต้องแปลกใจครับ ใครๆ เห็นครั้งแรกก็ช๊อคทั้งนั้น 555) 

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 336

    เราสามารถ Copy M Code นี้ไปถามเพื่อนหรือผู้เชี่ยวชาญการทำ Power Query ใน Internet เพื่อปรึกษาปัญหาต่างๆ ได้ โดยไม่ต้องนั่ง Save Screenshot ทุก Step ว่าเราทำอะไรไปบ้าง เนื่องจากหากคนอ่าน M Code เป็น ก็จะเข้าใจเรื่องราวทั้งหมดในทันที (แต่ต้องเห็นหน้าตา Data Source ตั้งต้นด้วยนะ ไม่งั้นจะรู้ได้ไงว่าแรกสุดเป็นยังไง 55)

    เราต้องเข้าใจ M Code มั้ย? 

    โดยทั่วไปเจ้าเครื่องมือ User Interfaceมาตรฐาน ที่กดง่ายๆ ของ Power Query น่าจะช่วย Cover งานของพวกเราได้ประมาณ 70%-80% แล้วล่ะ แปลว่าถึงไม่เข้าใจ M Code เราก็ใช้ Power Query ได้ครับ 

    แต่มันก็ยังมีงานบางอย่างที่จำเป็นต้องมีการแก้ไข M Code ให้ Power Query เราทำงานได้ดียิ่งขึ้นไปอีกครับ ซึ่งเราจะลงรายละเอียดกันทีหลังครับ

    Step 3 : Load To เพื่อสั่งว่าจะให้เอาผลลัพธ์ไว้ที่ไหน? 

    ถ้าเราไปที่ Home → กดที่ icon Close & Load ไปเลย ปกติจะส่งข้อมูลออกไปเป็น Table ใหม่ทันที

    แต่ถ้ากดลูกศรแล้วเลือก Close & Load to… จะสามารถเลือก option ได้ว่าอยากให้ผลลัพธ์ไปโผล่ที่ไหน

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 337
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 338

    ใน Excel จะมีให้เลือก 4 แบบหลักๆ คือ

    • Table : แบบนี้จะสร้างออกมาเป็น Table ก่อน ถ้าเอาไปเข้า Pivot Table อีกที ต้อง Refresh 2 ต่อ
    • PivotTable Report : ส่ง Data เข้า Pivot Table เลย สามารถ Refresh ที่ Pivot Table ทีเดียวจบ
    • PivotChart : เหมือน Pivot Table แต่เป็นการสร้างกราฟ (ซึ่งก็สร้าง Pivot Table อยู่ดี)
    • Only Create Connection : สร้าง Query ไว้เฉยๆ โดยยังไม่เอาข้อมูลออกมาจริงๆ

    และยังมี Option ให้เลือก Add this data to the Data Model ต่างหากอีกอันนึง ซึ่งตัว Data Model จะเอาไว้ใช้ทำ Power Pivot หรือ PivotTable แบบ Advance ต่อไปซึ่งจะรองรับเรื่องการผูก Relationship ระหว่างหลายๆ ตารางด้วยครับ

    หากจะสร้าง Power Pivot จะต้องเลือก Add this data to Data Model ด้วย และเมื่อเราสร้าง Pivot Table โดยใช้ Source Data จาก Data Model ก็จะสามารถ Refresh ข้อมูลที่ Pivot Table ทีเดียวได้เช่นกัน

    ในกรณีนี้เราจะลองเลือก Table ดู จะเห็นว่ามันก็จะสร้าง Table ผลลัพธ์ขึ้นมาใหม่อีกอัน โดยจะแยกจาก Table ที่เป็น Source หรือแหล่งข้อมูลนะครับ เราไม่สามารถเอาผลลัพธ์ไปทับแหล่งข้อมูลต้นทางได้นะ

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 339

    สังเกต วันที่ที่ออกมา คราวนี้ Format มันจะเป็น ค.ศ. นะครับ (อาจไม่ตรงกับที่ Preview ใน Power Query) และถ้าลองเปลี่ยน Format เป็น General จะได้เลข 4 หมื่นกว่าๆ ซึ่งเป็นค่าที่แท้จริงของวันที่ใน Excel ครับ

    Load แล้วทำอะไรต่อได้?

    เราสามารถกด Refresh ผลลัพธ์ที่ Load ออกมาแล้วได้

    สิ่งที่เป็นหัวใจสำคัญของ Power Query ก็คือความสามารถในการ Refresh ผลลัพธ์ได้ 

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

    ซึ่งการ Refresh โดยแท้จริงก็คือการสั่ง Run M Code ทั้งหมดที่เราสั่งไว้ให้มันทำงานแต่ละ Step นั่นเอง หรือพูดง่ายๆ คือ Run สิ่งที่อยู่ใน Advanced Editor ของ Query นั้นๆ ครับ

    Load แล้วเติมสูตรต่อภายหลังใน Table ผลลัพธ์ได้

    หากเราลองเพิ่มคอลัมน์ใน Table ผลลัพธ์ (จะเพิ่มข้างหน้า ข้างหลัง หรือจะแทรกตรงกลางก็ได้) แล้วเขียนสูตรคำนวณลงไป จะพบว่าเราก็ยังมีความสามารถในการ Refresh ข้อมูล Table นั้นๆ อยู่ดีครับ

    ซึ่งแนวทางนี้ก็ใช้ได้กับทั้ง Excel Table เองที่สามารถใช้สูตร Excel ธรรมดา และตัว Data Model เองที่สามารถใช้สูตรแบบ DAX ได้ครับ

    ดังนั้นการเขียนสูตรคำนวณจึงสามารถทำได้ทั้งใน Power Query เองด้วยการสร้าง Custom Column หรือจะเขียนสูตรใน Excel หรือจะเขียน Calculated Column เพิ่มใน Data Model ด้วย DAX ก็ได้ครับ (แต่อาจจะมีความยากง่ายและ Performance ที่ต่างกันแล้วแต่กรณีอีก)

    Load ออกมาแล้วจะแก้ไขทำยังไง?

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 340
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 341

    ทำได้หลายแบบ เช่น ในบริเวณ Queries & Connections ด้านขวา สามารถคลิ๊กขวาแล้ว Edit เพื่อกลับไปแก้ไข Query ที่ต้องการได้เลย

    Tips : ถ้าหา Queries & Connections ด้านขวาไม่เจอ ก็ให้ไปที่แถบ Data → Queries & Connections (หรืออาจเห็นเป็น Show Queries)

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

    ยกตัวอย่างเช่น คุณสามารถลบ Step Filtered Rows ทิ้งได้โดยกดที่เครื่องหมายกากบาท ข้างหน้า Step Filtered Rows

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 342

    ครั้งนี้ผมอาจจะเปลี่ยนเป็นไป Filter ให้เหลือเฉพาะลูกค้า C00015 ก็ได้ จากนั้นกด Close & Load ออกมา จะเห็นว่าตารางเดิมที่เคยเป็น sales ค ขายหนังสือ ได้เปลี่ยนไปเป็นผลลัพธ์ใหม่คือลูกค้า C00015 ทันที 

    แต่หากเราเคย Load Query นั้นออกมาแล้ว ไม่ว่าจะ Load ด้วยวิธีไหนก็ตาม ครั้งต่อไปคำสั่ง Load To… จะกลายเป็นสีเทาไม่ให้เรากด เราจึงเลือกได้แต่ Close & Load เพียงอย่างเดียว 

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 343

    ซึ่งมันจะ Load ออกมาด้วยวิธีเดิมกับที่เคย Load ครั้งก่อนหน้าเสมอ (เช่น ก่อนหน้า Load ออกมาเป็น Table พอ Close & Load ก็จะออกมาเป็น Table)

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 344

    หากเราต้องการจะเปลี่ยนวิธีการ Load ให้ทำด้วยวิธีต่อไปนี้ 

    เปลี่ยนการ Load ทีหลังได้

    หากเราเคย Load Data ออกมาเป็นแบบนึงแล้ว ในแถบ Queries & Connection เราเราสามารถคลิ๊กขวาที่ Query ที่ต้องการ แล้วเลือก Load To… เพื่อเปลี่ยนวิธีการ Load ได้

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 345
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 346

    ถ้าหากเคย Load ออกมาเป็น Table แล้วเราไปคลิ๊กขวา Load To… แล้วเปลี่ยนเป็น Connection Only ตัวTable ก็จะหายไป ส่วนตรง Query ก็จะกลายเป็น Connection Only

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 347
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 348

    ในทางกลับกัน หากเราลบตารางผลลัพธ์ทิ้งไป ตรงบริเวณ Queries & Connections จะเปลี่ยนจาก Table เป็นการ Load แบบ Connection Only แทนเช่นกัน

    อย่างไรก็ตาม ถ้าเราใช้วิธีคลิ้กขวาแล้ว Delete Query ทิ้ง ตัว Table จะไม่หายไปนะครับ

    Duplicate Query vs Reference Query

    เราสามารถคลิ๊กขวาที่ Query ในแถบ Queries & Connection เพื่อที่จะสร้าง Query ใหม่ที่อ้างอิง Query เดิมได้ แต่มันจะมีให้เลือก 2 แบบ คือ Duplicate หรือ Reference Query

    ซึ่งดูเผินๆ ผลลัพธ์หน้าตาอาจดูเหมือนกัน แต่จริงๆ แล้วมีความต่างกันดังนี้

    • Duplicate : Copy Query ต้นฉบับออกมาเป็น Query ตัวใหม่อีกตัวนึง ซึ่งมี Step ทุกอย่างครบเหมือนเดิมทุกประการ (ผลลัพธ์ที่เหมือน Query ต้นฉบับจะอยู่ Step สุดท้าย)
    • Reference : สร้าง Query ใหม่โดยอ้าง Source ไปที่ผลลัพธ์จาก Query ต้นฉบับ ซึ่ง Step จะโผล่มาอันเดียว นั่นคือ เอาผลลัพธ์ของ Query ที่มันอ้างอิงถึงมาเป็น Source ของ Query ใหม่
      (ผลลัพธ์ที่เหมือน Query ต้นฉบับจะอยู่ตั้งแต่ Step แรกเลย)

    ข้อที่ต่างกันชัดเจน คือ หากเราไปแก้ที่ Query ต้นฉบับ เจ้า Duplicate Query จะไม่เปลี่ยนตาม แต่ Reference Query จะเปลี่ยนตามไปด้วย (เพราะมัน Link มาจากผลลัพธ์ของต้นฉบับนั่นเอง)

    บทความนี้มีที่มายังไง?

    บทความนี้เป็นส่วนหนึ่งของตัวอย่างจาก หนังสือ Excel Power Up! เพิ่มพลังการใช้ Excel ของคุณด้วย Power Query โดยผมเอาเนื้อหาบทแรกๆ ซัก 25-30% มาลงในเว็บให้อ่านกันฟรีๆ เลย คนอ่านจะได้ตัดสินใจได้ว่าอยากจะรู้เรื่องราวหลังจากนั้นอีกมั้ย? ซึ่งแค่นี้ก็น่าจะช่วยงานคุณได้เยอะพอสมควรแล้วล่ะ


    หากสนใจอ่านตัวอย่างบทอื่นๆ ของหนังสือ ลองดูที่สารบัญข้างล่างได้เลยครับ ^^

    สารบัญ Power Query

    บทนำ : ทำไมต้องเรียนรู้ Power Query? [ไฟล์ประกอบ]
    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล [ไฟล์ประกอบ]
    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query [ไฟล์ประกอบ]
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query [ไฟล์ประกอบ]
    บทที่ 4 : งานที่ยุ่งยากใน Excel กลับง่ายมากใน Power Query [ไฟล์ประกอบ]
    บทที่ 5 : การจัดการหัวตาราง [ไฟล์ประกอบ]
    บทที่ 6 : การคำนวณเบื้องต้น [ไฟล์ประกอบ]
    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ [ไฟล์ประกอบ]
    บทที่ 8 : การสร้างคอลัมน์ใหม่แบบกำหนดเองด้วย Custom Column [ไฟล์ประกอบ]
    บทที่ 9 : การสร้างคอลัมน์ใหม่ตามเงื่อนไข [ไฟล์ประกอบ]
    บทที่ 10 : การรวมกลุ่มข้อมูลด้วย Group By [ไฟล์ประกอบ]
    บทที่ 11 : การพลิกคอลัมน์เป็นหัวตารางด้วย Pivot Column [ไฟล์ประกอบ]
    บทที่ 12 : การยุบหัวตารางหลายคอลัมน์ให้เหลือคอลัมน์เดียวด้วย Unpivot [ไฟล์ประกอบ]
    บทที่ 13 : การแยกข้อมูลในคอลัมน์เดียวออกจากกันด้วย Split Column [ไฟล์ประกอบ]
    บทที่ 14 : การใช้ Query เป็นตัวแปร [ไฟล์ประกอบ]
    บทที่ 15 : การรวมข้อมูลจากหลาย Query [ไฟล์ประกอบ]
    บทที่ 16 : การดึงข้อมูลจาก Excel ไฟล์อื่น [ไฟล์ประกอบ]
    บทที่ 17 : การดึงข้อมูลจาก Text File/ CSV File [ไฟล์ประกอบ]
    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder [ไฟล์ประกอบ]
    บทที่ 19 : การดึงข้อมูลจากแหล่งอื่นๆ
    บทที่ 20 : การเตรียม Data เพื่อทำ Dashboard
    บทที่ 21 : การทำ Pivot Table เพื่อสร้าง Dashboard
    บทที่ 22 : เจาะลึก M Code หัวใจของ Power Query
    บทที่ 23 : Function คือ ขุมพลังที่แท้จริงของ M Code [ไฟล์ประกอบ]
    บทที่ 24 : ตัวอย่างการสร้าง Custom Function [ไฟล์ประกอบ]
    บทที่ 25 : การวน Loop [ไฟล์ประกอบ]
    บทส่งท้าย : เทพที่แท้จริง

    อ่านเนื้อหาบท 22 เป็นต้นไปแบบปรับปรุงใหม่ได้ฟรี ที่นี่ (อัปเดทเรื่อยๆ)

    Facebook Group : Power Query Thailand

    บทที่ 3 : ภาพรวมการทำงานกับ Power Query 349
    Facebook Group : Power Query Thailand

    ผู้ที่สนใจ Power Query อย่างคุณที่มาอ่านบทความนี้ ผมขอเชิญชวนเข้ากลุ่มปิด Power Query Thailand ได้ตาม Link นี้ครับ

  • บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query

    บทความนี้เป็นตัวอย่างตอนที่ 3 ของ Series เนื้อหา Power Query ซึ่งเป็นตัวอย่างจากหนังสือ Excel Power Up! (ใครสนใจตอนก่อนหน้านี้ให้ไปดูสารบัญด้านล่างนะครับ)

    ดูแบบคลิปวีดีโอได้ที่นี่

    Power Query คืออะไรกันแน่?

    Power Query ก็คือ เครื่องมือที่สามารถ “ดึงข้อมูลอย่างทรงพลัง” นั่นคือมีความสามารถในการดึงข้อมูลได้จากแหล่งข้อมูลที่หลากหลายและสามารถปรับเปลี่ยนรูปแบบหน้าตาข้อมูลผลลัพธ์ได้ตามต้องการ 

    จุดประสงค์หลักเพื่อทำให้ข้อมูลเน่าๆ (ที่อาจจะมาจากหลายแหล่ง หลาย Format หลายหน้าตา) ให้มาอยู่ในรูปแบบที่ Database เพื่อให้สามารถนำไปวิเคราะห์ต่อใน PivotTable, Power Pivot, Power BI ได้

    และเมื่อทำเสร็จแล้ว 1 ที หากจะทำซ้ำครั้งถัดไป แค่กด Refresh ทุกอย่างก็จบได้อย่างง่ายดาย

    Power Query มีจุดเด่นยังไง?

    • รวบรวมข้อมูลได้จากหลายที่ หลายรูปแบบ
    • ใช้งานง่าย มีปุ่มเมนูให้กด ไม่จำเป็นต้องเขียนสูตร
    • ทุกการกระทำจะถูกบันทึกเป็น Steps เอาไว้ (คล้ายๆ Record Macro แต่ง่ายกว่า)
    • ทำปุ๊ปเห็น Preview ผลลัพธ์ปั๊ป ไม่ต้องจินตนาการมากเท่าการเขียนสูตรหรือ VBA
    • สามารถแก้ไข สลับลำดับ หรือลบ Steps ที่ทำไว้ได้อย่างง่ายดาย
    • ทำซ้ำง่าย แค่กด Refresh มันจะทำซ้ำ Action ที่บันทึกไว้ทันที
    • แยกส่วน Query แล้วเอามาเชื่อมต่อกันทีหลังได้ ทำให้สร้างระบบที่ซับซ้อนได้
    • รองรับการทำงานที่ Advance มากขึ้นด้วย M Code ซึ่งเป็นภาษาพิเศษของ Power Query

    สรุป คือ Power Query ง่ายพอที่จะทำงานโหดๆ ที่เดิมต้องใช้สูตรยากๆ หรือ VBA ได้ด้วยแค่ปุ่มเมนูมาตรฐาน แต่ก็ยืดหยุ่นพอที่จะยอมให้เราแก้ไขเรื่อง Advance มาก ๆ ได้ด้วย M Code

    ข่าวดีคือ ส่วนที่ง่ายของ Power Query นั้นใช้เวลาเรียนรู้แป๊ปเดียวก็เข้าใจ แถมยังครอบคลุมการทำงานได้ซัก 70%-80% แล้วครับ! ดังนั้นมันเป็นอะไรที่ทุกคนสามารถทำได้จริงๆ

    Computer คุณพร้อมใช้ Power Query หรือยัง?

    หากคุณมี Excel 2016 ขึ้นไป (ทั้ง Excel 2016, Excel 2019 หรือ Excel 365) แสดงว่าคุณมี Power Query อยู่แล้วใน Ribbon ชื่อ Data → Get & Transform นะครับ ไม่ต้องทำอะไรเพิ่มก็ใช้ได้เลย (แต่อย่าลืม check การอัปเดทให้ล่าสุดเสมอ ไม่งั้นอาจมีเครื่องมือไม่ครบได้นะ)

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 350

    หากคุณมี Excel 2010/2013 ต้องไปโหลด Power Query Add-in มาลงเพิ่ม วิธีคือพิมพ์คำว่า “power query add in” ใน Google ก็น่าจะเจอครับ (อย่าลืมหา Link ที่ดูใหม่หน่อย และต้องเลือกเรื่อง 32bit/64bit ให้ตรงกับ Version ของ Excel คุณด้วยนะ ถ้าไม่แน่ใจก็โหลดมันทั้งคู่เลย ดูว่าตัวไหนลงได้ก็ตัวนั้นแหละ) 

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 351
    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 352

    พอโหลดมาลงได้แล้วจะมี Ribbon ชื่อ Power Query โผล่ขึ้นมาให้เลือกครับ

    แต่ถ้าคุณมี Excel เก่ากว่า 2010 หรือว่ามีปัญหาอะไรซักอย่างจนลง Power Query ไม่ได้ ก็ยังเหลืออีกทางเลือกนึง คือ ให้ไปใช้ Power Query ในโปรแกรม Power BI Desktop เลย เพราะมันทั้งฟรี ดีกว่า แถมทำงานเร็วกว่า Power Query ของ Excel ด้วยซ้ำ (ซึ่งจริงๆ จะมี Excel version ไหนก็ตามหรือไม่มี Excel เลย ก็ไปโหลดมาใช้ได้นะ)

    Power BI Desktop คืออะไร?

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 353

    Power BI Desktop เป็นโปรแกรม Business Intelligent ที่มีความสามารถของ 3 เครื่องมือรวมกัน คือ 

    • Power Query – รวบรวมและดัดแปลงข้อมูล
    • Power Pivot – คำนวณสรุปข้อมูล
    • Power View – นำเสนอข้อมูล

    ความเจ๋งคือ พวกเราสามารถโหลดมาใช้ได้ฟรี แม้จะไม่มีโปรแกรม Microsoft Office ในเครื่องเลยด้วยซ้ำ 

    วิธีโหลดมี 2 วิธี คือ 

    1. โหลดเป็นโปรแกรม ซึ่งจะโหลดมาเป็นโปรแกรมที่เราต้องคอยอัปเดทเองทุกเดือน ซึ่ง Search ผ่าน Google ได้เลยว่า “Power BI Desktop Download” หรือไปที่ https://powerbi.microsoft.com/en-us/desktop/ ก็ได้
    2. โหลดเป็น App ผ่าน Microsoft Store ซึ่งจะดีกว่าวิธีบนเพราะมันจะสามารถ Auto Update ตัวเองผ่าน Microsoft Store ได้ครับ (ผมแนะนำแบบนี้ครับ) ใครสนใจคลิ๊ก link นี้ครับ https://www.microsoft.com/store/productId/9NTXR16HNW1T?fbclid=IwAR1QWyuYhlENqnQ2Cc-4owlHor5HX861zHC-JETl34aqnaeURfjFhupjLso

    ที่เจ๋งมากๆ คือ เจ้า Power BI Desktop เนี่ยมีการอัปเดทความสามารถใหม่ๆ ทุกเดือนด้วย (โคตรเจ๋ง!)

    ดังนั้นผมขอแนะนำให้ผู้อ่านทุกท่านเลือกเอาว่าจะใช้ Power Query ใน Excel หรือจะใช้ใน Power BI Desktop ก็ได้ครับ แต่ถ้าใช้ใน Power BI ก็จะมั่นใจว่าได้เวอร์ชันใหม่ล่าสุดแน่นอน แต่ตัวอย่างในหนังสือเล่มนี้จะใช้ Power Query จากใน Excel365 ครับ

    Computer ที่ออฟฟิศลงโปรแกรมเองไม่ได้?

    ผมแนะนำว่า หาก Computer ที่คุณใช้ไม่สามารถลงโปรแกรมดังกล่าวเองได้ ให้ลองไปเจรจากับทาง IT ให้ลงโปรแกรมให้ครับ ถ้าทาง IT ไม่ยอม ผมแนะนำให้ลองขอหัวหน้าของเราให้ไปช่วยคุยอีกทีครับ 555

    สาเหตุเพราะโปรแกรม Power Query มันมีประโยชน์มากและช่วยลดเวลาทำงานได้มหาศาลเลยล่ะ หากคำนึงถึงเรื่องราคาก็ไม่ต้องห่วงเพราะมันฟรีครับ และไม่ผิดลิขสิทธิ์ด้วย คุ้มกว่านี้ไม่มีแล้วครับ 

    ลองคิดดูว่างานที่เดิมต้องทำ 2 ชั่วโมง อาจจะเสร็จได้ในเวลาไม่ถึง 5 นาทีเลยก็ได้นะ!

    สัมผัสความเจ๋งของ Power Query

    ในส่วนนี้ผมอยากให้คุณเห็นถึงความเจ๋งของ Power Query จะได้นึกภาพออกว่ามันดีกว่าวิธีการเดิมๆ ยังไง? ดังนั้นให้คุณลองทำตามทีละ Step โดยที่ ณ ตอนนี้ยังไม่ต้องเข้าใจว่ามันทำงานยังไงก็ได้นะครับ เพราะในบทต่อๆ ไปจะมีการอธิบายการทำงานแต่ละอันโดยละเอียดให้แน่นอน

    สมมติว่าเรามีข้อมูลดังนี้ใน Excel ซึ่งเป็นข้อมูลที่ยังไม่ได้อยู่ในรูปแบบ Database ที่เหมาะสม โดยมีปัญหา 2 เรื่องคือ สินค้าที่ Blank ไว้ และคอลัมน์ sales ก-ง ไม่ได้อยู่ในคอลัมน์เดียวกัน (โหลดไฟล์ประกอบได้ที่นี่)

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 354

    ให้เราคลิ๊กตรงไหนก็ได้ในตาราง เช่น A3 แล้วไปที่ Data → From Table/Range (บางคนอาจจะเห็นเป็น From Table เฉยๆ) แล้วกด Ok แล้วมันจะเปิดหน้าต่าง Power Query Editor ขึ้นมา

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 355

    จะเห็นว่าข้อมูลในคอลัมน์สินค้าช่องที่ว่างๆ อยู่จะขึ้นว่า null ซึ่งเราไม่ต้องการให้มันว่าง ให้เราเลือกคอลัมน์สินค้าแล้วไปที่ Transform → Fill → Down จะพบว่า Power Query จะถมช่องว่างได้อย่างง่ายดาย!

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 356

    ปัญหาต่อไปคือ คอลัมน์ sales ก ถึง sales ง ควรจะมาอยู่ในคอลัมน์เดียวกันมากกว่าที่จะแยกไปเป็นหลายๆ คอลัมน์ ดังนั้นให้เราเลือกคอลัมน์ sales ก – ง โดยคลิ๊กที่คอลัมน์ sales ก ก่อนแล้วกด Shift ค้างแล้วกดคอลัมน์ sales ง

    จากนั้นไปที่ Transform → Unpivot Columns จะได้ผลลัพธ์ที่เราต้องการทันที (ง่ายอะไรอย่างงี้!!)

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 357

    หากเราต้องการเปลี่ยนชื่อคอลัมน์ ก็ให้ Double Click ที่หัวตารางแล้วพิมพ์ชื่อคอลัมน์ที่ต้องการได้เลย เช่น ผมเปลี่ยนคำว่า Attribute เป็น ผู้ขาย และเป็น Value เป็นจำนวนชิ้น

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 358

    ถ้าเรา ok กับผลลัพธ์แล้วให้ไปที่ Home → Close & Load มันจะแสดงผลลัพธ์ออกมาเป็น Table อีกอันนึงใน Sheet ใหม่ ซึ่ง Table ผลลัพธ์ปกติจะเป็นสีเขียว (ไม่ใช่ Table เดิมนะ Table เดิมปกติจะเป็นสีฟ้า)

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 359

    ทีนี้หากเราไปแก้ไขข้อมูลใน Table ต้นฉบับเดิม (สีฟ้า) เช่น เพิ่มเสื้อผ้าแบบเงินสดเข้าไปในบรรทัดสุดท้าย ให้เฉพาะ sales ก 50 ชิ้น กับ sales ค 60 ชิ้น

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 360

    ทีนี้เราไปที่ Table ผลลัพธ์แล้วกดคลิ๊กขวา → Refresh จะเห็นว่ามีข้อมูลใหม่มาทันที (เจ๋งป่ะล่ะ!)

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 361

    และนี่คือความสามารถของ Power Query ซึ่งหากใช้วิธีอื่นจะยากกว่ากันมากๆ ครับ ในบทถัดๆ ไปเราจะเริ่มลงรายละเอียดเพื่อทำความเข้าใจว่ามันทำอะไรได้บ้าง ซึ่งในบทหลังๆ เราจะรวมข้อมูลทั้ง Folder มาทำรายงานรวมกันได้เลยด้วยซ้ำ ถ้าอยากรู้ก็อ่านต่อไปได้เลยครับ!

    บทความนี้มีที่มายังไง?

    บทความนี้เป็นส่วนหนึ่งของตัวอย่างจาก หนังสือ Excel Power Up! เพิ่มพลังการใช้ Excel ของคุณด้วย Power Query โดยผมเอาเนื้อหาบทแรกๆ ซัก 25-30% มาลงในเว็บให้อ่านกันฟรีๆ เลย คนอ่านจะได้ตัดสินใจได้ว่าอยากจะรู้เรื่องราวหลังจากนั้นอีกมั้ย? ซึ่งแค่นี้ก็น่าจะช่วยงานคุณได้เยอะพอสมควรแล้วล่ะ


    หากสนใจอ่านตัวอย่างบทอื่นๆ ของหนังสือ ลองดูที่สารบัญข้างล่างได้เลยครับ ^^

    สารบัญ Power Query

    บทนำ : ทำไมต้องเรียนรู้ Power Query? [ไฟล์ประกอบ]
    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล [ไฟล์ประกอบ]
    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query [ไฟล์ประกอบ]
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query [ไฟล์ประกอบ]
    บทที่ 4 : งานที่ยุ่งยากใน Excel กลับง่ายมากใน Power Query [ไฟล์ประกอบ]
    บทที่ 5 : การจัดการหัวตาราง [ไฟล์ประกอบ]
    บทที่ 6 : การคำนวณเบื้องต้น [ไฟล์ประกอบ]
    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ [ไฟล์ประกอบ]
    บทที่ 8 : การสร้างคอลัมน์ใหม่แบบกำหนดเองด้วย Custom Column [ไฟล์ประกอบ]
    บทที่ 9 : การสร้างคอลัมน์ใหม่ตามเงื่อนไข [ไฟล์ประกอบ]
    บทที่ 10 : การรวมกลุ่มข้อมูลด้วย Group By [ไฟล์ประกอบ]
    บทที่ 11 : การพลิกคอลัมน์เป็นหัวตารางด้วย Pivot Column [ไฟล์ประกอบ]
    บทที่ 12 : การยุบหัวตารางหลายคอลัมน์ให้เหลือคอลัมน์เดียวด้วย Unpivot [ไฟล์ประกอบ]
    บทที่ 13 : การแยกข้อมูลในคอลัมน์เดียวออกจากกันด้วย Split Column [ไฟล์ประกอบ]
    บทที่ 14 : การใช้ Query เป็นตัวแปร [ไฟล์ประกอบ]
    บทที่ 15 : การรวมข้อมูลจากหลาย Query [ไฟล์ประกอบ]
    บทที่ 16 : การดึงข้อมูลจาก Excel ไฟล์อื่น [ไฟล์ประกอบ]
    บทที่ 17 : การดึงข้อมูลจาก Text File/ CSV File [ไฟล์ประกอบ]
    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder [ไฟล์ประกอบ]
    บทที่ 19 : การดึงข้อมูลจากแหล่งอื่นๆ
    บทที่ 20 : การเตรียม Data เพื่อทำ Dashboard
    บทที่ 21 : การทำ Pivot Table เพื่อสร้าง Dashboard
    บทที่ 22 : เจาะลึก M Code หัวใจของ Power Query
    บทที่ 23 : Function คือ ขุมพลังที่แท้จริงของ M Code [ไฟล์ประกอบ]
    บทที่ 24 : ตัวอย่างการสร้าง Custom Function [ไฟล์ประกอบ]
    บทที่ 25 : การวน Loop [ไฟล์ประกอบ]
    บทส่งท้าย : เทพที่แท้จริง

    อ่านเนื้อหาบท 22 เป็นต้นไปแบบปรับปรุงใหม่ได้ฟรี ที่นี่ (อัปเดทเรื่อยๆ)

    Facebook Group : Power Query Thailand

    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query 362
    Facebook Group : Power Query Thailand

    ผู้ที่สนใจ Power Query อย่างคุณที่มาอ่านบทความนี้ ผมขอเชิญชวนเข้ากลุ่มปิด Power Query Thailand ได้ตาม Link นี้ครับ

  • บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล

    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล

    ในเมื่อเราจะมาเจาะลึกวิธีใช้ Excel ทำรายงานให้มีประสิทธิภาพสูงสุด ดังนั้นเราควรวิเคราะห์ดูก่อนว่า การจะทำรายงานให้สำเร็จได้นั้นโดยภาพรวมมีขั้นตอนอะไรและความเชื่องช้าอยู่ตอนไหนบ้าง?

    Step การทำรายงาน

    1. เตรียมฐานข้อมูล
    2. คำนวณแปลงข้อมูลดิบให้เป็นผลสรุป
    3. Visualization
    4. สรุปและตีความหมายนำข้อมูลไปใช้ประโยชน์จริง ๆ
    5. ทำซ้ำหากข้อมูลมีการเปลี่ยนแปลง เช่น ต้องทำข้อมูลเดือนใหม่ในรูปแบบเดิมอีก

    เตรียมฐานข้อมูล

    ขั้นตอนนี้ ความซับซ้อนและความเสียเวลาขึ้นอยู่กับว่าแหล่งข้อมูลที่แท้จริงเรามาจากไหน และมีลักษณะอย่างไร? เช่น

    • ข้อมูลอยู่ในไฟล์ Excel เดียวกับที่ทำงานอยู่ หรือ อยู่ที่อื่น?
    • ข้อมูลมีตารางเดียว หรือ หลายตาราง? 
    • เป็นแบบเพิ่มคอลัมน์ หรือ เพิ่มเแถว หรือ ทั้งคู่เลย?
    • การรวมข้อมูลนั้นรวมได้ตรงๆ เลย หรือต้องมีการคัดเลือกข้อมูลบางส่วน

    ถ้าอยู่ในไฟล์เดียวกัน มีตารางเดียว นี่จะง่ายที่สุด เพราะเราเอา Data ตัวนั้นให้เป็นแหล่งข้อมูลหลักที่จะเอาไปทำต่อได้เลย แต่ถ้าข้อมูลอยู่ที่อื่น หรือมีหลายตาราง เราก็ต้องพยายามรวบรวมข้อมูลทุกที่ให้มาอยู่ในที่เดียวกันก่อน 

    ซึ่งทำได้หลายแบบ หลายวิธีการ เช่น

    1. Copy Paste เอาเองแบบ Manual 
    2. เขียนสูตรพวก LOOKUP อย่างเช่น VLOOKUP, INDEX, MATCH, OFFSET, INDIRECT
    3. ใช้ VBA (เขียนโปรแกรมใน Excel) มาช่วย
    4. Power Query

    ซึ่ง Power Query นี่แหละเป็นวิธีที่ง่ายแต่ว่าทรงพลังมากๆ ซึ่งเป็นสิ่งที่ผมจะเน้นในหนังสือเล่มนี้ครับ

    คำนวณแปลงข้อมูลดิบให้เป็นผลสรุป

    ขั้นตอนนี้ มีแนวทางการทำหลักๆ 2 วิธี คือ

    1. การเขียนสูตรสรุปผล เช่น พวก SUMIFS, COUNTIFS
    2. การใช้ PivotTable จะสรุปเบื้องต้นด้วยลาก Field มาเลย หรือจะสร้างการคำนวณพิเศษจาก Calculated Field หรือสร้างสูตรสรุปข้อมูลที่ Advance ขึ้นไปอีกด้วย Measure ก็ได้

    ซึ่งส่วนตัวผมเองขอเชียร์การใช้เครื่องมืออย่าง PivotTable มากกว่าเพราะมันทั้งง่ายในการสร้างและปรับเปลี่ยนมุมมองได้ง่ายด้วย คนทั่วไปใครๆ ก็ใช้ได้ แถมยังใช้เวลาเรียนรู้น้อยกว่าการเขียรสูตรมากเลย และยังผนวกกับการใช้เรื่องมือ Slicer ที่สามารถใช้ Filter Pivot Table ได้หลายตารางพร้อมกันยิ่งเจ๋งเลย 

    ดังนั้นในหนังสือเล่มนี้เราจะเน้นกันที่การใช้ Pivot Table กันครับ คนไหนที่ยังใช้ไม่เป็นก็ไม่ต้องกังวล เพราะเราจะทบทวนพื้นฐานความรู้ Pivot Table ให้ในบทที่เป็น Workshop ด้วยครับ

    Visualization

    ขั้นตอนนี้ก็มักขึ้นอยู่กับวิธีที่เราเลือกสรุปข้อมูลเช่นกัน ถ้าตอนแรกเขียนสูตรมา ก็ต้องสร้างกราฟแบบปกติ

    ถ้าใช้ Pivot Table ก็ต้องสร้างกราฟแบบ Pivot Chart

    ซึ่งกราฟแบบปกติจะมีความยืดหยุ่นมากกว่า เช่น สามารถใช้กราฟได้ทุกประเภทรวมถึง Scatter Plot ด้วย (Pivot Chart ทำ Scatter Plot ไม่ได้) รวมถึงการเขียนสูตรจะช่วยเตรียมข้อมูลในการทำกราฟแบบพิสดารได้ดีกว่า PivotTable มากเลย

    ตรงนี้เหมือนว่าการใช้ Pivot Table จะเสียเปรียบพอสมควร ซึ่งทาง Microsoft เองเลยทำเครื่องมือใหม่มาใช้เพื่อทำกราฟหรือ Visualization เจ๋งๆ โดยเฉพาะ นั่นก็คือ Power BI นั่นเอง 

    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล 363

    โดยเจ้าตัวนี้มีความคล้ายกับการใช้งาน Pivot Table / Pivot Chart ค่อนข้างมาก แต่เจ๋งกว่าในหลายๆ ด้าน เช่น สามารถกดที่กราฟเพื่อ Filter ข้อมูลส่งไปควบคุมกราฟตัวอื่นแสดงเฉพาะสิ่งที่เลือก (ทำเหมือนว่ากราฟเป็น Slicer นั่นแหละ) หรือ Drill Down ขุดลึกลงไปดูข้อมูลชั้นถัดไปได้ แถมยังรองรับการสร้างหรือดาวน์โหลดกราฟแบบแปลกๆ ขึ้นมาเองได้ด้วย (เรียกว่า Custom Visual)

    อย่างไรก็ตามกราฟส่วนใหญ่ที่ทุกคนทำก็มักจะไม่พ้นกราฟแท่ง กราฟเส้น กราฟวงกลม แบบธรรมดาๆ นี่แหละครับ ดังนั้นการใช้ Pivot Table ธรรมดาแล้วสร้างเป็น Pivot Chart เมื่อประกอบกับ Slicer แล้วก็สามารถช่วยให้เราสร้าง Dashboard เจ๋งๆ ได้แล้ว

    สรุปและตีความหมายนำข้อมูลไปใช้ประโยชน์จริง ๆ

    ขั้นตอนนี้ต้องอาศัยการใช้เวลากับการสำรวจผลลัพธ์ที่ได้ว่ามีประเด็นอะไรที่น่าสนใจหรือไม่? เช่น 

    • สินค้าไหนขายดี/ไม่ดี อะไรคือสินค้าระดับ Top ไม่กี่ตัวที่สร้างรายได้มหาศาล
    • ลูกค้ารายได้คือลูกค้าที่สร้างรายได้ให้บริษัทมากที่สุดอันดับต้นๆ
    • สัดส่วนการขายสินค้าแต่ละประเภทเป็นกี่ %
    • sales คนไหนประสิทธิภาพสูง/ต่ำ
    • ทำกราฟแสดงความสัมพันธ์ของตัวแปรต่างๆ input แล้ว Output มีความสัมพันธ์อย่างไร? 

    ซึ่งเรื่องพวกนี้เราสามารถทำตารางสรุปออกมาได้เลยอยู่แล้วใน Pivot Table เช่น 

    • แสดงสัดส่วนด้วยการปรับการแสดงข้อมูล Show Value As ให้เป็น %
    • หาสินค้าระดับ Top ด้วยใช้ Sort เรียงข้อมูลจัดอันดับ หรือการ Filter แบบ Top N เพื่อแสดงเฉพาะข้อมูลตัว Top หรือ Bottom ตามที่ต้องการ

    ทั้งนี้เพื่อหาทางนำ Insight ที่ได้ไปพัฒนาตัวธุรกิจของบริษัทเราต่อไป ตรงขั้นตอนนี้แหละถึงจะเกิดคุณค่าจริงๆ กับบริษัทของคุณ ซึ่งตรงนี้มันแล้วแต่ธุรกิจใครธุรกิจมัน หนังสือสอน Excel คงสอนเรื่องนี้ไม่ได้นะครับ

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

    จำเอาไว้ให้ดีว่า การได้แค่ตัวเลขในรายงานออกมา แต่ไม่ได้ตีความหมายนำไปปรับปรุงการทำงานอะไรเลย มันก็ไม่มีประโยชน์อยู่ดีครั

    ทำซ้ำหากข้อมูลมีการเปลี่ยนแปลง

    การทำซ้ำนี่แหละคือหัวใจของงาน Routine วิธีไหนสามารถทำซ้ำได้รวดเร็วเท่าไหร่ วิธีนั้นยิ่งมีประสิทธิภาพสูง ยิ่งเราลดการ Manual ได้มากเท่าไหร่ ยิ่งสามารถทำซ้ำได้รวดเร็วมากขึ้นเท่านั้น

    ซึ่งหนังสือเล่มนี้จะเน้นช่วยให้ขั้นตอนนี้ทำได้ง่ายที่สุด ด้วย Power Query + Pivot Table จะทำให้คุณสามารถ “แค่กดปุ่ม Refresh เท่านั้น” 

    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล 364

    คิดดูว่าจะเจ๋งแค่ไหน ถ้าจะทำรายงานเดือนใหม่ได้แค่การกด Refresh แค่ปุ่มเดียวจบ (นอกจากจะกด Refresh เอง เราสามารถตั้งให้มัน Auto Refresh ทุกๆ xx นาทีได้ด้วยนะ) ซึ่งผมคิดว่าไม่มีอะไรเจ๋งและน่าทึ่งกว่านี้อีกแล้วล่ะครับ ^^

    ปัญหาของการเตรียมข้อมูลเพื่อทำ Pivot Table

    ถ้าใครเคยใช้ Pivot Table มาก่อนจะรู้ว่าตอนทำ Report ด้วย Pivot Table นี่มันง่ายมากจริงๆ นะ เพราะเราแค่ลาก Field ไปลง Block 4 ช่องที่กำหนดไม่กี่วินาทีก็เสร็จแล้ว

    ดังนั้นความยากของการทำ Pivot Table จริงๆ แล้วไม่ได้อยู่ที่ตอนทำ Pivot Table แต่อยู่ที่การเตรียมข้อมูลให้อยู่ในรูปแบบที่เหมาะสมตั้งแต่แรก หรือที่เรียกว่า “การ Clean ข้อมูล” ต่างหากล่ะ

    ปัญหา 1 : ข้อมูลไม่อยู่ในรูปแบบ Database

    ปัญหาแรกเลยคือ ข้อมูลที่เตรียมไว้ไ่ม่อยู่ในรูปแบบ Database

    ลักษณะข้อมูลที่เป็น Database เป็นยังไง?

    1. เก็บข้อมูลเป็นตาราง โดยมีหัวตาราง 1 บรรทัด แค่ครั้งเดียวพอ
    2. หัวตารางบอกว่าข้อมูลในคอลัมน์นั้นคือเรื่องอะไร และมีครบทุกคอลัมน์
    3. แต่ละคอลัมน์เก็บข้อมูลเรื่องเดียวกันทั้งคอลัมน์
    4. ไม่มีการละเว้นข้อมูลเอาไว้ในฐานที่เข้าใจ ยกเว้นจะหมายถึงช่องที่เป็นค่าว่างจริงๆ
    5. เก็บแค่ตัวข้อมูล ไม่ต้องมีบรรทัดสรุปข้อมูล (เพราะเดี๋ยวเราจะไปใช้ Pivot Table สรุปไง)
    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล 365

    ประเด็นที่จะทำให้หลายคนมีปัญหาในเรื่องนี้ คือ บางครั้งข้อมูลที่ได้มา ไม่ได้เก็บข้อมูลเรื่องเดียวกันทั้งคอลัมน์ ซึ่งสาเหตุมักจะเกิดจากเราต้องการให้ง่ายต่อคนกรอกข้อมูล จึงเลือกที่จะให้กรอกข้อมูลลงใน Excel ในรูปแบบของแบบฟอร์ม หรือกรอกลงไปใน Report เลยมากกว่า ทั้งนี้เพราะการ Input ข้อมูลลงไปในรูปแบบ Database ตรงๆ เลยมันยากและซ้ำซ้อนมากนั่นเอง

    บางทีเราอาจได้ข้อมูลมาแบบนี้ ซึ่งเรียกว่าอยู่ในรูปแบบของ Report มากกว่า Database ซึ่งแม้จะดูแล้วเข้าใจง่าย แต่เอาไปทำงานต่อได้ยาก เพราะจะอ้างอิงข้อมูลค่อนข้างลำบาก

    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล 366

    ซึ่งหลายองค์กรแก้ปัญหานี้ด้วยการมีโปรแกรมสำเร็จรูปในการกรอกข้อมูล แล้วสามารถ Export ข้อมูลออกมาทำต่อใน Excel ได้ ซึ่งการ Export ข้อมูลจากโปรแกรมจะมี 2 ลักษณะใหญ่ๆ คือ 

    1. ออกมาเป็นรูปแบบ Report : ถ้าเป็นแบบนี้ต้องมานั่งแปลงข้อมูลก่อน ก็จะยากกว่า
    2. ออกมาเป็นรูปแบบ Database : ถ้าเป็นแบบนี้ก็จะสบายหน่อยครับ แต่ถ้ามีหลายไฟล์ก็เริ่มยาก

    ปัญหา 2 : ข้อมูลกระจัดกระจายอยู่หลายที่

    ไฟล์ต้นทางอาจมีหลายไฟล์หรือหลาย Table ซึ่งจะมี 2 ลักษณะ คือ 

    1. เป็นฐานข้อมูลเดียวกัน หน้าตาโครงสร้างเหมือนกัน แต่ข้อมูลคนละชุด เช่น เป็นคนละเดือน เป็นต้น
    2. เป็นฐานข้อมูลคนละเรื่องเลย แต่มีความเกี่ยวข้องกับข้อมูลหลักที่เราต้องการใช้ เช่น เป็นตารางอ้างอิงที่บอกว่ารหัสสินค้าแต่ละ code คือสินค้าอะไร กลุ่มไหน เป็นต้น

    ถ้าเป็นแบบข้อ 1 เราก็ต้อง Copy Data มาต่อท้ายรวมกันเป็นไฟล์เดียว (จำนวนแถว หรือ Record เยอะขึ้น)

    ถ้าเป็นแบบข้อ 2 เราก็ต้องใช้พวกกลุ่ม LOOKUP เพื่อ Map ดึง Field ต้องการมาใช้อีกที (คอลัมน์ หรือ Field เยอะขึ้น)

    ซึ่งทั้งสองแบบนี้เสียเวลามากๆ จริงมั้ยครับ??

    ปัญหา 3 : ข้อมูลมีไฟล์หลาย Format

    ไฟล์ต้นทางอาจจะอยู่ในหลายรูปแบบ เช่น Excel, Text File, CSV, Website, Access, Database จริงๆ และอีกมากมาย ทำให้เราต้องหาเอาข้อมูลเหล่านั้นมายัดลงในไฟล์ Excel อีกที ซึ่งก็เสียเวลาอีก

    ปัญหา 4 : ยังมี Field ที่ต้องการไม่ครบ

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

    เช่น ถ้าอยากจะวิเคราะห์ว่าวันธรรมดากับวันหยุดสุดสัปดาห์มีผลต่อยอดขายต่างกันอย่างไร? เราก็ต้องสร้าง Field ที่บอกว่าวันที่เราสนใจนั้นๆ เป็นวันธรรมดา หรือ วันหยุด ให้ได้ซะก่อน 

    ซึ่งเราอาจจะใช้ฟังก์ชันพวก WEEKDAY มาเช็คก็ได้ครับ แล้วอาจใช้ IF มาช่วยอีกทีว่าถ้าออกมาเป็นวันอะไรแล้วจะให้ขึ้นแสดงว่าอะไร? ซึ่งก็ต้องใช้ความรู้เรื่องการเขียนสูตรมาเติมเต็มเรื่องพวกนี้อีก ซึ่งบางคนอาจจะยังเขียนสูตรได้ไม่เก่ง ก็จะติดปัญหาอีก

    แล้วจะทำไงให้ข้อมูลพร้อมใช้?

    ยิ่งข้อมูลต้นฉบับมีหน้าตาต่างจากรูปแบบ Database ที่ต้องการมากเท่าไหร่ เราจะยิ่งปวดหัวมากขึ้นในการแปลงข้อมูลพวกนี้ ซึ่งแนวทางในการทำสามารถทำได้หลายแบบ เช่น 

    • เตรียมด้วยสูตรกลุ่ม Lookup เช่น VLOOKUP, INDEX, MATCH, OFFSET, INDIRECT 
    • เตรียมด้วย VBA เช่น เขียนให้ Copy ข้อมูลจากหลายที่มารวมกันในที่เดียว

    ในเมื่อไม่ใช่ทุกคนที่จะทำเรื่องสูตรยากๆ และ VBA ได้ สุดท้ายคนส่วนใหญ่ก็จบลงที่การทำแบบ Manual นี่แหละครับ ซึ่งอาจใช้การ Copy Paste หรือตัดใจไม่ทำ Pivot Table แต่ไป Manual เขียนสูตรทีละช่องที่ตัว Report เลย ซึ่งก็จะทำให้เกิดความยากอีกแบบนึงอีก ซึ่งเสียเวลามากๆ 
    ทางออกคือ เครื่องมือที่ชื่อว่า Power Query นี่แหละ ซึ่งจะช่วยให้เราสามารถแปลงข้อมูลให้อยู่ในรูปแบบ Database ที่ต้องการได้อย่างง่ายดายมากๆ ซึ่งต่อจากส่วนนี้เราจะไปลงรายละเอียดเรื่อง Power Query กันแล้วล่ะครับ!!

    บทความนี้มีที่มายังไง?

    บทความนี้เป็นส่วนหนึ่งของตัวอย่างจาก หนังสือ Excel Power Up! เพิ่มพลังการใช้ Excel ของคุณด้วย Power Query โดยผมเอาเนื้อหาบทแรกๆ ซัก 25-30% มาลงในเว็บให้อ่านกันฟรีๆ เลย คนอ่านจะได้ตัดสินใจได้ว่าอยากจะรู้เรื่องราวหลังจากนั้นอีกมั้ย? ซึ่งแค่นี้ก็น่าจะช่วยงานคุณได้เยอะพอสมควรแล้วล่ะ


    หากสนใจอ่านตัวอย่างบทอื่นๆ ของหนังสือ ลองดูที่สารบัญข้างล่างได้เลยครับ ^^

    สารบัญ Power Query

    บทนำ : ทำไมต้องเรียนรู้ Power Query? [ไฟล์ประกอบ]
    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล [ไฟล์ประกอบ]
    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query [ไฟล์ประกอบ]
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query [ไฟล์ประกอบ]
    บทที่ 4 : งานที่ยุ่งยากใน Excel กลับง่ายมากใน Power Query [ไฟล์ประกอบ]
    บทที่ 5 : การจัดการหัวตาราง [ไฟล์ประกอบ]
    บทที่ 6 : การคำนวณเบื้องต้น [ไฟล์ประกอบ]
    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ [ไฟล์ประกอบ]
    บทที่ 8 : การสร้างคอลัมน์ใหม่แบบกำหนดเองด้วย Custom Column [ไฟล์ประกอบ]
    บทที่ 9 : การสร้างคอลัมน์ใหม่ตามเงื่อนไข [ไฟล์ประกอบ]
    บทที่ 10 : การรวมกลุ่มข้อมูลด้วย Group By [ไฟล์ประกอบ]
    บทที่ 11 : การพลิกคอลัมน์เป็นหัวตารางด้วย Pivot Column [ไฟล์ประกอบ]
    บทที่ 12 : การยุบหัวตารางหลายคอลัมน์ให้เหลือคอลัมน์เดียวด้วย Unpivot [ไฟล์ประกอบ]
    บทที่ 13 : การแยกข้อมูลในคอลัมน์เดียวออกจากกันด้วย Split Column [ไฟล์ประกอบ]
    บทที่ 14 : การใช้ Query เป็นตัวแปร [ไฟล์ประกอบ]
    บทที่ 15 : การรวมข้อมูลจากหลาย Query [ไฟล์ประกอบ]
    บทที่ 16 : การดึงข้อมูลจาก Excel ไฟล์อื่น [ไฟล์ประกอบ]
    บทที่ 17 : การดึงข้อมูลจาก Text File/ CSV File [ไฟล์ประกอบ]
    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder [ไฟล์ประกอบ]
    บทที่ 19 : การดึงข้อมูลจากแหล่งอื่นๆ
    บทที่ 20 : การเตรียม Data เพื่อทำ Dashboard
    บทที่ 21 : การทำ Pivot Table เพื่อสร้าง Dashboard
    บทที่ 22 : เจาะลึก M Code หัวใจของ Power Query
    บทที่ 23 : Function คือ ขุมพลังที่แท้จริงของ M Code [ไฟล์ประกอบ]
    บทที่ 24 : ตัวอย่างการสร้าง Custom Function [ไฟล์ประกอบ]
    บทที่ 25 : การวน Loop [ไฟล์ประกอบ]
    บทส่งท้าย : เทพที่แท้จริง

    อ่านเนื้อหาบท 22 เป็นต้นไปแบบปรับปรุงใหม่ได้ฟรี ที่นี่ (อัปเดทเรื่อยๆ)

    Facebook Group : Power Query Thailand

    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล 367
    Facebook Group : Power Query Thailand

    ผู้ที่สนใจ Power Query อย่างคุณที่มาอ่านบทความนี้ ผมขอเชิญชวนเข้ากลุ่มปิด Power Query Thailand ได้ตาม Link นี้ครับ

  • ตัวอย่างเนื้อหาจากหนังสือ Excel Power Up! บทนำ : ทำไมต้องเรียนรู้ Power Query?

    ตัวอย่างเนื้อหาจากหนังสือ Excel Power Up! บทนำ : ทำไมต้องเรียนรู้ Power Query?

    บทความนี้มีที่มายังไง?

    บทความนี้เป็นส่วนหนึ่งของตัวอย่างจาก หนังสือ Excel Power Up! เพิ่มพลังการใช้ Excel ของคุณด้วย Power Query โดยผมเอาเนื้อหาบทแรกๆ ซัก 25-30% มาลงในเว็บให้อ่านกันฟรีๆ เลย คนอ่านจะได้ตัดสินใจได้ว่าอยากจะรู้เรื่องราวหลังจากนั้นอีกมั้ย? ซึ่งแค่นี้ก็น่าจะช่วยงานคุณได้เยอะพอสมควรแล้วล่ะ


    หากสนใจอ่านตัวอย่างบทอื่นๆ ของหนังสือ ลองดูที่สารบัญข้างล่างได้เลยครับ ^^

    สารบัญ Power Query

    บทนำ : ทำไมต้องเรียนรู้ Power Query? [ไฟล์ประกอบ]
    บทที่ 1 : เข้าใจขั้นตอนการทำรายงานสรุป / วิเคราะห์ข้อมูล [ไฟล์ประกอบ]
    บทที่ 2 : ก้าวสู่การเตรียมข้อมูลยุคใหม่ด้วย Power Query [ไฟล์ประกอบ]
    บทที่ 3 : ภาพรวมการทำงานกับ Power Query [ไฟล์ประกอบ]
    บทที่ 4 : งานที่ยุ่งยากใน Excel กลับง่ายมากใน Power Query [ไฟล์ประกอบ]
    บทที่ 5 : การจัดการหัวตาราง [ไฟล์ประกอบ]
    บทที่ 6 : การคำนวณเบื้องต้น [ไฟล์ประกอบ]
    บทที่ 7 : การกำจัดข้อมูลที่ไม่ต้องการ [ไฟล์ประกอบ]
    บทที่ 8 : การสร้างคอลัมน์ใหม่แบบกำหนดเองด้วย Custom Column [ไฟล์ประกอบ]
    บทที่ 9 : การสร้างคอลัมน์ใหม่ตามเงื่อนไข [ไฟล์ประกอบ]
    บทที่ 10 : การรวมกลุ่มข้อมูลด้วย Group By [ไฟล์ประกอบ]
    บทที่ 11 : การพลิกคอลัมน์เป็นหัวตารางด้วย Pivot Column [ไฟล์ประกอบ]
    บทที่ 12 : การยุบหัวตารางหลายคอลัมน์ให้เหลือคอลัมน์เดียวด้วย Unpivot [ไฟล์ประกอบ]
    บทที่ 13 : การแยกข้อมูลในคอลัมน์เดียวออกจากกันด้วย Split Column [ไฟล์ประกอบ]
    บทที่ 14 : การใช้ Query เป็นตัวแปร [ไฟล์ประกอบ]
    บทที่ 15 : การรวมข้อมูลจากหลาย Query [ไฟล์ประกอบ]
    บทที่ 16 : การดึงข้อมูลจาก Excel ไฟล์อื่น [ไฟล์ประกอบ]
    บทที่ 17 : การดึงข้อมูลจาก Text File/ CSV File [ไฟล์ประกอบ]
    บทที่ 18 : การดึงข้อมูลจากทุก File ที่ต้องการใน Folder [ไฟล์ประกอบ]
    บทที่ 19 : การดึงข้อมูลจากแหล่งอื่นๆ
    บทที่ 20 : การเตรียม Data เพื่อทำ Dashboard
    บทที่ 21 : การทำ Pivot Table เพื่อสร้าง Dashboard
    บทที่ 22 : เจาะลึก M Code หัวใจของ Power Query
    บทที่ 23 : Function คือ ขุมพลังที่แท้จริงของ M Code [ไฟล์ประกอบ]
    บทที่ 24 : ตัวอย่างการสร้าง Custom Function [ไฟล์ประกอบ]
    บทที่ 25 : การวน Loop [ไฟล์ประกอบ]
    บทส่งท้าย : เทพที่แท้จริง

    อ่านเนื้อหาบท 22 เป็นต้นไปแบบปรับปรุงใหม่ได้ฟรี ที่นี่ (อัปเดทเรื่อยๆ)

    Facebook Group : Power Query Thailand

    ตัวอย่างเนื้อหาจากหนังสือ Excel Power Up! บทนำ : ทำไมต้องเรียนรู้ Power Query? 368
    Facebook Group : Power Query Thailand

    ผู้ที่สนใจ Power Query อย่างคุณที่มาอ่านบทความนี้ ผมขอเชิญชวนเข้ากลุ่มปิด Power Query Thailand ได้ตาม Link นี้ครับ


    ขยันแล้วทำไมไม่ได้ดีอย่างที่หวัง?

    เบื่อมั้ย? ที่คุณต้องทำงานรายงานแบบเดิม ซ้ำๆ เดิม ทุกเดือน หรือ ทุกอาทิตย์…

    เบื่อมั้ย? ที่คุณต้องคอยขอร้องให้คนอื่นช่วยทำรายงานให้ ซึ่งบางทีก็ไม่ว่าง กว่าจะได้ก็ช้า หรือทำมาผิด…

    เบื่อมั้ย? ขยันทำงานหนักแทบตาย ทำงานหนัก เลิกงานดึก ไม่มีเวลาดูแลตัวเอง ไม่มีเวลาดูแลคนที่เรารัก 

    แต่ทำไมไม่ได้โปรโมทซะที…(ฟะ)

    ที่ผ่านมา ผมได้พบกับ “คนขยัน” มากมาย ที่อาจจะยังขยันไม่ถูกวิธี เช่น ขยันในสิ่งที่ให้คอมพิวเตอร์ทำแทนได้ ซึ่งคอมพิวเตอร์ย่อมทำได้เร็วและแม่นยำกว่ามนุษย์อยู่แล้ว ซึ่งวิธีขยันที่ถูกต้อง คือ ขยันหาความรู้และฝึกทักษะใหม่ๆ ที่จะช่วยให้เราทำงานหรือใช้ชีวิตได้ดีขึ้นต่างหาก

    จากประสบการณ์ที่ผมที่ได้มีโอกาสไปอบรมบุคลากรบริษัทต่างๆ มามากมาย สาเหตุที่ทำให้หลายคนไม่เก่ง Excel เท่าที่ควร เป็นเพราะมีความอดทนในการทำงานถึกๆ ซ้ำๆ มากเกินไป จนไม่คิดว่าสิ่งที่ทำอยู่มันเป็นปัญหา พอไม่คิดว่าเป็นปัญหาก็จะไม่หาทางพัฒนาหาวิธีที่ดีขึ้นกว่าเดิม ทั้งๆ ที่บางเรื่องแค่ Google นิดเดียวก็รู้แล้ว

    โดยเฉพาะการใช้ Excel ซึ่งเป็นโปรแกรมที่คนใช้เก่งกับไม่เก่งสร้างผลลัพธ์ที่แตกต่างกันมาก หากนำมาใช้อย่างเหมาะสม คุณจะสามารถทำงานที่ปกติใช้เวลาทำเป็นวัน (ถ้าทำผิดวิธี) เสร็จได้ในเวลาไม่กี่นาที! แต่หลายคนกลับไม่ได้ใช้โอกาสนั้น อาจเป็นเพราะเค้าเหล่านั้นคิดว่าการจะสร้างงานเจ๋งๆ ด้วย Excel มันยากเกินไป…

    เทคโนโลยีดีขึ้น แล้วคุณนำมาใช้หรือยัง?

    ผมขอบอกเลยว่าจะใช้ Excel ทำงานให้ได้ผลดีมันไม่ได้ยากอย่างที่คิด ทั้งนี้เพราะเทคโนโลยีมันดีขึ้นกว่าแต่ก่อนมากแล้ว ลองคิดดูสิว่า Excel มีมาตั้งแต่ปี ค.ศ. 1985 (บนเครื่องแมค) จนถึงปี 2019 ที่ผมเขียนหนังสือเล่มนี้มันก็ตั้ง 34 ปีแล้วนะ แล้วคุณคิดว่า Excel จะทำได้แค่ทำตาราง เขียนสูตรเพื่อแก้ปัญหาเหมือนเดิมแค่นั้นจริงๆ เหรอ?

    Excel ยุคใหม่ มีเครื่องมือดีๆ มากมายกว่าแต่ก่อนมาก แต่คุณอาจไม่รู้จักหรือยังไม่ได้นำมาใช้อย่างเต็มที่ หากคุณยังใช้ Excel ด้วยวิธีเดิมๆ ที่คุณเคยทำอยู่ งานจะเสร็จเร็วขึ้นได้อย่างไร? เราจึงต้องมาเรียนรู้วิธีใหม่ๆ ด้วย ยกตัวอย่างเช่น Flash Fill และ Power Query ซึ่งเป็นเครื่องมือที่เจ๋งและใช้ง่ายมากๆ แบบที่ถ้าลองซักครั้งแล้วจะติดใจเลยล่ะ!

    ตัวอย่างการใช้ Flash Fill ในการกรอกข้อมูล

    ตั้งแต่ Excel 2013 ขึ้นไป เราสามารถใช้เครื่องมือที่เรียกว่า Flash Fill ช่วยกรอกข้อมูลให้เราได้อย่างรวดเร็วโดยแค่ใส่ตัวอย่างผลลัพธ์ที่อยากได้ลงไปในคอลัมน์ถัดจากข้อมูลต้นฉบับ แล้วกด Ctrl+E เท่านั้นเอง

    ตัวอย่างเนื้อหาจากหนังสือ Excel Power Up! บทนำ : ทำไมต้องเรียนรู้ Power Query? 369

    พอ กด Ctrl+E เพื่อเรียกใช้ Flash Fill จะพบว่า Excel เลียนแบบสิ่งที่เราทำได้ในทันที ในแบบที่เราแทบไม่ต้องใช้ฝีมืออะไรเลย! (โคตรขี้โกง!)

    ตัวอย่างเนื้อหาจากหนังสือ Excel Power Up! บทนำ : ทำไมต้องเรียนรู้ Power Query? 370

    นี่เป็นตัวอย่างของการใช้เครื่องมือยุคใหม่ว่ามันมีความฉลาดมากขึ้นขนาดไหน ซึ่งในหนังสือเล่มนี้ผมจะแนะนำให้รู้จักอีกเครื่องมือนึงที่เจ๋งกว่า Flash Fill อีก มันมีชื่อว่า Power Query ซึ่งใช้ได้ตั้งแต่ Excel 2010 ขึ้นไป (แต่ถ้าไม่มี Excel version ที่ใช้ได้จริงๆ ก็ยังดาวน์โหลดโปรแกรม Power BI Desktop ซึ่งมี Power Query มาใช้ได้ฟรีๆ ไม่ผิดลิขสิทธิ์นะ)

    หนังสือเล่มนี้เหมาะกับใคร?

    หนังสือเล่มนี้ก็ต้องเหมาะกับคนที่ใช้ Excel ทำงานน่ะสิ 555 แต่ถ้าพูดอย่างนี้มันก็จะกว้างไป ดังนั้นมาดูดีกว่า ว่างานที่เราทำด้วย Excel มัยแบ่งออกเป็นอะไรได้บ้าง?

    แนวทางการใช้ Excel

    • ทำรายงานสรุป / วิเคราะห์ข้อมูล เช่น รายงานยอดขายประจำเดือน
    • ทำแบบฟอร์ม หรือ template คำนวณ เช่น คำนวณยอดผ่อนเงินกู้บ้าน รถ
    • ทำ Project Management เช่น พวก วันเริ่ม/จบ งานย่อยในโปรเจค ทำ Gantt Chart
    • ทำ Model / Simulation / Optimization / Forecast เช่น จะผลิตสินค้าตัวไหน ส่งสินค้าทางไหน จะแบ่งงานให้ใคร ให้ได้กำไรสูงสุด หรือ คาดคะเนผลประกอบการ 5 ปีข้างหน้า เป็นต้น

    ในหนังสือเล่มนี้ผมจะเน้นการทำงานเกี่ยวกับเรื่อง “การทำรายงานสรุป / วิเคราะห์ข้อมูล” เป็นหลัก เพราะเป็นลักษณะการทำงานแบบที่ใช้กันมากและสามารถพัฒนาให้มีประสิทธิภาพเพิ่มขึ้นได้มากเช่นกัน

    ตัวอย่างของงานประเภทนี้ก็คือรายงานทุกประเภท เช่น สรุปยอดขาย สรุปต้นทุน กำไร สรุปจำนวนสินค้าใน Stock สรุปจำนวนผู้รับการอบรม เป็นต้น ซึ่งเป็นเรื่องที่ใครๆ ก็ทำเป็นส่วนใหญ่จริงมั้ยครับ?

    ส่วนใหญ่งานพวกนี้จะเป็นงาน Routine ที่ต้องทำซ้ำๆ ทุกสัปดาห์ หรือ ทุกเดือน และถ้าทำไม่ถูกวิธี จะกินเวลามหาศาล แต่ถ้าทำถูกวิธีจะสบายมากๆ เลยครับ

    โดยจริงๆ แล้ววิธีทำงาน Ad hoc กับงาน Routine ก็มีความแตกต่างกันด้วย

    งาน Ad hoc หรือ งานแบบสั่งมาด่วนๆ ไม่ได้วางแผนไว้ ไม่มีรูปแบบที่แน่นอน เราอาจจะทำงานนั้นๆ ครั้งเดียวโดยที่ไม่ได้ทำซ้ำอีก ดังนั้นเราจะใช้เครื่องมืออะไรก็ได้ที่ง่ายที่สุดในการทำ ไม่ต้องคิดอะไรมากไปกว่าทำยังไงก็ได้ให้เสร็จเร็วที่สุด (และไม่ผิด) เช่น Filter แล้วแก้, Remove Duplicates, Flash Fill, Find/Replace

    งาน Routines งานที่ต้องเป็นประจำซ้ำๆ เดิม อาจมีเปลี่ยนแค่ข้อมูลแต่รูปแบบค่อนข้างเหมือนเดิม ดังนั้นเราควรจะหาวิธีที่ทำซ้ำได้ง่ายและรวดเร็วที่สุด ซึ่งการวางแผนตั้งแต่ต้นเป็นสิ่งที่สำคัญ (มากกก) หากทำมั่วๆ ไปให้เสร็จเร็วที่สุดได้ในครั้งแรก แต่พอจะทำครั้งต่อไปกลับต้องใช้เวลาเทียบเท่าครั้งแรกเลย แบบนี้ก็จะถือว่าช้าในระยะยาวครับ วิธีที่ดีกว่าคือยอมลงทุนเวลาวางแผนและออกแบบการทำงานให้ดีแต่แรก เพื่อให้ทำซ้ำได้เร็วๆ แบบนี้จะคุ้มค่ากว่า เช่น การเขียนสูตร การใช้ VBA การใช้ Pivot Table รวมถึงการใช้ Power Query

    เนื่องจากหนังสือเล่มนี้จะเน้นที่งานพวกการทำ Report ซึ่งเป็นงาน Routine และเราต้องการให้คนทั่วไปที่ไม่ต้องเก่ง Excel ขั้นเทพก็สามารถทำได้เหมือนกัน ดังนั้นเราจะเลือกใช้วิธีการใช้เครื่องมือ Pivot Table และ Power Query ควบคู่กันนะครับ

    ผู้อ่านต้องมีความรู้อะไรมาก่อนมั้ย?

    เนื่องจากเราจะใช้เครื่องมือสมัยใหม่อย่าง Power Query และ Pivot Table ในการทำงานโดยจะพึ่งพาการใช้สูตรต่างๆ น้อยมาก ดังนั้นหากใครเขียนสูตร Excel ไม่เก่งก็ไม่ต้องกังวลครับ เพราะในเล่มนี้เราจะไม่ได้เขียนสูตรใน Excel เลย แต่ถ้าใครมีพื้นฐานการเขียนสูตรหรือใช้เครื่องมือใน Excel มาก่อน จะเรียนรู้ได้เร็วกว่า เพราะผมจะมีเปรียบเทียบให้ว่าเครื่องมือ Power Query แต่ละตัวคล้ายกับเครื่องมือหรือฟังก์ชันไหนใน Excel บ้าง

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

    ดังนั้นใครอยากเก่งเขียนสูตร ผมบอกเลยว่าหนังสือเล่มนี้จะไม่เหมาะกับคุณนะ (เรื่องสูตรไปหาเอาตามเว็บได้) แต่ถ้าอยากทำงานพวก Report เร็วขึ้นได้ซัก 2-3 เท่าและยินดีที่จะเปิดใจเรียนรู้วิธีใหม่ ก็เชิญอ่านต่อได้เลย

    การเปิดใจนั้นสำคัญมาก เหมือนกับผมกำลังแนะนำอาวุธใหม่ให้คุณใช้ ผมจะเสียดายมากหากคุณบอกว่า “ไม่เป็นไร อาวุธใหม่อะไรน่ะไม่สนหรอก กองทัพเราต่อสู้ด้วยมีดดาบจนเชี่ยวชาญแล้ว…”

    เอาล่ะ เกริ่นไปก็เท่านั้นแหละครับ เปิดดูเนื้อหาจริงๆ ก็จะรู้เองว่าเหมาะกับเราหรือไม่เนอะ เพื่อไม่ให้เสียเวลา มาลุยกันเลยครับ!

  • สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 3 ระบุช่วงเวลา

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 3 ระบุช่วงเวลา

    บทความนี้ก็จะเป็นการสอนใช้ Excel บริหาร Stock เป็นตอนที่ 3 แล้ว (ซึ่งเราค่อยๆ พัฒนามันขึ้นมาเรื่อยๆ) และในตอนนี้เราจะทำให้มันสามารถดูข้อมูลเฉพาะมนช่วงเวลาที่เราสนใจได้ครับ

    ในไฟล์ version ก่อนหน้านี้เราได้มีการแยกตารางซื้อขายออกมาเป็นคนละตาราง เพื่อเพิ่มความยืดหยุ่นให้มากขึ้นไปแล้ว มาวันนี้เราจะสามารถกำหนดช่วงเวลาเพื่อที่จะสามารถดูข้อมูลเฉพาะในช่วงที่ระบุได้ด้วย

    Series เรื่องการจัดการ Stock นี้มี 3 ตอน

    สรุปข้อมูลแต่ละตาราง

    ก่อนจะไปเขียนสูตรเพิ่ม ให้แก้ตัวเลขเล็กน้อย ในชีทตารางซื้อ (TableBuy) ดังนี้

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 3 ระบุช่วงเวลา 371

    ตารางขาย เดิมชื่อ TableSale ผมขอเปลี่ยนชื่อเป็น TableSell (เพราะมันจะได้เข้ากับ TableBuy หน่อย 555) แต่ข้อมูลยังเหมือนเดิม คือ

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 3 ระบุช่วงเวลา 372

    กลับมาในชีทตารางสรุป ให้เตรียมตารางดังนี้ครับ

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 3 ระบุช่วงเวลา 373

    จะเห็นว่าในตารางมีการเปลี่ยนชื่อคอลัมน์บางส่วน และเพิ่มคอลัมน์คงเหลือให้มี 2 แบบ คือ คงเหลือสิ้นงวดที่ระบุ กับคงเหลือล่าสุดจริงๆ (เพื่อเอาไว้ reorder เวลาของต่ำกว่าจุดที่ระบุ)

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

    โดยเขียนว่า

    =MAX(TableBuy[วันที่ซื้อ],TableSell[วันที่ขาย])

    สูตรในตาราง Summary ของ Excel บริหาร Stock

    มาดูใสนตารางบ้าง ในแต่ละคอลัมน์ หลักการจะคล้ายเดิมที่เราใช้ SUMIFS แต่จะมีการเพิ่มเงื่อนไขเรื่องวันที่เข้ามา โดยเราจะมีการใช้เครื่องหมายเปรียบเทียบมาช่วยด้วย (ใส่ในรูปแบบที่เป็น Text) เช่น หากต้องการยอดที่เกิดก่อนวันที่กำหนด เราก็จะใส่ Criteria Range เป็นช่วงวันที่ ส่วน Criteria จะเป็น “<“&วันที่ที่กำหนด เป็นต้น

    ตั้งต้นงวด : เอายอดซื้อก่อนต้นงวด-ยอดขายก่อนต้นงวด

    =SUMIFS(TableBuy[จำนวนซื้อ],TableBuy[Product],[@Product],TableBuy[วันที่ซื้อ],"<"&Summary!$B$1)-SUMIFS(TableSell[จำนวนขาย],TableSell[Product],[@Product],TableSell[วันที่ขาย],"<"&Summary!$B$1)

    ซื้อเพิ่มในงวด : สูตรเหมือนซื้อเพิ่มในบทความก่อน แต่เพิ่มเงื่นไขวันที่ว่าต้อง >=วันที่ต้นงวด และ <=วันที่ปลายงวด

    =SUMIFS(TableBuy[จำนวนซื้อ],TableBuy[Product],[@Product],TableBuy[วันที่ซื้อ],">="&Summary!$B$1,TableBuy[วันที่ซื้อ],"<="&Summary!$D$1)

    ขายออกในงวด : สูตรเหมือนซื้อเพิ่มในบทความก่อน แต่เพิ่มเงื่นไขวันที่ว่าต้อง >=วันที่ต้นงวด และ <=วันที่ปลายงวด

    =SUMIFS(TableSale[จำนวนขาย],TableSale[Product],[@Product], TableSell[วันที่ขาย],">="&Summary!$B$1,TableSell[วันที่ขาย],"<="&Summary!$D$1)

    คงเหลือสิ้นงวด :

    =[@ตั้งต้นงวด]+[@ซื้อเพิ่มในงวด]-[@ขายออกในงวด]

    คงเหลือล่าสุด : เอาข้อมูลซื้อลบขายทั้งหมดแบบไม่สนใจวันที่

    =SUMIFS(TableBuy[จำนวนซื้อ],TableBuy[Product],[@Product])-SUMIFS(TableSell[จำนวนขาย],TableSell[Product],[@Product])

    ต้องสั่งเพิ่ม :

    =[@คงเหลือล่าสุด]<[@จุดสั่งของเพิ่ม]

    เมื่อเขียนสูตรครบหมดแล้ว จะได้ดังนี้

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 3 ระบุช่วงเวลา 374

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

  • สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย

    จากที่เราทำไฟล์ Excel บริหาร Stock แบบง่ายสุดๆ (version 1) ไปแล้วในบทความก่อน คราวนี้เราจะมาทำให้ไฟล์มันเจ๋งขึ้นกว่าเดิม โดยการแยกตารางซื้อขายออกมาให้ชัดเจน จะได้บันทึกข้อมูลง่ายขึ้นครับ

    Series เรื่องการจัดการ Stock นี้มี 3 ตอน

    ก่อนอื่นเราเปลี่ยนชื่อ sheet เดิมเป็น summary แล้วสร้าง Sheet เพิ่ม 2 อัน คือ ซื้อ กับ ขาย

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 375

    Sheet ซื้อ : เตรียมคอลัมน์ดังนี้ วันที่ซื้อ, Product, จำนวนซื้อ

    จากนั้นแปลงเป็น Table ซะ โดยกด Ctrl+T แล้วเลือกเรื่องหัวตารางด้วยว่ามีหรือไม่

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 376

    Data Validation

    เดี๋ยวเราจะใส่ Data Validation ลงไปในแต่ละช่อง จะได้กรอกข้อมูลไม่ผิด

    วันที่

    เลือกข้อมูลช่องวันที่ตามรูป แล้วไปที่ Data -> Data Validation

    กำหนดเงื่อนไขตามความเหมาะสม เช่น ผมให้กรอกได้ตั้งแต่วันที่ 1 มกรา ปี 2018 จนถึงวันที่ปัจจุบันเท่านั้น ก็ใส่ = TODAY() ดังรูป

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 377

    จะใส่ Input Message (Guideline ตอนเลือก Cell นั้น) หรือ Error Alert (ข้อความเตือนตอนกรอกผิดจากที่กำหนด) อะไรก็แล้วแต่เลยครับ

    เวลากรอกผิดมันก็จะขึ้นมาเตือนเนอะ คนกรอกจะได้ไม่มั่วซั่วนัก

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 378

    Product

    ในส่วนของ Product เราจะทำเป็น Drop-down List ให้เลือกสินค้าจากตารางหน้าแรกที่เราทำไว้ ซึ่งเดี๋ยวเราจะทำให้มัน Dynamic มีสินค้าเพิ่มได้เรื่อยๆ ดังนั้นจะต้องใช้ความสามารถของ Table มาช่วยแทนการไปเลือก Range ตรงๆ แต่พอ Table อยู่อีก Sheet จะต้องใช้การตั้งชื่อมาช่วย ไม่งั้นข้อมูลจะไม่อัปเดทครับ สรุปทำดังนี้

    ไปที่ Sheet แรก แล้วไป Formula -> Define Name เพื่อตั้งชื่อขึ้นมาใหม่ เช่น ตั้งว่า ProductList แล้วไปเลือก Item สินค้าทั้งหมด ดังรูป

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 379

    ตอนนี้ในชื่อ ProductList จะมี Item สินค้าทั้งหมดแล้ว จากนั้นเราจะเอาชื่อไปใส่ใน Data Validation ตอนเลือกสินค้าอีกที

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 380

    จะใช้วิธีกด F3 เพื่อเลือกชื่อ หรือจะใช้วิธีพิมพ์ชื่อลงไปตรงๆ ก็ได้เช่นกัน

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 381

    จากนั้นใน Column Product ก็จะเลือก Product ได้จาก Drop-Down แล้ว

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 382

    จำนวนซื้อ

    ในช่องนี้เราจะตั้ง Data Validation ว่าต้องเป็นจำนวนเต็มมากกว่า 0

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 383

    แค่นี้ Sheet ซื้อก็ครบทุกช่องแล้ว

    Sheet ขายล่ะ?

    เราจะทำ Data Validation กับ Sheet ขายด้วยเช่นกันครับ วิธีที่ง่ายที่สุดคือ Copy Table จากตารางซื้อไปเลยครับ แล้วเปลี่ยนหัวตารางให้เหมาะสม จากคำว่าซื้อเป็นขาย

    จะเห็นว่าเงื่อนไข Data Validation ทุกอย่างยังใช้ได้ทั้งหมด (ถ้าจริงๆ มันต้องไม่เหมือนกันในบางตัวก็ปรับแก้เอาครับ)

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 384

    ตั้งชื่อตารางทั้งหมด

    ตอนนี้ตารางแต่ละอันมีชื่อเป็น Table1 2 3 ทำให้อ่านไม่รู้เรื่อง ให้เราตั้งชื่อใหม่เป็นอะไรที่รู้เรื่องมากขึ้น เช่น TableSummary, TableBuy, TableSale เป็นต้น

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 385

    กรอกข้อมูลการซื้อของลงไป

    ผมกรอกข้อมูลการซื้อมั่วๆ ลงไปดังนี้

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 386

    ทำการสรุปข้อมูลการซื้อที่ชีท Summary

    เราลบข้อมูลการซื้อเดิมที่มั่วลงไปทิ้งไปก่อน ซึ่งเดี๋ยวเราจะไปดึงข้อมูลการซื้อของของสินค้าแต่ละอันมาจาก Sheet ซื้อแทน

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 387

    จากนั้นเราจะใช้สูตร SUMIFS เพื่อ SUM ข้อมูลการซื้อทั้งหมดของ Product ที่เราสนใจ โดยเขียนสูตรตาม GIF นี้ได้เลย

    ซื้อเพิ่ม = SUMIFS(TableBuy[จำนวนซื้อ],TableBuy[Product],[@Product])

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 388

    ใน Sheet ขายออกก็ทำเช่นเดียวกัน ผมใส่ตัวเลขการขายมั่วๆ ไปว่า

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 389

    ใน sheet summary ก็ลบข้อมูลเดิมทิ้งไปก่อน แล้วเขียนสูตรในช่องแรกของขายออก
    ขายออก = SUMIFS(TableSale[จำนวนขาย],TableSale[Product],[@Product])

    สอนทำไฟล์ Excel บริหาร Stock สินค้าคงคลัง : Version 2 แยกตารางซื้อขาย 390

    ไฟล์ Excel บริหาร Stock เก่งขึ้นมาหน่อยนึงแล้วล่ะ

    ในครั้งนี้ เราก็ทำให้ไฟล์บริหาร Stock อันนี้มันเก่งขึ้นมาได้อีกเล็กน้อยแล้วล่ะ โดยแยกการบันทึกซื้อขายแต่ละครั้งออกจากกันเพื่อความสะดวก

    เดี๋ยวในครั้งถัดไป เราจะทำให้เก่งขึ้นอีก เช่น สามารถเลือกดู Summary เฉพาะช่วงวันที่ที่สนใจได้ (เพราะตอนนี้มันเอามาทั้งตารางซื้อขายเลยเนอะ)

    อ่านตอนต่อไปได้ที่นี่ครับ https://www.thepexcel.com/excel-stock-inventory-v3/

    ถ้าใครสนใจ รอติดตามต่อได้เลยครับ!! หากใครสงสัยอะไรก็อย่าลืมมาคุยกันในเพจ Facebook นะครับ