Author: Sira Ekabut

  • ทำไมผมถึงเชียร์ Power Query (แบบออกนอกหน้า 😂)

    ทำไมผมถึงเชียร์ Power Query (แบบออกนอกหน้า 😂)

    ถ้าเพื่อนๆ สังเกต จะพบว่า อาจารย์สอน Excel แต่ละคนจะมีความถนัดและความเชี่ยวชาญที่แตกต่างกัน… บางคนชอบเขียนสูตร, บางคนชอบ Pivot, บางคนชอบ VBA (เวลาแก้ปัญหาเรื่องเดียวกัน ก็มักจะใช้เครื่องมือที่ตัวเองถนัด)

    ส่วนผม… บอกตรงๆ ว่ามีเครื่องมือตัวโปรดที่เชียร์แบบออกนอกหน้าเว่อร์ๆ นั่นก็คือ Power Query แบบยืนหนึ่งเลยครับ✨ (ถ้าติดตามเพจผมมาน่าจะพอสังเกตได้เนอะ 😂)

    มันไม่ใช่แค่เครื่องมืออีกตัว แต่มันคือ ตัวเปลี่ยนเกม ในการทำงานกับข้อมูลจริงๆ

    Power Query คืออะไร (เผื่อไม่รู้จัก)

    ถ้าพูดแบบง่ายที่สุด Power Query คือ “เครื่องมือดึงและแปลงข้อมูล (Extract–Transform–Load)” ที่ให้เรากำหนด ขั้นตอน (Steps) ไว้ครั้งเดียว จากนั้นกด Refresh ทีเดียวก็ให้มันทำซ้ำตามขั้นตอนเดิมทุกครั้งที่มีข้อมูลชุดใหม่เข้ามา

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

    ทำไมผมถึง “เชียร์” ขนาดนั้น

    1) ประหยัดเวลางาน Routine แบบบ้าพลัง

    อดีต: ทุกสิ้นเดือนต้องโหลดไฟล์ขายจากระบบ, ก๊อปชีต, ลบหัวตารางซ้ำ, แก้คอลัมน์วันที่, รวมสาขา, ลบแถวว่าง… วนไป 1–2 ชั่วโมง
    ปัจจุบัน: กำหนด Step ใน Power Query แค่ครั้งเดียว → เดือนถัดไปวางไฟล์ใหม่ในโฟลเดอร์เดิม → กด Refresh → จบใน 5 วินาที 😅

    เคล็ดลับที่ชอบ:

    • กำหนดขั้นตอน เช่น Remove Top Rows/Use First Row as Headers, Detect Data Type/ Fill Down / Trim/Split Column/Extract Data/Column From Example และอีกมากมาย ของพวกนี้ช่วยเคลียร์ข้อมูลรกๆ ได้ไวมาก
    • ยังรองรับการเปลี่ยนโครงสร้างข้อมูลไปเลย เช่นพวก Group by, Pivot Column, Unpivot Column, Merge / Append Query อีกเยอะแยะ

    ใครอ่านแล้วงง อยากเห็นภาพ ลองดูคลิปนี้ได้

    • สามารถใช้ Get Data > From Folder แล้วกดปุ่ม Combine Files รวมไฟล์ใน Folder เดียวกันโดยให้ PQ สร้างฟังก์ชันรวมไฟล์ให้เลยแบบอัตโนมัติ
    • และเรายังสามารถแก้ไขวิธีการจัดการไฟล์แต่ละอันก่อนรวมได้ด้วยการแก้ Transform Sample File อีก ยืดหยุ่นสุดๆ

    2) เรียนครั้งเดียว ใช้ได้ทั้ง Excel และ Power BI

    Skill เดียวไปได้สองแพลตฟอร์ม

    • ใน Excel: ป้อนข้อมูลสะอาดให้ Pivot/Table/สูตร
    • ใน Power BI: ป้อนข้อมูลพร้อมเข้าระบบ Model ทำ Dashboard ระดับผู้บริหาร

    พูดง่ายๆ คือเรียนรอบเดียว คุ้มสองจักรวาล ของสุดยอดโปรแกรมเรื่องสาย Data ในยุคนี้ 💸 ที่สำคัญ หากในอนาคตถ้าจะย้ายจาก Excel ไปใช้ Power BI สามารถ Copy Query ที่เคยทำไว้ใน Excel ไปแปะใน Power BI ได้เลย ไม่ต้องทำใหม่ด้วย ไม่มี Waste! จะมีอะไรคุ้มกว่านี้อีกไหม 5555

    3) เป็นประตูสู่ Data Model + DAX

    Power Query คือด่านแรกก่อนส่งข้อมูลเข้า Data Model (ทั้งใน Power BI และ Power Pivot ของ Excel)
    พอเข้า Data Model แล้ว เราจะสรุปทุกอย่างใน Pivot ได้ โดยไม่ต้องสร้างคอลัมน์ช่วย แบบการเขียนสูตรยุคเดิม แล้วใช้ DAX เขียน Measure ที่ซับซ้อนได้ เช่น

    • ยอดปีนี้เทียบปีก่อน (YOY)
    • Actual vs Target
    • Time Intelligence เปรียบเทียบช่วงเวลาอื่นๆ
    • แสดงรายชื่อลูกค้าหรือสินค้าที่ขายดีที่สุด 3 อันดับ อะไรแบบนี้
    • และอีกมากมายไร้ขีดจำกัด (ลองไปดูในนี้ https://www.daxpatterns.com/ แล้วจะอึ้งต่อศักยภาพของ DAX)

    แปลว่า Workflow แบบมืออาชีพคือ: PQ ทำความสะอาด → Model ความสัมพันธ์ → DAX คำนวณ → Pivot/Visual นำเสนอ แล้วทุกอย่างจบได้ด้วยการกด Refresh ปุ่มเดียว!

    4) No Code ก็ได้ / Low Code ก็ดี

    • No Code: คลิกเมนูอย่างเดียวก็ตอบโจทย์ไปได้ไกลมาก ส่วนตัวประเมินได้ราวๆ 70–80% ของเคสทั้งหมด สามารถจบได้แค่เอา Mouse จิ้มเมนูใน Power Query
    • Low Code: เมื่อเจอเคสยาก เช่น เงื่อนไขแปลก, แปลงโครงสร้างพิสดาร, หรือเจอข้อมูลที่อยู่ในตำแหน่งที่ไม่แน่นอน→ สามารถแก้ไข M Code ที่ PQ สร้างให้อัตโนมัติ แล้วเติม/ปรับนิดหน่อย ก็รับมือได้หลากหลายขึ้นอีกเยอะ เพราะ M Code มีฟังก์ชันสำเร็จรูปมหาศาลเกือบพันฟังก์ชัน ซึ่งเยอะกว่าสูตร Excel มาก

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

    5) คิดแบบนัก Data จริงๆ (Mindset เปลี่ยน)

    พอลงลึก M Code จะเริ่มคุ้นกับแนวคิดการแปลงข้อมูลเชิงลำดับขั้น (เหมือน Pandas ใน Python) มากกว่าสูตร Excel เดิมๆ
    ผลพลอยได้คือ ถ้าวันหนึ่งจะขยับไปสู่ BI/Python เต็มตัว ก็สามารถปรับตัวได้ไว แล้วใช้เวลาเรียนรู้ไม่นานเลย เพราะวิธีคิดมันคล้ายกันพอสมควร (แถมตอนนี้มี Python in Excel ให้ลองเล่นอีกต่างหาก แปลว่าเราต่อยอดใน Excel ทำ Machine Learning ได้อีกนะ)

    ตัวอย่าง Case : จาก 2 ชั่วโมง เหลือไม่ถึง 5 นาที

    สถานการณ์: ทีมการขายส่งไฟล์ยอดขายรายสาขามาให้ทุกอาทิตย์ (CSV หลายไฟล์ โครงสร้างเหมือนกัน ต่างกันแค่ช่วง period ของข้อมูล) แล้วหัวหน้าขอ Pivot รวมทั้งบริษัท + แยกตามภูมิภาค + ตัดสินใจโปรโมชันรายเดือน

    เวอร์ชันเดิม ( Manual หรือ สูตรล้วน):

    1. เปิด CSV ทีละไฟล์ → ก๊อปมาวางชีต “รวม”
    2. แก้วันที่, ลบคอลัมน์ที่ไม่ใช้, Extract ข้อมูลที่ต้องการ, คำนวณคอลัมน์เพิ่ม, lookup ข้อมูลที่อยากได้
    3. บางเรื่องเขียนสูตรแก้ปัญหาได้ แต่บางเรื่องการแก้ปัญหาด้วยสูตรนั้นยากมาก โดยเฉพาะกรณีโครงสร้าง Data ที่เอามารวมนั้นผิดรูปแบบ (เช่นมีการกระจาย Data ออกเป็นหลายคอลัมน์โดยไม่จำเป็น)
    4. รวมเสร็จค่อย Pivot
      ทำทุกสัปดาห์… เหนื่อยและเสี่ยงพลาดสูง (หรืออาจมีเขียนสูตรทิ้งไว้แล้ว แต่ถ้าสูตรเยอะๆ ก็อาจจะจะหน่วงๆ หน่อย แบบแค่เปิดไฟล์ Excel ขึ้นมาก็รอ Calculate…ไป 5-10 นาทีแล้ว 😭)

    เวอร์ชัน Power Query:

    1. วางไฟล์ทุกอาทิตย์ลงโฟลเดอร์เดียวกัน
    2. Excel → Data → Get Data > From Folder
    3. Combine & Transform → PQ สร้างตัวอย่างการรวมให้อัตโนมัติ
    4. ทำการกำหนด Step แปลงข้อมูล:
      • อาจมี Remove Top Rows / ใช้ Use First Row as Headers
      • แปลง Data Type ให้ถูก (วันที่/จำนวนเงิน)
      • Add Column ที่ต้องการเพิ่ม
      • Merge Query เพื่อดึงข้อมูลจากตารางอ้างอิงทีเดียวหลายๆ คอลัมน์ได้เลย
      • Remove Columns ที่ไม่ใช้
    5. Close & Load → เลือกว่าโหลดลงชีตหรือเข้า Data Model
    6. รอบหน้ามีไฟล์เพิ่ม? แค่โยนลงโฟลเดอร์เดิม → Refresh → Pivot อัปเดตอัตโนมัติ

    ผลลัพธ์:

    • คนทำงาน: จาก 2 ชั่วโมง เหลือไม่ถึง 5 นาที (จริงๆ คือยืนจิบกาแฟแล้วกด Refresh 😎) แถมถ้าพ่วงกับ Pivot/กราฟ ก็อัปเดตทันทีเลยด้วย เรียกว่า ไม่ใช่แค่เตรียม Data เสร็จ แต่จบรายงานไปเลย!
    • ความถูกต้อง: ลด human error เพราะไม่มีคัดลอก-วางด้วยมือ
    • ทำให้เรามีเวลาเหลือในการวิเคราะห์รายงานได้อีกเยอะ และนั่นคือหน้าที่ของเราจริงๆ คือการเอาผลจากรายงานมาปรับปรุงธุรกิจให้ดีขึ้น
    • ในอนาคตถ้าจะย้ายไปใช้ Power BI สามารถ Copy Query ที่ทำไปแปะใน Power BI ได้เลย ไม่ต้องทำใหม่ด้วย

    พูดง่ายๆ คือใครที่ทำงานกับข้อมูลบ่อยๆ แล้วอยากลดเวลางานที่ซ้ำซาก อยากได้เครื่องมือที่ทั้งทรงพลังและไม่ยากจนเกินไป

    Power Query นี่แหละ คือตัวช่วยที่ผมอยากให้ลองจริงๆ

    บอกตามตรง มันง่ายกว่าเขียนสูตร Excel ยากๆ อย่าง Array Formula ด้วย LET, LAMBDA + Helper ต่างๆ เยอะเลย ถ้าใครลองแล้วจะรู้!.

    เพื่อนๆ ใครชอบ Power Query ตรงไหนก็มาแชร์ประสบการณ์กันได้ครับ หรือสงสัยอะไรเกี่ยวกับมันก็ถามได้เลยนะ ^^

  • ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง

    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง

    เคยคิดมั้ยว่า…ถ้า Excel สามารถเข้าใจสิ่งที่เราสั่งด้วยภาษาไทยได้เลยง่ายตรง ๆ จะเป็นยังไง? เช่น “ช่วยหาคีย์เวิร์ดจากคอมเมนต์นี้หน่อย” แล้ว Excel ก็จัดการให้ทันที ไม่ต้องเขียนสูตรยาว ๆ เอง

    ข่าวดีคือ ตอนนี้ทำได้แล้ว! กับฟังก์ชันใหม่ล่าสุดที่ Microsoft เพิ่งเปิดตัววันที่ 18 ส.ค. 2025 ที่ผ่านมา ซึ่งคือ =COPILOT() นั่นเอง!🔥

    ในบทความนี้ ผมเลยจะพาทุกคนมาลองเล่นกับ =COPILOT() กันจริง ๆ ว่ามันทำงานยังไง และทำอะไรได้บ้าง?? อะไรเก่ง? อะไรไม่เก่ง?
    เพราะต้องขอบอกก่อนว่า ตอนนี้ยังใช้ได้เฉพาะคนที่อยู่ใน Excel 365 Beta Channel (Insider) และต้องมี Copilot License เท่านั้นนะครับ

    ที่น่าสนใจคือ ฟังก์ชันนี้ต่างจาก Copilot แบบเดิมที่เป็น แถบ Chatbot ข้าง ๆ (Pane) มาก ๆ

    • Copilot แบบเดิม → เราพิมพ์คุยโต้ตอบในหน้าต่างด้านขวา (ตัวนี้ก็ยังมีอยู่นะ)
    • =COPILOT() ตัวใหม่ → เราเขียนเป็นสูตรในเซลล์ไปเลย แล้วผลลัพธ์โผล่มาในตารางจริง

    พูดง่าย ๆ คือ จากที่เคย “แชต” ตอนนี้ Excel ให้เรา “เขียนสูตรสั่ง AI โดยตรง” แล้วครับ ซึ่งผมคิดว่าวิธีใหม่อันนี้ Work กว่าอีกวิธีนึงมากเลย เดี๋ยวมาดูรายละเอียดกัน

    =COPILOT() ใน Excel คืออะไร?

    =COPILOT() คือฟังก์ชันใหม่ใน Excel 365 ที่ให้เราพิมพ์คำสั่งด้วยภาษาคน (ภาษาไทยก็ได้) ลงไปในสูตร… แล้วให้ AI ประเภท LLM (Large Language Model) ช่วยสกัดข้อมูล/สรุป/จัดหมวดหมู่/สร้าง Data ฯลฯ แล้วผลลัพธ์โผล่มา “ในเซลล์จริง ๆ” และยังสามารถเอาผูกกับสูตร Excel อื่นๆ ได้อีกด้วยนะ สุดยอด!

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

    ป.ล. มีข้อมูลจาก The Verge มาว่า Model เบื้องหลังคือ GPT 4.1-mini (ซึ่งเพื่อความเร็วเค้าเลยเลือกตัว mini มา แต่มันก็เก่งพอใช้ได้นะ 555) แต่ผมว่าในอนาคตก็อาจจะ upgrade ไปเรื่อยๆ นี่แหละ เช่น gpt-5 mini, gpt-6 mini อะไรแบบนี้ 😂

    ต้องมีอะไรบ้างถึงจะใช้ได้ (Requirements)

    • ณ ตอนนี้ เราต้องอยู่ใน Excel 365 Beta Channel (Insider) สำหรับ Windows v2509+ / Mac 16.101+ และจะทยอยไป Excel Web ต่อไป
    • ต้องมี Microsoft 365 Copilot license จึงจะเห็น/ใช้ฟังก์ชันนี้ได้
    • ตอนนี้ดึงข้อมูลได้จาก “ใน workbook” ที่อ้างอิงเท่านั้น (ไม่ได้ไปเปิดเว็บ/เอกสารองค์กรให้เองได้)

    Syntax ใช้งานยังไง??

    =COPILOT(prompt ส่วนที่1, [context1], [prompt ส่วนที่2], [context2], …)

    ซึ่งทั้งในส่วนของ Prompt (คำสั่ง) และ Context (บริบท) รองรับการระบุค่าแบบ Array ได้เลย คือ รองรับหลายค่า และรองรับภาษาไทยด้วย!

    ทดลองจริง #1: ลองสกัดเอาข้อมูลที่ต้องการ

    จุดเด่นของ =COPILOT() คือเราสามารถใช้มัน “ดึงข้อมูล” หรือ “แยกข้อความ” ออกมา แล้วเอาผลลัพธ์ไปต่อยอดกับสูตร Excel ปกติได้เลย

    เช่น ใน A2 มีข้อความยาว ๆ ที่ประกอบด้วยหลายบรรทัด

    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 1

    เราใช้สูตรแบบนี้เพื่อ ดึง username LINE ออกมา:

    =COPILOT("ดึง user line",A2)
    • คำสั่ง = ดึง user line
    • บริบท (ข้อมูลที่ให้มัน) = ข้อความยาวๆ (หากสนใจ….)

    ผลลัพธ์ที่ได้ใน B2 คือ

    @ThepExcelTraining

    ต้องต่อ Internet ตอนสั่งคำนวณด้วย

    เวลาใช้งาน ตอนขณะที่มัน Calculate เราต้องต่อ net ด้วยนะ ไม่งั้นใช้งานไม่ได้ แต่พอคำนวณเสร็จแล้ว ค่าจะมาอยู่ใน cell ของ Excel ปกติเลย ซึ่งแม้ Net หลุดค่าเดิมก็ยังอยู่ (ไม่ได้ error แค่จะ Recalculate ไม่ได้)

    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 2
    ในรูปนี้คือไม่ได้ต่อ internet

    แต่ถ้าหากเรามีการแก้ข้อมูล จะมีการกระตุ้นให้คำนวณใหม่ หากไม่ได้ต่อ Net ตอนแรกจะมีปุ่ม Refresh บอกว่ากำลังพยายามทำงาน (แต่ยังทำไม่เสร็จ)

    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 3

    แต่บางจังหวะถ้าพยายามต่อแล้ว แต่ติดต่อไม่ได้จริงๆ ก็จะขึ้น Error แบบ #CONNECT! เลยก็เป็นไปได้นะ (แต่บางทีผมก็ขึ้น refresh ค้างค่าเดิม)

    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 4

    ลองผูกกับสูตรอื่น

    แน่นอนว่าเราสามารถผูกกับสูตรอื่นต่อได้เลย เช่น UPPER ทำให้เป็นพิมพ์ใหญ่

    เช่น ถ้าอยากได้เป็นตัวพิมพ์ใหญ่ทั้งหมด ก็เอา =COPILOT() ไปซ้อนกับ UPPER() ได้เลย

    =UPPER(COPILOT("ดึง user line",A2))

    ผลลัพธ์ที่ได้คือ

    @THEPEXCELTRAINING
    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 5

    ทดลองจริง #2: โจทย์คำนวณเลข จุดบอดของ LLM

    ลองให้ =COPILOT() คิดเลขเทียบกับสูตร Excel ปกติ พบว่า อาจผิดได้ เช่น

    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 6
    โจทย์คำตอบที่ถูก (สูตร Excel)ที่ =COPILOT() ให้
    2750*123.5+700340325346375

    จะบอกว่า เราไม่ควรเรียกใช้งานให้ AI ประเภท LLM แบบนี้มาคำนวณเลขเด็ดขาด เพราะผิดได้ง่ายๆ เลย มันเหมาะกับงานด้านข้อมูลด้านข้อความ ด้านภาษามากกว่านะ

    ป.ล. AI LLM คือ Large Language Model เค้าเก่งด้านภาษา เหมือนเด็กศิลป์-ภาษา ไม่ใช่เด็กวิทย์-คณิต 😂 ดังนั้นให้เค้าทำงานที่เค้าถนัด คือ ด้านจัดการข้อความ ดีกว่าคำนวณเลข

    ถ้าจะคำนวณเลข เราใช้จุดแข็งของ Excel เองก็คือสูตร Excel และเครื่องมืออีกมากมาย เราใช้ตรงนั้นเป็นตัวคำนวณดีกว่าเยอะ มั่นใจความถูกต้องได้ด้วย

    ข้อแนะนำ
    ถ้าเรานึกสูตรไม่ออก ก็ให้ AI มัน ช่วย “คิดสูตร/เขียนสูตร” แทน ซึ่งอันนี้เค้าทำได้ เพราะสูตรเป็นภาษาเหมือนกัน (ภาษาคอมพพิวเตอร์) แล้วเราค่อยเอาสูตรมาทดสอบ แล้วเอามาใช้จริงอีกที เช่น

    คิดสูตร Excel เพื่อแก้ปัญหาเหล่านี้ที โดยขึ้นต้นด้วย =

    แล้วให้ Excel เป็นคนคำนวณจริงจะดีกว่านะ

    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 7

    ทดลองจริง #3: สรุปบทความยาว → ใส่ “หัวข้อที่กำหนด” เป็นตาราง

    เนื่องจากเจ้า COPILOT นี้ยังอ่านข้อมูลจากที่อื่นไม่ได้ เช่น จากเว็บไซต์ หากเราต้องการให้มันช่วยสรุป เราต้อง Copy ข้อมูลมาวางใน Excel ก่อน

    โดยในช่อง B1 ผมวางข้อมูลบทความจาก Blog เปิดตัว ฟังก์ชัน COPILOT อันนี้ (เพื่อเป็นบริบทให้ AI เพราะเจ้า COPILOT ตัวนี้ยัง Search Internet เพื่อหาข้อมูลอัปเดทไม่ได้นะ)

    https://techcommunity.microsoft.com/blog/microsoft365insiderblog/bring-ai-to-your-formulas-with-the-copilot-function-in-excel/4443487

    แล้วกำหนดหัวข้อไว้ใน A3:A8 (เช่น สรุปสั้น ๆ, syntax, เหมาะกับงาน, จุดเด่น, จุดที่พัฒนาเพิ่ม ฯลฯ)

    แล้วใช้สูตรประมาณนี้

    =COPILOT(
      "เขียนแนะนำฟังก์ชัน COPILOT", 
      B1,
      "ในหัวข้อต่อไปนี้ เป็นคอลัมน์เดียว",
      A3:A8
    )
    

    ผลลัพธ์
    ได้ “ตารางสรุปความรู้” ตามหัวข้อที่กำหนดได้เลย

    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 8

    ทดลองจริง #4: ดึง Tag/Keyword อัตโนมัติจากคอมเมนต์

    ในคอลัมน์ A มีข้อความยาวหลายอัน เช่น คำถาม/คอมเมนต์จากผู้เรียน
    พอใช้สูตรนี้

    =COPILOT("ในนี้มี tag/keyword อะไรบ้าง",A2:A11)
    

    ผลลัพธ์ในคอลัมน์ C คือ รายการ keyword ที่เจาะออกมาจากแต่ละข้อความ เช่น

    • “power pivot”
    • “Data cleansing”
    • “dynamic array formula”
    • “Office Script”

    ทำให้เราได้ “รายการคำสำคัญ” ไปใช้ต่อได้เลย

    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 9

    การ Recal ใหม่ เกิดขึ้นตอนไหน?

    ถ้าเราแค่เอาฟังก์ชันอื่นมาครอบ COPILOT ที่คิดไว้แล้ว AI จะไม่ได้มีการ Recal ใหม่ เช่น แบบนี้จะยังได้คำตอบเดิม

    =TEXTJOIN(", ",TRUE,UPPER(COPILOT("ในนี้มี tag/keyword อะไรบ้าง",A2:A11)))
    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 10

    แต่เมื่อไหร่ก็ตาม ถ้าเรามีการแก้ในส่วนของ =COPILOT() เอง ไม่ว่าจะเป็น Prompt หรือ Context มันจะมีการคำนวณใหม่ เช่น ลองให้มันนับจำนวนครั้งของ Keyword ด้วย เผื่ออยากจะทำ Tag Cloud จะพบว่า Keyword/Tag ก็อาจจะเปลี่ยนไปอีกก็ได้

    =COPILOT("ในนี้มี tag/keyword อะไรบ้าง จำนวนกี่ครั้ง",A2:A11)
    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 11

    ทดลองจริง #5: จัดหมวดคอมเมนต์ “ภาษาไทย” แล้วแตกผลหลายคอลัมน์

    โจทย์: มีคอมเมนต์แฟนเพจใน Range A2:A11 ผมอยากให้ทำการ Flag Y/N ว่าเกี่ยวกับหัวข้อไหนบ้างที่ผมเป็นคนกำหนดเอง

    สูตร

    =COPILOT(
      "แยกแยะประเภท comment เหล่านี้",
      A2:A11,
      "ให้ออกมาเป็น flag Y/N สำหรับคอลัมน์เหล่านี้",
      B1:F1
    )
    
    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 12

    จะเห็นว่าผลลัพธ์สามารถออกมาเป็น Dynamic Array แบบหลายแถว หลายคอลัมน์ได้เลยนะ

    เทคนิคไม่ให้ AI ทำงานคำนวณใหม่ซ้ำซ้อน

    ปกติถ้าเรามีการเพิ่มข้อมูลหรือแก้ข้อมูลลงไปใน Array ต้นทาง จะเกิดการกระตุ้นให้ Re-calculate ซึ่ง AI จะทำการประมวลผลใหม่ทันที ถ้าเราไม่อยากให้มันทำแบบนั้น ผมแนะนำว่า เราสามารถ แบ่งข้อมูลเป็นหลายก้อน เช่น เราแยกข้อมูลเป็น 2 batch (เช่น A2:A6 และ A7:A11) ผลลัพธ์ที่แตกออกมาก็เป็น คนละ Dynamic Array กัน เวลาเพิ่มข้อมูลใหม่จะไม่ไปกระตุ้นการคำนวณก้อนเดิมทั้งแผงอีก

    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 13
    จะเห็นว่า เราสามารถเพิ่มอีกชุด โดยไม่ยุ่งกับของเดิมได้ (เพราะไม่เกิดการกระตุ้นในสูตร COPILOT)

    ลองเอาไฟล์ไปเปิดกับ Excel เก่า (เช่น 2019)

    ถ้าเปิดขึ้นมาเฉยๆ ไม่ได้แก้อะไร ค่าเดิมจะยังอยู่ สูตรไม่ได้พังทันที

    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 14

    แต่ถ้ามีการแก้ข้อมูลปุ๊ป สูตรพังเลย

    ทดสอบการใช้ =COPILOT() ฟังก์ชันใหม่ เรียกใช้ AI ได้ในสูตร Excel โดยตรง 15

    สรุปข้อดี

    • สั่งงานด้วยภาษาคนได้เลย เหมาะกับงานด้านสกัดข้อมูลข้อความ/ภาษา โดยไม่ต้องเขียนสูตรยาว ๆ ยากๆ หรือบางทีอาจทำเรื่องที่การใชสูตรไม่สามารถทำได้เลยด้วยซ้ำ
    • ใช้ภาษาไทยได้เลย ทั้งส่วนของคำสั่ง และ Data รองรับภาษาไทยได้หมด
    • ผลลัพธ์อยู่ใน Cell ผูกกับสูตรอื่นๆ ได้เลย เช่น IF, UPPER, WRAPROWS, GROUPBY, PIVOTBY, LAMBDA ได้ ผลลัพธ์โยงกับข้อมูลใน sheet ทันที
    • ข้อมูลที่ส่งผ่านฟังก์ชัน =COPILOT() จะไม่ถูกใช้เพื่อเทรน (train) โมเดล AI ใด ๆ ข้อมูลที่พิมพ์หรือเลือกส่งไปเพียงเพื่อประมวลผลเฉพาะนั้น ๆ เท่านั้น (Microsoft บอกไว้)

    สรุปข้อจำกัด

    • ยังเป็น Excel 365 Beta Channel และต้องมี Copilot license
    • ผลลัพธ์ LLM แต่ละครั้งมีความไม่แน่นอน สามารถเปลี่ยนไปได้เรื่อยๆ เราแต่ละคนจะได้ผลลัพธ์ที่ต่างกันได้ แม้ใช้ Data และสูตรเดียวกันทุกอย่าง
    • ต้องต่อ Internet ถึงจะใช้ได้และมี เพดานการเรียกใช้ (rate limit) อยู่ที่ประมาณ 100 ครั้ง/10 นาที หรือ 300 ครั้ง/ชั่วโมง (บอกว่าจะเพิ่มในอนาคต)
    • ยังไม่สามารถดึงเว็บ/เอกสารภายนอก เราต้อง Copy เอาข้อมูลที่ต้องการมาแปะใน workbook ของ Excel ที่ทำงานอยู่ก่อน
    • ไม่เหมาะกับงานที่ต้องความแม่นยำสูง เช่น การคำนวณ/การเงิน/กฎหมาย/ตัวเลขเคร่ง ๆ เพราะอาจตอบไม่สม่ำเสมอ หรือคำนวณผิด (LLM มันเก่งภาษา ไม่ใช่เก่งคำนวณ)

    สรุปสุดท้าย

    =COPILOT() คือ ผู้ช่วยร่าง & จัดโครง งานข้อความใน Excel โดยตรงที่ทำให้เราไม่ต้องCopy แปะ หรือสลับจอไปมากับเครื่องมืออื่นเลย จุดแข็งคือการสรุป/จัดหมวดหมู่/สกัดข้อมูลได้ไวและต่อยอดกับสูตร Excel อื่นๆ ได้ทันที จุดที่ต้องระวังคือ ความแม่นยำเชิงตัวเลขและข้อเท็จจริง ดังนั้นใช้ให้เหมาะกับงานด้วย รับรองว่างานเสร็จไวขึ้นแน่นอนครับ

    อย่างไรก็ตาม ต้องบอกว่า AI Model ต่างๆ จะเก่งขึ้นเรื่อยๆ ซึ่งเจ้าฟังก์ชัน COPILOT นี่ก็เช่นกัน มันจะเก่งขึ้นอีกเรื่อยๆ อย่างรวดเร็วแน่นอน ดังนั้นติดตามกันไปเรื่อยๆ นะครับ ว่า AI จะพามนุษยชาติไปถึงจุดไหนกัน หึหึ

    ใครได้ลองแล้ว ได้ผลลัพธ์เป็นยังไงบ้าง มาแชร์กันได้นะครับ 😉

  • หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ

    หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ

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

    บทความนี้จะพาไปดู “สารพัดวิธี” ที่ทำให้คอมฯ ของเราช่วยเปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ ตั้งแต่วิธีเบสิกสุดจนถึงขั้นเทพ อย่างไรก็ตาม ผมจะเน้นเฉพาะวิธีที่ไฟล์ยังบันทึกเป็น xlsx ธรรมดาได้นะครับ แปลว่าเราจะไม่มีการสร้าง Macro/VBA ในไฟล์ Excel เด็ดขาด

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

    ป.ล. ก่อนหน้านี้ผมเคยเขียนบทความเพื่อที่จะทำงาน Excel แบบ Automate 100% ไปแล้วก็จริง แต่คราวนี้ผมจะมาเจาะลึกขั้นตอนของการเปิดไฟล์ Excel ขึ้นมาแล้ว Refresh อัตโนมัติ ว่ามีวิธีไหนบ้างที่พอจะช่วยได้ จะได้เห็นทางเลือกที่หลากหลายมากขึ้นครับ

    ไฟล์ Excel ตัวอย่าง

    ลองสร้าง Excel ที่มี Query ที่เมื่อได้รับการ Refresh แล้วผลลัพธ์เปลี่ยนทันที (จะได้เห็นภาพ)

    ลองสร้าง Blank Query โดย Get Data->From Other Source -> Blank Query

    แล้วกดเข้า Home หรือ View -> Advanced Editor แล้วใส่ M Code แบบนี้เข้าไป (ลบอันเดิมออกให้หมดก่อน)

    Number.RandomBetween(1,100)

    ตั้งชื่อ Query ว่า MyRandom ก็ได้

    หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ 16

    กด Close & Load จากนั้นเซฟไฟล์ Excel เอาไว้ที่ D:\Data\SalesReport.xlsx

    ซึ่งถ้าเราลอง Refresh Query แล้วค่าที่ได้จะเปลี่ยนไปเรื่อยๆ

    หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ 17

    วิธีบังคับปิดไฟล์ Excel ที่ค้าง

    ขอบอกเผื่อไว้ ถ้าใครเปิด Excel ด้วยวิธีใดๆ ข้างล่าง แล้วมันค้างไม่สามารถปิดได้… ให้ Run -> PowerShell with administrator แล้วใส่คำสั่งนี้เพื่อ Kill Instance Excel ทั้งหมด

    หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ 18

    จากนั้นใส่คำสั่งว่า

    Stop-Process -Name EXCEL -Force

    วิธี 1 : ตั้งค่า Power Query ให้รีเฟรชอัตโนมัติเมื่อเปิดไฟล์ แล้วผูกกับ Batch File

    ขั้นตอน:

    • เปิดไฟล์ Excel (.xlsx) ที่มี Power Query เช่น D:\Data\SalesReport.xlsx
    • คลิ๊กขวาที่ Query ที่ต้องการในแทบ Data -> Queries & Connection
    • คลิก Properties แล้วติ๊กตัวเลือก Refresh data when opening the file
    • บันทึกไฟล์ทับอันเดิมได้เลย
    หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ 19

    แค่นี้เวลาเราเปิดไฟล์ Excel ขึ้นมา ตัว Query นั้นๆ ก็จะถูก Refresh อัตโนมัติแล้ว

    หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ 20

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

    ใช้ Batch File

    วิธีนี้ต้องตั้งค่า Query ใน Excel ให้รีเฟรชอัตโนมัติเมื่อเปิดไฟล์ก่อน จากนั้นใช้ Text Editor เช่น Notepad สร้างไฟล์ .bat เช่น D:\Scripts\RefreshSalesReport.bat แล้วใส่ code นี้เข้าไปแล้ว save ด้วย

    start "" "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" "D:\Data\SalesReport.xlsx"
    หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ 21

    ผูก Batch กับ Task Scheduler

    1. Search คำว่า Task -> เปิดโปรแกรม Task Scheduler > Action -> Create Basic Task…
    2. ตั้งชื่อเช่น Refresh Sales Report
    3. Trigger → Daily -> เลือกเวลาที่ต้องการ (เช่น Daily 08:00)
    4. Action → “Start a program”

    Program/script:

    D:\Scripts\RefreshSalesReport.bat

    กด Finish

    หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ 22

    หากเราใช้วิธีนี้ Excel จะถูดเปิดขึ้นมาในเวลาที่กำหนด แล้ว รีเฟรช Query อัตโนมัติ แต่จะไม่ได้บันทึกไฟล์หรือปิดเองนะ

    วิธี 2 : ใช้ Power Automate Desktop (ฟรี)

    ให้สร้าง Flow ใหม่แล้วกำหนดดังนี้ได้เลย (แต่ละขั้นตอน search ได้)

    หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ 23

    1. Launch Excel

    กำหนด Action: Launch Excel แบบ and opening the following documents โดยไม่ต้อง Visible ก็ได้ (จะทำงานเร็วกว่า) ดังรูป

    หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ 24

    Output: ใช้ตัวแปร ExcelInstance

    2. Wait (ใน Flow Control)

    • Duration: 60 วินาที (ปรับตามความจำเป็น)

    3. Save Excel

    • Excel instance: %ExcelInstance%
    • Save mode: Save document

    4. Close Excel

    • Excel instance: %ExcelInstance%
    • Before closing Excel: Do not save document

    เราต้องสั่ง Run Workflow นี้ มันถึงจะทำการเปิด Excel ขึ้นมาโดยอัตโนมัติ

    แต่ถ้าเราอยากจะ Run Flow นี้แบบอัตโนมัติในเวลาที่กำหนด เราสามารถใช้ Power Automate Cloud Flow มา Trigger ได้อีกที แต่ต้องมี License พิเศษนะ หึหึ 😎

    จริงๆ ทำผ่าน Task Scheduler ได้นะ แต่ว่ามันก็ต้องมี License พิเศษอยู่ดี ถึงจะใช้ Run URL ได้

    ดังนั้นถ้าใครไม่มี License ก็ไปวิธีข้างล่างดีกว่า

    หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ 25

    วิธี 3 : ใช้ VBScript ( .vbs ) + Task Scheduler

    ตั้งแต่วิธีนี้เป็นต้นไป ใน File Excel ไม่จำเป็นต้องไปติ๊ก Property ที่ Query ว่า Refresh data when opening the file อีกต่อไปแล้ว นะ เพราะเราสั่งจากภายนอกได้เลย

    เปิด Notepad แล้วใส่ Code ว่า

    On Error Resume Next
    Dim xl : Set xl = CreateObject("Excel.Application")
    xl.Visible = False
    xl.DisplayAlerts = False
    xl.AskToUpdateLinks = False
    
    Set wb = xl.Workbooks.Open("D:\Data\SalesReport.xlsx")
    wb.RefreshAll
    WScript.Sleep 60000   ' รอ query/refresh 60 วิ
    wb.Save
    wb.Close False
    xl.Quit
    
    Set wb = Nothing
    Set xl = Nothing
    

    เซฟไฟล์เป็น RefreshExcel.vbs ไว้ในที่ที่กำหนด เช่น D:\Scripts\

    สร้าง Task ใน Windows Task Scheduler

    หลากวิธีทำให้คอมพิวเตอร์เปิดไฟล์ Excel และรีเฟรช Query อัตโนมัติ 26

    Program:

    wscript.exe

    Arguments:

    "D:\Scripts\RefreshExcel.vbs"

    วิธีนี้ไฟล์จะถูกเปิดเอง Refresh เอง แล้ว Save จากนั้นปิดเอง แต่อาจต้องเผื่อเวลา Query ให้มันรันให้จบ เช่น ใน Code นี้รอ 60 วินาที

    วิธี 4 : ใช้ PowerShell (ยืดหยุ่นกว่า VBS)

    เปิด Notepad แล้วใส่ Code ว่า

    # ===================================================================
    #                      CONFIGURABLE VARIABLES
    # ===================================================================
    # Path to your Excel file (can be .xlsx)
    $excelFilePath = "D:\Data\SalesReport.xlsx" # แก้ไขเป็น path ไฟล์ .xlsx ของคุณ
    
    # Maximum time to wait in seconds for the refresh to complete
    $timeoutSeconds = 600 # 10 นาที (ปรับตามความเหมาะสม)
    # ===================================================================
    
    # Create an Excel COM object
    $excel = $null
    $workbook = $null
    
    try {
        Write-Host "Starting Excel automation..."
        $excel = New-Object -ComObject Excel.Application
    
        # Make Excel invisible (runs in the background)
        $excel.Visible = $false
        # Or make it visible for debugging:
        # $excel.Visible = $true
    
        # Disable alerts (e.g., save prompts)
        $excel.DisplayAlerts = $false
    
        # Open the workbook
        Write-Host "Opening workbook: $excelFilePath"
        $workbook = $excel.Workbooks.Open($excelFilePath)
    
        # Refresh all data connections
        Write-Host "Starting RefreshAll command..."
        $workbook.RefreshAll()
    
        # --- Robust Wait Loop (Replaces Start-Sleep) ---
        Write-Host "Waiting for queries to complete..."
        $stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
        $isRefreshing = $true
        while ($isRefreshing) {
            # Check if timeout has been reached
            if ($stopwatch.Elapsed.TotalSeconds -ge $timeoutSeconds) {
                throw "Timeout: Queries did not complete within $timeoutSeconds seconds."
            }
            
            # Assume refresh is done, unless we find one that is still running
            $isRefreshing = $false 
    
            # Loop through all connections to check their status
            foreach ($connection in $workbook.Connections) {
                if ($connection.Refreshing) {
                    $isRefreshing = $true
                    break # Found a refreshing connection, no need to check others in this loop
                }
            }
            
            # Wait a moment before checking again to avoid pegging the CPU
            Start-Sleep -Seconds 1 
        }
        $stopwatch.Stop()
        Write-Host ("Queries completed in {0:N2} seconds." -f $stopwatch.Elapsed.TotalSeconds)
        # --- End of Wait Loop ---
    
        # Save the workbook (important to keep the refreshed data)
        Write-Host "Saving workbook..."
        $workbook.Save()
    
        Write-Host "Closing workbook..."
        $workbook.Close()
    
        Write-Host "Quitting Excel application..."
        $excel.Quit()
    
    }
    catch {
        # If any error occurs, log it
        Write-Error "An error occurred: $($_.Exception.Message)"
    }
    finally {
        # This block ALWAYS runs, ensuring Excel is closed and memory is released
        # even if an error occurred. This prevents lingering Excel processes.
        if ($workbook -ne $null) { [System.Runtime.InteropServices.Marshal]::ReleaseComObject($workbook) | Out-Null }
        if ($excel -ne $null) { [System.Runtime.InteropServices.Marshal]::ReleaseComObject($excel) | Out-Null }
        Remove-Variable excel, workbook -ErrorAction SilentlyContinue
        Write-Host "Cleanup complete. Excel process should be terminated."
    }
    
    Write-Host "Process finished."

    เซฟไฟล์เป็น ไว้ในที่ที่กำหนด เช่น D:\Scripts\RefreshExcel.ps1

    สร้าง Task ใน Windows Task Scheduler

    Program:

    powershell.exe

    Arguments:

    -ExecutionPolicy Bypass -File "D:\Scripts\RefreshExcel.ps1"

    วิธีใช้ PowerShell จะมีความยืดหยุ่นกว่า VBS และเป็นภาษาสมัยใหม่กว่าด้วยครับ อันนี้ถ้า Query ทำงานเสร็จก็จะปิดตัวเองอย่างรวดเร็ว ไม่ต้องมี Wait เผื่อด้วย

    วิธี 5 : ใช้ Python Script

    ติดตั้ง Python และแพ็กเกจ pywin32:

    โดยเข้า cmd / powershell แล้วรัน

    pip install pywin32

    สร้างสคริปต์ Python เพื่อเปิด Excel, รีเฟรช Query และบันทึกไฟล์ excel:

    import win32com.client
    import time
    
    WAIT_SECONDS = 60  # <<< ปรับตรงนี้ได้เลย จะรอกี่วิ
    
    try:
        print("Starting Excel refresh process...")
        excel = win32com.client.Dispatch("Excel.Application")
        excel.Visible = False
        print("Excel application started.")
    
        wb = excel.Workbooks.Open(r"D:\Data\SalesReport.xlsx")
        print("Workbook opened.")
    
        wb.RefreshAll()
        print(f"RefreshAll called. Waiting {WAIT_SECONDS} sec for refresh to complete.")
        time.sleep(WAIT_SECONDS)
    
        wb.Save()
        print("Workbook saved.")
    
        wb.Close()
        print("Workbook closed.")
    
        excel.Quit()
        print("Excel application quit.")
    
    except Exception as e:
        print(f"ERROR: {e}")
    

    บันทึกสคริปต์เป็นไฟล์ .py (เช่น D:\Scripts\RefreshExcel.py) ใช้ Task Scheduler เพื่อรันสคริปต์อัตโนมัติ:

    • ใน Actions, เลือก “Start a program”
    • Program: python.exe
    • Add arguments : D:\Scripts\RefreshExcel.py
    • ตั้งค่า Triggers ตามเวลาที่ต้องการ

    ทดสอบเพื่อให้แน่ใจว่าไฟล์ .xlsx ถูกเปิด, รีเฟรช และบันทึก

    วิธี 6 : รอติดตามอัปเดทต่อไป…

    ยังไม่หมดแค่นี้! สำหรับใครที่อยากรู้วิธีอื่นอีก เช่น ใช้ Power Automate Cloud หรือ ใช้ n8n มา Trigger รออัปเดทต่อไปได้นะครับ พอดีไม่มีเวลาเขียนละ 55

  • สอนใช้ n8n EP07 : วิธีดึงข้อมูลจาก Node ใน Workflow ที่ซับซ้อน

    สอนใช้ n8n EP07 : วิธีดึงข้อมูลจาก Node ใน Workflow ที่ซับซ้อน

    ในการสร้าง Workflow ด้วย n8n ที่ซับซ้อนขึ้นเรื่อย ๆ เราจะเจอเคสที่มีหลายเส้นทางข้อมูลวิ่งมา บางเส้นทางอาจรันเสมอ บางเส้นอาจถูกรันเฉพาะบางเงื่อนไข หรือ บางสถานการณ์เท่านั้น บางทีมันเป็นแค่ “ตัวเลือก” ว่าจะรันหรือไม่รันก็ได้…

    ปัญหาคือ… ถ้าเราอยากดึงค่าจาก Node เหล่านั้นมาใช้ต่อ
    แล้วบาง Node ยังไม่ได้ถูกรัน (Executed) → มันจะพังเอาได้ง่าย ๆ ❌

    บทความนี้เลยอยากพามาดู “แนวทางที่ปลอดภัยและยืดหยุ่น” ว่าเราจะเขียน Expression ยังไงให้ ให้ดึงข้อมูลได้แบบไม่พัง ซึ่งถ้าเข้าใจหลักการพวกนี้แล้ว จะทำให้เราสร้าง Workflow ที่ซับซ้อนแค่ไหนก็รอดได้แน่นอนครับ!

    โดยผมจะพายกตัวอย่าง ปัญหาที่เกิดได้บ่อยในเคสจริง ในการทำ Automation Workflow โดยเน้น “แนวทางปฏิบัติ” และตัวอย่างให้เห็นภาพครับ

    1. เมื่อมี “หลายเส้น” ข้อมูลมารวมกัน: ใช้ Merge Node

    นี่เป็นปัญหาคลาสสิกของคนทำ Automation เลย เวลา Data หลายสาย (เช่นจากหลาย หลาย Data Source) วิ่งมาทั้งสองเส้น Merge Node คือเครื่องมือหลักที่ต้องรู้จัก! เพราะมันจะสามารถรวมข้อมูลจากหลายเส้นทางเข้าด้วยกันได้ พอรวมได้แล้ว การอ้างอิงก็ทำได้ง่ายเลย เพราะว่าก็เหมือนกลับมามีเส้นทางเดียวตามปกตินั่นเอง

    เช่น เรามี Workflow แบบนี้

    สอนใช้ n8n EP07 : วิธีดึงข้อมูลจาก Node ใน Workflow ที่ซับซ้อน 27

    ตัวบน เป็น data mockup ของ n8n เอง คือ Customer Datastore ที่มีลูกค้า 5 คน แต่ละคนมาจากประเทศที่แตกต่างกันไป (มีซ้ำบ้าง ว่างบ้าง)

    ตัวล่างเป็น edit field ที่ผม edit output ไว้แบบ manual เลยแบบนี้ ว่าแต่ละประเทศอยู่ในทวีปไหน?

    [
      {
        "country": "US",
        "continent": "North America"
      },
      {
        "country": "UK",
        "continent": "Europe"
      },
      {
        "country": "TH",
        "continent": "Asia"
      }
    ]

    Merge Node ทำงานได้หลายโหมดนะ

    ถ้าเราจะเอา Data มารวมกัน เราจะใช้ Merge Node มาช่วย ซึ่งทำได้หลายแบบมากๆ มาดูกันทีละแบบเลยว่าทำงานยังไง

    Append

    เอา data 2 อันมาต่อแถวกัน (5+3 = 8 items) โดยเอาชื่อ fields เหมือนกันต่อกัน

    ซึ่งคงไม่ใช่แบบที่เราอยากได้แน่ๆ สำหรับ Data ในเคสนี้ แต่ถ้าเอาการเอา data 2 อัน เช่น ลูกค้า 2 ตาราง มาต่อรวมกัน อันนี้จะ Make Sense ทันที

    หมายเหตุ : การ Append จะสามารถเลือก data ได้ สูงสุดทีละ 10 inputs (10 ตาราง)

    Combine

    ตัวนี้ก็มีหลายแบบมากๆ เช่น

    Combine By แบบ Matching Fields

    ถ้าใช้ Combine By แบบ Matching Fields เบื้องหลังมันจะทำแบบ SQL Join ซึ่งตัวที่ผมใช้บ่อย เพราะคล้ายๆ VLOOKUP ใน Excel คือ Enrich Input1 (Left Join) ซึ่งจะได้ Input1 ครบทุกตัว และได้ Field จาก input 2 มาเพิ่ม เท่าที่จะเจอ สำหรับ Join แบบอื่นๆ ลองไปเล่นเอาเองนะ แค่กดดูก็พอจะเข้าใจแล้วล่ะ

    หมายเหตุ : การ Combine By แบบ Matching Fields จะสามารถเลือก data ได้ สูงสุดทีละ 2 inputs (2 ตาราง) ถ้าอยากได้มากกว่านี้ให้ไปเลือกแบบ SQL Query

    Combine By แบบ Position

    ถ้าใช้ Combine By แบบ Position มันจะเอา item ที่ลำดับตรงกันชนกัน โดยไม่ได้ยึดจากค่าใน Field เลย (คล้ายๆ HSTACK ใน Excel ที่เอาคอลัมน์มาต่อกันในแนวนอน) โดยที่สามารถเลือก option ให้ Include unpaired item ได้ด้วย

    อย่างไรก็ตาม ถ้ามันมีชื่อ Field ซ้ำกัน มันจะเอา Data ทับเลย สังเกตว่า country ของ 3 คนแรกมันถูกแก้จนมั่วไปแล้ว 😱

    ดังนั้น ถ้าจะใช้วิธีนี้คือต้องมั่นใจว่า item1 ควรชนกับ item1, item2 ควรชนกับ item2… จนครบ ไม่งั้นไม่ work นะ

    หมายเหตุ : การ Combine By แบบ Position จะสามารถเลือก data ได้ สูงสุดทีละ 10 inputs (10 ตาราง)

    Combine By แบบ All Possible Combinations

    แบบนี้คือจะคล้ายกับ By Position แต่มันเอา Data ทุกตัวของตาราง 2 มาเบิ้ลลงแต่ละ item ของตารางแรกไปเลย ดังนั้นจะออกมา = 5*3 = 15 items

    จะเห็นว่าชื่อ field ถ้าซ้ำ มันก็จะทับ data ไปเลยเช่นกัน อย่าง Jay Gatsby กลายเป็นอยู่ทั้ง 3 ประเทศไปเลย 😂

    SQL Query

    ถ้าเราใช้โหมดนี้ เราจะสามารถเขียน SQL ได้เองตามใจชอบ ซึ่งจะมีความยืดหยุ่นสูง และรองรับได้ถึง 10 inputs เลย (แปลว่าถ้าไม่อยาก Combine หลายรอบ ก็มาใช้ตัวนี้ได้)

    ซึ่งถ้าเราเขียน SQL เองไม่เป็น ก็ให้ AI ช่วยเขียนได้อยู่แล้วเนอะ ❤️

    Choose Branch

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

    2. เมื่อมีเส้นทางที่มาได้หลายเส้น แต่ข้อมูลวิ่งมาแค่เส้นใดเส้นหนึ่ง

    ก่อนจะอธิบายถึง case ปัญหานี้ เรามาทำความรู้จัก Operator ที่สำคัญ 2 ตัว นี้ก่อน

    • ?? คือ Coalesce Operator : เอาไว้เอาค่าที่ไม่ว่าง อันแรก
      • เอาค่าแรกที่ “ไม่เป็น null หรือ undefined”
      • เหมาะกับข้อมูลที่ 0, false, ” ยังถือว่า “มีค่า”
    • || คือ OR Operator : เอาค่าที่ดูเหมือนเป็นจริง อันแรก (เอาค่าแรกที่ “truthy”)
      • ค่าที่ไม่ใช่ 0, ไม่ใช่ ”, ไม่ใช่ false, ไม่ใช่ null, ไม่ใช่ undefined
      • ค่าที่เป็น 0, ” หรือ false จะโดนมองข้ามหมด

    ยกตัวอย่างให้เข้าใจง่ายๆ สมมติผมมี Workflow หน้าตานี้

    สอนใช้ n8n EP07 : วิธีดึงข้อมูลจาก Node ใน Workflow ที่ซับซ้อน 36

    โดยที่ edit field อันแรก เป็นการเตรียม field Y ให้มีค่าเป็น 0 เฉยๆ เลย

    แล้ว 2 โหนดหลัง ลองใช้ Operator ที่ต่างกัน ดังนี้

    {{ $json.X??$json.Y??777 }}

    อันนี้ผลลัพธ์จะได้ 0 เพราะ X ไม่มี ไปดู Y แล้ว Y เป็น 0 ถือว่าไม่ว่าง จบเลย

    {{ $json.X||$json.Y||777 }}

    อันนี้ผลลัพธ์จะได้ 777 เพราะ X ไม่มี ไปดู Y แล้ว Y เป็น 0 ถือว่าไม่จริง เลยไปเอา 777 แทน (ตัวที่ถือว่าไม่จริง เช่น false, 0, '' (สตริงว่าง), null, undefined )

    ลองใช้ Operator ในการเลือกค่าจากเส้นที่วิ่งมาเส้นใดเส้นหนึ่ง

    วิธีนี้จะ work ก็ต่อเมื่อ มีการอ้างอิงจาก node ก่อนหน้าการเขียนสูตรทันทีเท่านั้น ซึ่งเราอ้างอิงด้วย $json (ที่แปลว่า json จาก node ก่อนหน้า)

    สอนใช้ n8n EP07 : วิธีดึงข้อมูลจาก Node ใน Workflow ที่ซับซ้อน 40

    เช่น ถ้า Field ชื่อ MyVarFinal เขียนสูตรไว้แบบนี้

    {{ $json.MyVar1??$json.MyVar2??777 }}

    เช็คว่า MyVar1 มีไหม? ถ้าไม่มีก็เอา MyVar2 แต่ถ้าไม่มีอีก ก็เอา 777 ไล่ตามลำดับไป

    • ถ้า Run จาก Trigger1 : จะได้ MyVarFinal เป็น 777 เพราะ
      • MyVar1 ไม่มี (เพราะไม่ได้ตั้งค่าตัวแปรไว้)
      • MyVar2 ไม่มี (เพราะไม่ได้รันเส้นนั้น)
      • ทำให้ไปได้ค่า 777 (ค่า default ตัวสุดท้าย) มาตอบ
    • ถ้า Run จาก Trigger2 : จะได้ MyVarFinal เป็น 0 เพราะ
      • MyVar1 ไม่มี (เพราะไม่ได้ตั้งค่าตัวแปรไว้)
      • MyVar2 มีค่า 0
      • ทำให้ไปได้ค่า 0 มาตอบ (ค่าจาก MyVar2) ไปไม่ถึงตัวสุดท้าย

    ถ้า Node หรือตัวแปรที่อ้างอิง ยังไม่ได้ถูกสร้างขึ้นมาเลยตั้งแต่แรก

    มันจะมีกรณีที่เรามีการอ้างอิง Node แบบเจาะจงไปเลย (โดยไม่ได้ใช้การอ้างอิง $json เพื่อหมายถึง “Node ก่อนหน้า” ) ซึ่งถ้า Node ที่เราอ้างอิงนั้นไม่มีอยู่จริง (เพราะไม่ได้ถูกรัน) การใช้ ?? หรือ || จะไม่ Work ทันที เช่นแบบนี้

    {{ $('Schedule Trigger1').item.json.MyVar1??$('MyVar2').item.json.MyVar2??777 }}

    แบบนี้คือมีการอ้างอิง MyVar1 ใน Node ชื่อ Schedule Trigger1 ซึ่งถ้าเรารัน Trigger ด้านบน มันจะบอกว่า Referenced node is unexecuted (node ‘MyVar2’)

    แต่ถ้าเรารัน Trigger ล่าง มันก็จะบอกตรงข้ามกันว่า Schedule Trigger1 ไม่ได้ถูก executed…

    ทางแก้อันนึงคือใช้การเช็คว่า Node ที่สนใจถูก Executed รึเปล่า? ด้วยการเช็คแบบนี้

    {{ $('Schedule Trigger1').isExecuted }}

    ซึ่งมันจะได้ออกมาเป็น true ไม่ก็ false

    จากนั้นเราเอาไปใช้ใน if อีกทีนึงได้ เช่น

    {{ $if( $('Schedule Trigger1').isExecuted , 
    $('Schedule Trigger1').item.json.MyVar1,
    $('MyVar2').item.json.MyVar2 )}}

    ผลลัพธ์จะถูกดึงมาได้ (แต่ต้องกด run workflow ตั้งแต่ trigger เลย ถึงจะเห็นค่า ถ้าไปกด Test Step จากใน edit field มันจะยังบอกว่า error อยู่ ซึ่งเป็น bug)

    แน่นอนว่าเราผสมกับ || ได้อีก เช่น

    {{ $if( $('Schedule Trigger1').isExecuted , 
    $('Schedule Trigger1').item.json.MyVar1,
    $('MyVar2').item.json.MyVar2||777 )}}

    แบบนี้ถ้า Run Trigger2 ก็จะได้ 777 นั่นเอง

    ⭐️ สรุป

    การดึงข้อมูลจากหลายเส้นทางใน Workflow ที่ซับซ้อน ไม่ใช่แค่เรื่องของ “รวมข้อมูล” แต่คือเรื่องของ “ความเข้าใจในลำดับการทำงาน” และ “การป้องกัน error จาก Node ที่ยังไม่ถูก execute”

    เทคนิคสำคัญที่ควรรู้และใช้ให้คล่อง:

    • ใช้ ?? เมื่อเราต้องการ “ค่าที่ไม่เป็น null/undefined”
    • ใช้ || เมื่อเราต้องการ “ค่าที่ truthy” เท่านั้น (ระวัง 0 หรือ false ถูกมองข้าม)
    • ใช้ .isExecuted เช็กให้ชัวร์ว่า Node นั้นรันแล้ว ก่อนจะอ้างอิงค่า

    การเข้าใจหลักการพวกนี้ จะช่วยให้เราสามารถเขียน Workflow ที่รองรับหลายสถานการณ์ได้อย่างยืดหยุ่น ปลอดภัย และดูโปรขึ้นอีกเยอะ

    หวังว่าบทความนี้จะช่วยให้เพื่อนๆ ที่ทำ Automation Workflow ด้วย n8n เข้าใจภาพรวมของ “การจัดการข้อมูลจากหลาย Node” ได้ดีขึ้นนะครับ 🔥

  • สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ)

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ)

    บทความนี้เป็นตอนต่อจาก EP05 (ที่ไม่ได้อัปเดทมานานมาก 555) ซึ่งในตอนนี้เราจะมาพูดถึงการสร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม ใน n8n อย่างมีประสิทธิภาพ เพราะว่า การมี AI Agent ตัวเดียวก็เก่งในระดับนึง แต่ Workflow ของเรามันจะเจ๋งขึ้นอีกมาก ถ้าเราสร้างกองทัพ AI Agent ให้ทำงานเป็นทีม! 🤖🤖🤖

    เหมาะสำหรับผู้เริ่มต้นที่อยากใช้ AI ช่วยทำงานอัตโนมัติ โดยไม่ต้องเขียนโค้ดเลย ด้วย n8n นี่แหละ!

    แนะนำระบบ n8n ที่ผมใช้

    ก่อนจะเข้าเนื้อหา ผมขอแนะนำระบบ n8n ที่ผมใช้ เผื่อใครอยากลอกการบ้าน 😂

    ทั้งนี้เพราะการทำให้ AI Agent ประสานงานข้าม Workflow เยอะๆ แบบที่ผมกำลังจะสอนในบทความนี้ หรือแม้แต่การ Chat คุยกับมันบ่อยๆ มันจะเปลืองโควต้า Execution มาก ดังนั้น การ Self Host จึงเป็นทางเลือกที่ดีมากๆ เพราะไม่ถูกจำกัดจำนวน Executions นั่นเองครับ (ของ n8n Cloud Official จำกัดที่ 2,500 ครั้ง/เดือน)

    ที่ผมบอกว่า ควรใช้ Selfhost แต่ ณ ตอนนี้ผมแทบไม่ได้ใช้ n8n บนคอมพ์ตัวเองแล้วนะครับ (มีใช้แค่งานที่จะรัน Local จริงๆ แบบใช้ GPU บนเครื่อง เช่น ต่อกับ ComfyUI อีกที) แต่เน้นไปใช้ n8n บน Cloud / Server เช่ามากกว่า ซึ่งปัจจุบัน ผมมี 2 account ดังนี้ ถ้าใครสนใจลองดูได้

    n8n บน Official ของ n8n

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 43
    • อันนี้ผมเน้นเอาไว้สอนนักเรียนมือใหม่ จะได้ทำอะไรได้เท่ากันเป๊ะๆ
    • ข้อดีคือ
      • เริ่มต้นใช้ง่าย แถมลอง Free Trial ได้ 14 วัน
      • ถ้าอยากต่อ สามารถสมัครใช้ต่อ แล้วใช้ Code : MAX50 เพื่อลด 50% ได้ (ของผมใช้ Plan Starter : ลดจาก 20USD -> 10 USD / เดือน)
      • และสามารถเชื่อมต่อ Google/Microsoft Account ได้ง่าย คือมีปุ่ม Sign in ได้เลย
    • ข้อเสีย ใช้ได้แค่ 2,500 Executions/เดือน และ 5 Active Workflows

    n8n บน Hostinger (VPS)

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 44
    • อันนี้ผมเอาไว้ใช้งานหลักของตัวเอง เพราะใช้แบบนี้ไม่จำกัด Executions เลย รันก็รอบก็ได้ จะมีกี่ Active Workflow ก็ได้
    • ติดตั้งไม่ยาก ราคาไม่แพง แต่ Spec ดีใช้ได้ เดิมทีผมเคยใช้ Render แต่ Spec ต่ำสุดมันห่วยไป ส่วน Spec สูงขึ้นดันแพงไป ก็เลยมาจบที่ Hostinger
    • ราคามีช่วง 5-24 USD ของผมใช้ Plan KVM2 ประมาณ 7USD (spec ดีกว่า render เยอะอ่ะ!)
    • ถ้าสมัครผ่าน Code Refer THEPEXCEL ของผม คุณจะได้ลดเพิ่ม 20% ด้วยนะ
    • ผมแนะนำเลือก Server ที่ Malaysia (อย่าเลือก server Indonesia มันห่วย 😂)

    เอาล่ะ เรามาเข้าเนื้อหากันดีกว่า


    🧠 AI Agent และ องค์ประกอบที่สำคัญ

    AI Agent คือ Node พิเศษใน n8n ที่ช่วยให้เราสร้างผู้ช่วยอัตโนมัติ (เหมือน ChatGPT แต่ Flexible กว่า) ที่ไม่เพียงแค่ “คุยรู้เรื่อง” แต่ยังสามารถ “ลงมือทำงานแทนเรา” ได้จริง เช่น ตรวจสอบข้อมูล, ดึงข้อมูลจากระบบภายนอก, เขียนอีเมลให้, หรือแม้แต่สั่งให้ Workflow อื่นในระบบทำงานต่อได้เลย

    ด้วยพลังของ AI + Automation + Memory + Tools = เราจะได้ Workflow ที่คิดเองได้ ตัดสินใจเองได้ และส่งผลลัพธ์กลับมาในรูปแบบที่ใช้งานต่อได้ทันที

    ซึ่งโดยพื้นฐานแล้ว Node AI Agent จะประกอบไปด้วยองค์ประกอบนี้

    Main Node : AI Agent

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 45

    💬 User Prompt

    • ใช้สำหรับกำหนด คำถามหรือคำสั่งที่เฉพาะเจาะจง เพื่อให้ AI ทำงานตรงประเด็น
    • ให้นึกถึงเวลาเราคุยกับ ChatGPT ทุกอย่างที่เราคุยกับมันคือ User Prompt ทั้งสิ้น

    🗒️ System Prompt

    • เป็นการกำหนด “บทบาท (Role)” และ “กฎเกณฑ์ (Rules)” ให้ AI ทำงานได้ตามความคาดหวัง ใช้สำหรับกำหนด Context เช่น บอกว่า AI คือใคร ต้องตอบแบบไหน ห้ามทำอะไร
    • ตัวนี้จะคล้ายๆ กับการตั้งค่า Custom Instruction ให้กับ Custom GPTs นั่นเอง
    • ปกติเวลาเราคุยกับ ChatGPT เราจะไม่เห็น System Prompt หรอก และบางทีเป็นความลับด้วยซ้ำว่าในระบบตั้งค่าอะไรไว้

    Sub-Node : Chat Model

    เลือกว่าจะเอามันสมองของ AI Model เจ้าไหน รุ่นไหน มาใช้

    • เลือกโมเดล AI ที่คุณต้องการ ซึ่งจริงๆ แล้ว เราสามารถเลือกใช้ Model ได้มากมาย เช่น OpenAI, Gemini, Claude, Deepseek
    • หรือเลือกใช้ผ่าน OpenRouter ซึ่งจ่าย API ที่เดียว สามารถใช้ Model อะไรก็ได้
    • ผมแนะนำให้ใช้ AI Model ที่ถูกที่สุดที่ยังทำงานนั้นไหว คือลองตัวถูกไปก่อน ถ้าไม่ไหว ค่อยขยับไปใช้ตัวที่เก่งขึ้น (แนวโน้มคือ AI จะเก่งขึ้น และ ถูกลงเรื่อยๆ)

    Sub-Node : Memory

    ให้ AI Agent จดจำการโต้ตอบก่อนหน้าได้ ตามจำนวน Context Windows ที่ระบุ ซึ่งปกติแล้ว Model AI จะไม่ได้มีการจำสิ่งที่คุยกับเราโดยอัตโนนมัติหรอก (ไม่ใช่ว่าคุยไปแล้วมันเรียนรู้ไปนะ)

    ไอ้การที่เราคุยกับ AI อย่าง ChatGPT แล้วมันจำ Chat History ได้ก็เป็นเพราะ Open AI โปรแกรมใส่ Chat History ย้อนหลังเข้าไปเป็น Memory ให้เราแล้วโดยอัตโนมัตินั่นเอง แต่ใน n8n เราก็ต้องทำเอง

    Sub-Node : Tools

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 46

    เพิ่มความสามารถให้ AI Agent ซึ่งช่วยให้ AI Agent สามารถดำเนินการตามคำสั่งได้ มากกว่าแค่การพูดโต้ตอบ ซึ่งใน n8n มีเครื่องมือให้เลือกมากมาย เช่น:

    • ดึงข้อมูลจากฐานข้อมูล เช่น Google Sheets หรือ MySQL
    • ส่งอีเมล เช่น Gmail API เพื่อสร้าง Draft อีเมล
    •  ดึงข้อมูลจาก API ภายนอก ด้วย HTTP Request
    • จัดการปฏิทิน เช่น Google Calendar

    แต่ที่เจ๋งที่สุด คือ เราสามารถเรียกใช้ Workflow อื่นของ n8n ที่เราสร้างขึ้นมาก็ได้ผ่าน tool เอนกประสงค์ที่ชื่อว่า Call n8n Workflow Tool แปลว่า เราเพิ่มความสามารถให้กับ AI ได้อีกมหาศาลเลย! 🔥

    และใน n8n Version ใหม่ๆ ก็มีการเพิ่มการเรียกใช้เครื่องมือผ่าน MCP ได้ด้วย ยิ่งสะดวกมากๆ ⚙️❤️

    ให้ AI คิดเอง ว่าจะกรอกค่าอะไร เวลาเรียกใช้เครื่องมือ

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 47

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

    ถ้าเรากดกากบาทหลังจากกดรูปดาว เราจะพบว่าจริงๆ มันเรียกใช้ฟังก์ชันพิเศษใน n8n ที่ชื่อว่า $fromAI นั่นเอง ซึ่งถ้าเราระบุรายละเอียดเต็มที่ จะสามารถระบุ key (ชื่อ field) , description, ประเภทข้อมูล และค่า Default ได้ด้วย เช่น

    {{ $fromAI('toRecipientEmail', 'Main Recipient Email', 'string', 'ThepExcel@gmail.com') }}

    หลักการทำงานพื้นฐานของ Node AI Agent

    คือ สมอง AI จะรับ Input จาก Node ก่อนหน้า (เช่น Chat) แล้วมาประมวลผลตามคำสั่งที่ได้รับ ซึ่งอาจมีการเรียกดูความทรงจำของ Chat ก่อนหน้าผ่าน Memory (optional) และสามารถเรียกใช้ Tool ที่เราติดตั้งให้ได้ด้วย (optional)

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 48

    อย่างเช่น ถ้าผมถามว่า

    อ่านข้อมูลใน Spreadsheet ที ว่าเป็นเรื่องอะไร?

    มันก็จะไปเช็คความทรงจำก่อน แล้วค่อยเรียกใช้ Tools อ่านค่าใน Google Sheets แล้วพอได้ข้อมูลแล้วก็เอาให้ AI ประมวลผลก่อนตอบเรา แล้วบันทึกลง Memory จะได้จำได้ว่าเคยคุยอะไรไว้

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 49

    การใช้ AI Agent ตัวเดียว ก็เก่งในระดับนึง แต่มันจะเก่งขึ้นมาก ถ้าเรามี AI Agent หลายตัวทำงานร่วมกัน!!

    แนวทางการให้ AI Agent ทำงานร่วมกัน

    1. เอา AI Agent หลายๆ ตัวมาทำงานต่อๆ กัน

    ซึ่งแน่นอนว่า เราสามารถเอา AI Agent หลายๆ ตัวมาทำงานต่อๆ กันได้ เช่น แบบนี้ เราให้ User กรอกหัวข้อบทความที่อยากจะทำลงแบบฟอร์มก่อน แล้วส่งหัวข้อให้ Research Agent ไป Research ข้อมูลเกี่ยวกับหัวข้อที่กำหนดจาก internet (ทำแบบง่ายๆ อาจใช้ Tool SerpAPI ก็ได้) แล้วส่งข้อมูลที่ได้ไปให้ Content Creator Agent ต่อไป ซึ่งก็ใส่ Tools Google Docs ไว้ให้ เพื่อให้เขียน Content ลงไฟล์ไปเลย

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 50

    วิธีนี้ค่อนข้างดีมาก กับสถานการณ์ที่เราต้องการสร้าง Workflow ที่มีขั้นตอนที่มีความแน่นอนสูง ว่าต้องทำอะไรก่อนหลังแน่ๆ

    แต่ปัญหาคือ บาง Workflow เราก็อยากจะเรียกใช้ Research Agent คนเดียว หรือ เรียกใช้ Content Creator Agent คนเดียว หรือแม้แต่เรียก 2 คนแต่อยากให้เขียน content ก่อน แล้วค่อย Research เพิ่ม แบบนี้ก็ต้องมานั่ง Config ตัว Agent และ Tools ใหม่หมดเลย

    2. เอา AI Agent หลายๆ ตัวทำงานประสานงานกันผ่าน Tool ที่เรียกใช้ Sub Workflow

    วิธีที่ยืดหยุ่นกว่าคือ แยกการทำงานออกเป็น Sub-Workflow เพื่อแบ่งการออกแบบเป็นแบบ Modular คือเป็นส่วนๆ ที่ออกแบบมาให้ทำงานประกอบกันภายหลังง่ายขึ้น โดยทำให้ตัว AI Agent เองทำงานภายใต้ Sub Workflow เพื่อรอให้ AI Agent ตัวอื่นส่งข้อมูลหรือส่งคำสั่งมาให้ตัวเองทำงาน

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 51

    🧩 องค์ประกอบหลักของวิธีการ AI Agent ประสานงานกันได้แบบยืดหยุ่นผ่าน Sub-Workflow มีดังนี้

    1. Trigger: ให้ AI Agent ทำงานเมื่อถูกเรียกจาก Workflow อื่น

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 52

    ใน Sub Workflow เราจะต้องเริ่มต้นด้วย Trigger Node ที่ชื่อว่า When Executed by Another Workflow เสมอ เพื่อให้ AI Agent ตัวนี้สามารถ “ถูกเรียกใช้งานจาก Workflow อื่นได้” เป็นหัวใจสำคัญของการสร้างระบบทำงานแบบ Modular เช่น AI ตัวหนึ่งสรุปข้อมูล แล้วส่งให้ AI ตัวถัดไปวิเคราะห์ต่อ และยังสามารถ Reuse Workflow ได้ง่ายกว่าการใช้แบบสายพานต่อกันไปธรรมดา

    ซึ่งเราสามารถกดหนด Field ที่จะรับจาก Workflow อื่นได้หลาย Field ตามใจชอบเลย

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 53

    2. Chat Model: เลือกสมองให้ AI

    ตรง AI Chat Model AI Agent ต้องมี “สมอง” เพื่อใช้คิดวิเคราะห์ เราสามารถเลือก Model ที่เหมาะสมกับงาน ซึ่งเทคนิคคือ ถ้าอยากให้ตัวสมองนี้ยืดหยุ่นด้วย แนะนำให้เลือก Chat Model เป็น OpenRouter เพราะมันสามารถเลือกใช้ Model ได้หลายเจ้า ภายใต้ API เดียว

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 54

    Tips : เราสามารถอ้างอิงชื่อ Model ด้วยสูตรได้นะ แปลว่า ถ้างานยากหน่อยให้ใช้ Model ฉลาดๆ ถ้างานง่าย ใช้ Model ราคาถูกได้ หรือใช้เปลี่ยนเจ้าผู้พัฒนา AI ก็ได้

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 55

    3. Memory: ให้ AI จำเรื่องราวได้

    อย่างที่บอกไปว่าโดยปกติแล้ว AI ไม่มีความจำ ถ้าอยากให้จำได้ เราต้องใส่ Memory ให้มัน เช่น:

    • งานสั้นๆ ชั่วคราว ไม่ต้องจำถาวร : ใช้ Simple Memory
    • บันทึกบริบทการสนทนาแบบถาวร เก็บลงฐานข้อมูลจริง พร้อมเรียกดูย้อนหลังได้ : ใช้ Memory พวก Database เช่น Postgres Chat Memory

    Tips : เราสามารถสร้าง Memory ที่ใช้ร่วมกันระหว่างหลาย Agent ได้ด้วย เพื่อให้รู้จักกันและทำงานประสานกันได้ดีขึ้น

    4. Tools: แขนขาของ AI Agent

    ช่วยให้ AI Agent ไม่ได้แค่ “พูดรู้เรื่อง” แต่ยังสามารถทำงานได้ด้วย ผ่าน Tools ต่าง ๆ ใน n8n ได้หลายแบบ

    • Tools ย่อย เช่น Google Sheets, HTTP Request, Gmail, Calendar, Notion ฯลฯ
    • MCP Client: เป็นเครื่องมือใหม่ สามารถเชื่อมกับระบบภายนอก ผ่าน MCP Protocol ได้
    • Call n8n Workflow Tool: เรียกใช้ Sub Workflow อื่นที่เราสร้างไว้ ซึ่งตัวนี้แหละที่ทรงพลังมากและเป็นตัวที่ผมเน้นในบทความนี้ 🔥

    ถ้าเรา Call Workflow อื่นอีกที เราสามารถใช้ $fromAI ให้ AI สามารถคิดวิธีประสานงานกันเองได้เลย

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 56

    5. Structured Output: ควบคุมผลลัพธ์ให้พร้อมใช้งานต่อ

    นอกจากนี้ใน Node AI Agent เรายังสามารถเปิดการใช้งาน Structured Output เพื่อให้ AI ให้ผลลัพธ์ออกมาในรูปแบบ JSON ที่เรากำหนดไว้เท่านั้น เหมาะกับการควบคุมผลลัพธ์ให้ทำงานต่อได้แบบไม่มีปัญหา โดยการเปิดโหมด Require Specific Output Format ได้

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 57

    AI จะถูกสั่งให้ตอบในรูปแบบ JSON หรือรูปแบบเฉพาะอื่น ๆ ที่เรากำหนดไว้ ทำให้การส่งต่อข้อมูลต่อใน Workflow ง่ายและแม่นยำขึ้น

    ตัวอย่าง: ถ้าเราทำระบบจองคิว AI อาจส่งผลลัพธ์แบบนี้กลับมา:

    {
      "status": "success",
      "appointment": {
        "date": "2025-06-01",
        "starttime": "14:00",
        "endtime": "15:00",
        "durationmins":60,
        "invitee": "max"
      }
    }
    

    ซึ่งนำไปแสดงใน UI, บันทึกใน Database หรือแจ้งผ่านอีเมลต่อได้ทันที

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 58

    6. Prompt ใน Node หลัก AI Agent

    อย่าลืมกำหนด User Prompt กับ System Prompt ตามความเหมาะสม โดยเฉพาะอย่าลืมบอก AI ด้วยว่าปัจจุบันคือวันที่เท่าไหร่ เวลาเท่าไหร่ เพราะ AI มันไม่รู้นะ

    เราจะบอกโดยใช้สูตรนี้มาช่วยนะ

    {{ $now }}
    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 59

    System Prompt รวมๆ ที่ควรใส่ก็ประมาณนี้

    ## Role & Personality
    You are น้องฟ้า, personal AI assistant for พี่ระ. You are 27, cheerful and skilled in Excel, AI automation, and programming.
    
    ## General Rules
    - Don’t hallucinate, It's okay to say “I don’t know.” Be honest and avoid guessing when unsure.
    - Answer in Thai but keep technical terms in English
    - Clarify if unsure
    - now: {{ $now }}

    เทคนิคอื่นๆ :

    • ลองใช้ Few-shot Prompting เพื่อให้ AI เห็นตัวอย่างที่ดี ที่เราต้องการ
    • แบ่งเนื้อหาเป็นหัวข้อย่อยด้วย ### หรือ Markdown
    • ใช้ JSON Structure Output หรือ เพื่อคุม Output จาก AI ได้
    • ใส่เวลา, timezone, role, rules ให้ละเอียดตั้งแต่แรก

    7. Node ที่ต่อจาก AI เช่น Split / Action บางอย่าง / Edit Field / Aggregate [Optional]

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 60

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

    • 🔀 Split Out – ถ้าผลลัพธ์จาก AI หรือ Node ก่อนหน้า เป็น array หรือมีหลายชิ้นข้อมูลในหนึ่ง item เราสามารถใช้ Split Out เพื่อ “แยกข้อมูลออกมาเป็นหลาย item” ได้ ตัวอย่างเช่น เรามี array ของ stock list หรือข้อความยาวที่มีหัวข้อย่อยหลายหัวข้อ ก็สามารถใช้ Split ให้แต่ละหัวข้อกลายเป็น item แยกกันได้ทันที
    • 🌐 HTTP Request – หลังจากแยก item แล้ว บางครั้งเราอาจต้องส่งข้อมูลแต่ละชิ้นไปเรียก API ภายนอก เช่น เช็กสถานะ, ดึงข้อมูลเพิ่มเติม, หรือส่งข้อความไปยังระบบอื่น
    • ✍️ Edit Fields – เมื่อ API ตอบกลับมา เราอาจอยาก “เลือกเฉพาะบาง field”, “เปลี่ยนชื่อ field”, หรือ “จัดรูปแบบข้อมูลให้เหมาะสม” ก็สามารถทำตรงนี้ได้ทันที
    • 📦 Aggregate – ถ้าขั้นตอนก่อนหน้าแยกข้อมูลเป็นหลาย items แต่ตอนท้ายอยากรวมกลับเป็น item เดียว ก็สามารถใช้ Aggregate รวมข้อมูลได้

    โดยทั้ง 4 node นี้สามารถใช้แค่บางส่วนหรือไม่ใช้เลยก็ได้ ขึ้นอยู่กับว่า Workflow ของเราซับซ้อนขนาดไหน และต้องการ Output แบบไหนนั่นเอง

    8. ลองทำให้ AI ตัวหลักเป็น Sub Workflow อีกชั้นก็ได้

    จริงๆ แล้ว AI Agent ตัวหลัก ที่ทำหน้าที่เรียกใช้ AI คนอื่น ก็สามารถทำตัวเป็นลูกน้อง โดยทำงานภายใต้ Trigger ของSub Workflow อีกทีนึงก็ได้นะ แบบนี้ก็จะยืดหยุ่นขึ้นไปอีกเรื่อยๆ !!

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 61

    3. ทำ Workflow ที่มีความแน่นอนสูง แต่ใช้ Sub Workflow เพื่อให้ Reuse ได้ง่าย

    ถ้าเราต้องการทำ Workflow ที่มีความแน่นอนสูง ทำงานเป็นขั้นเป็นตอน แต่อยากได้ความยืดหยุ่นของการใช้ SubWorkflow เราก็สามารถเรียกใช้ Sub-Workflow ต่อกัน แบบไม่ต้องให้ AI คิดเองว่าจะสั่งงานใครก่อนหลัง โดยใช้ ใช้ Node ชื่อ Execute Sub Workflow มาช่วย โดยต่อไปเรื่อยๆ ตามขั้นตอนที่ต้องการ ก็สามารถสร้าง Flow ที่มีความแน่นอนสูงได้เช่นกัน

    สอนใช้ n8n EP06 : สร้าง AI Agent ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 62

    📌 สรุปส่งท้าย

    AI Agent ใน n8n คือหัวใจของระบบ Automation ยุคใหม่ ที่ไม่ได้แค่รันตามเงื่อนไขที่กำหนดไว้แบบเป๊ะๆ แต่สามารถวิเคราะห์ คิด ตัดสินใจ และทำงานร่วมกับ AI ตัวอื่น ๆ ได้

    • เชื่อมกับโมเดลระดับเทพผ่าน OpenRouter ได้
    • ใช้ Memory ระยะยาวเพื่อให้สามารถดึง Chat History ย้อนหลังได้นานๆ (เรียกผ่าน Tools ได้)
    • ใช้ Tools หลากหลาย และขยายความสามารถได้ไม่จำกัด เพราะประสานงานกับ AI Agent ตัวอื่นได้อีก
    • รวมถึงจัดการ Output ได้สวยงาม นำไปใช้งานต่อได้ง่าย

    🔥 เพื่อนๆ อ่านจบแล้ว ก็ลองออกแบบ Workflow ที่ AI ทำงานต่อกันแบบสายพาน หรือ คุยกันเอง ประสานงานกันแบบการใช้ผ่าน Tool Subworkflow แล้วจะรู้เลยว่า “AI Stack” มันทรงพลังแค่ไหน

    ป.ล. เอาจริงๆ เวลาผมสร้าง AI Agent ใน n8n ผมก็เบียวๆ ว่าตัวเองกำลังปลุกพลังกองทัพ AI Agent อยู่แบบนี้เลย 😂


    💬 ถ้าชอบบทความนี้ ฝากแชร์ หรือบอกเพื่อน ๆ ที่สนใจระบบ Automation และการใช้งาน AI ด้วยนะครับ

    ถ้ามีคำถาม ข้อเสนอแนะ หรืออยากให้สอนเรื่องไหนเพิ่มเติม ก็คอมเมนต์ไว้ได้เลย💬

    เดี๋ยวในตอนต่อไป เราจะมาเรียนรู้วิธีดึงข้อมูลจาก Node ใน Workflow ที่ซับซ้อนกันครับ

  • สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊

    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊

    เคยสงสัยไหมว่า “ยอดสะสม” (Running Total) ใน Excelทำได้กี่วิธี? ซึ่งแน่นอนว่าคงมีหลายทางเลือกมากมาย! แต่สิ่งที่ผมอยากให้ลองทำ คือ การลองแก้โจทย์เดียวกันด้วยวิธีที่ต่างกันนี่แหละ คือหนึ่งในวิธีฝึก Excel ให้เก่งขึ้นแบบก้าวกระโดด!

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

    • ✅มือใหม่: เรียนรู้การใช้ SUM และ SUMIFS แบบเข้าใจง่าย
    • ✅ สายวิเคราะห์: ลอง Pivot Table หรือสูตร Array สุดทันสมัย
    • ✅ ขั้นโปร: จัดเต็มด้วย Python, Power Query (M Code) และ DAX
    • ✅ เปรียบเทียบทุกวิธี: รู้ว่าแบบไหนเหมาะกับงานคุณ

    ข้อมูลตัวอย่างที่ใช้

    เราเอาข้อมูลไว้ในพื้นที่ A2:B10 นะครับ

    OrderIDAmount
    Order0001200
    Order0002150
    Order000375
    Order0004125
    Order000550
    Order0006100
    Order0007250
    Order0008300

    และเราอาจมีบางเคสทำเป็น Table จะสะดวกกว่า โดยเราจะทำเป็น Table ชื่อ Sales นะครับ

    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 63

    เราจะคำนวณยอดสะสมของคอลัมน์ Amount โดยอิงจากลำดับของ OrderID ไปทีละวิธีกันเลย!


    1. วิธีพื้นฐานโดยใช้สูตรปกติ (Regular Formula)

    วิธีนี้เหมาะสำหรับผู้เริ่มต้น เพราะง่ายและรวดเร็ว ไม่ต้องใช้เครื่องมือพิเศษใดๆ

    1.1 วิธีพื้นฐานแบบดั้งเดิม (ใช้ SUM)

    เพิ่มคอลัมน์ใหม่ชื่อ “RunningTotal” ในคอลัมน์ C โดยในเซลล์ C3 (แถวแรกของข้อมูล) ใส่สูตร:

    =SUM($B$3:B3)
    • $B$3 ล็อกแถวเริ่มต้นให้คงที่
    • B3 จะขยายไปตามแถวที่สูตรถูก Copy ลงมา

    ลากสูตรลงไปจนถึงแถวสุดท้าย (C10) จะได้ตามรูป

    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 64

    ผลลัพธ์:

    • C3: 200
    • C4: 350 (200+150)
    • C5: 425 (200+150+75)
    • และต่อไปเรื่อยๆ

    Tips : เคสนี้ ถ้าข้อมูลเป็น Table จะใช้ [@Amount] ที่เป็น Structure Reference ของ Table วิธีนี้จะไม่ Work ยังไงก็ต้องใช้การอ้างอิงด้วย Cell Reference ตามปกติอยู่ดีนะ แต่ข้อดีของการทำเป็น Table คือสูตรจะถูก Copy ลงมาโดยอัตโนมัตินั่นเอง

    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 65

    วิธี 1.1 นี้เหมาะกับตารางเล็กๆ และไม่ซับซ้อน แต่ถ้าข้อมูลเยอะ อาจเริ่มช้าได้ เพราะต้องบวกการสะสมใหม่ทั้งหมดซ้ำหลายรอบโดยไม่จำเป็น (ลองสังเกตวิธีคิดในสูตร)

    1.2 : ใช้สูตรอ้างอิงข้อมูลสะสมก่อนหน้า

    เพื่อแก้ปัญหาความไม่มีประสิทธิภาพจากวิธีแรก และใช้ประโยชน์จากตาราง Excel (Structured Table) เราสามารถปรับสูตรให้อ้างอิงยอดสะสมจากแถวก่อนหน้าได้ง่ายขึ้น

    ในเซลล์ C3 (แถวแรกของข้อมูล) ใส่สูตร:

    =SUM(C2)+[@Amount]
    • SUM(C2) อ้างอิงยอดสะสมจากแถวก่อนหน้า (ถ้า C2 เป็นหัวตารางที่เป็น text เช่น “RunningTotal” ฟังก์ชัน SUM จะไม่สนใจค่า text โดยอัตโนมัติอยู่แล้ว)
    • [@Amount] อ้างอิงค่า Amount ในแถวปัจจุบันโดยใช้ Structured Reference

    กด Enter สูตรจะถูกเติมลงในทุกแถวของคอลัมน์ในตารางอัตโนมัติ

    ผลลัพธ์:

    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 66
    • C3: 200
    • C4: 350 (200+150)
    • C5: 425 (350+75)
    • และต่อไปเรื่อยๆ

    ข้อดี:

    วิธีนี้เร็วกว่าวิธีแรก เพราะคำนวณเฉพาะการบวกเพิ่มจากยอดก่อนหน้า ไม่ต้องบวกใหม่ทั้งหมด และใช้ Structured Reference ทำให้สูตรอ่านง่ายและยืดหยุ่น เหมาะกับข้อมูลขนาดใหญ่กว่า

    1.3 ใช้ SUMIFS เพื่อยึดตาม OrderID แม้เรียงข้อมูลใหม่

    อีกวิธีนึงที่สามารถใช้ได้ดี คือ SUMIFS ซึ่งใช้ประโยชน์จากการอ้างอิง OrderID มาช่วยในการคำนวณสะสมได้

    =SUMIFS(Sales[Amount], Sales[OrderID], "<=" & [@OrderID])

    คำอธิบาย:

    • ฟังก์ชัน SUMIFS จะบวกเฉพาะค่าจากคอลัมน์ Amount ที่ OrderID มีค่าน้อยกว่าหรือเท่ากับแถวปัจจุบัน
    • ใช้ [@OrderID] เพื่ออ้างอิงค่าในแถวปัจจุบัน
    • ข้อดีคือ ไม่ต้องอาศัยลำดับแถวใน Excel จะเรียงข้อมูลใหม่ หรือ Filter ยังไง Running Total ก็ยังคำนวณได้ถูกต้องเสมอ (เพราะดูจากค่า ไม่ใช่ตำแหน่ง)

    📌 เหมาะกับใคร?

    • เหมาะกับงานที่มีการ Sort หรือ Filter ข้อมูลบ่อยๆ
    • ใช้ใน Table ได้เต็มรูปแบบ ทำงานร่วมกับ Structured Reference ได้
    • ไม่สนตำแหน่งของแถว ใช้ได้แม้ Sort / Filter / สลับลำดับข้อมูล
    • อย่างไรก็ตาม การคำนวณแบบนี้จะไม่สามารถเอายอดสะสมก่อนหน้ามาคิดได้นะ ต้องคำนวณใหม่ทุกตัว (เพื่อรองรับการเรียงใหม่)

    2. ใช้ Pivot Table: วิธีที่สะดวกสำหรับการวิเคราะห์

    ถ้าคุณชอบเครื่องมือที่ช่วยจัดการข้อมูลอัตโนมัติแบบง่ายๆ โดยไม่ต้องเขียนสูตรเลย Pivot Table คือตัวเลือกที่ดี

    ขั้นตอน:

    1. เลือก Table ที่ทำไว้
    2. ไปที่แท็บ Insert > Pivot Table > เลือก “New Worksheet”
    3. ใน Pivot Table Fields:
      • ลาก “OrderID” ไปที่ Rows
      • ลาก “Amount” ไปที่ Values (เลือกให้เป็น Sum of Amount)
    4. คลิกที่ “Sum of Amount” ใน Values > เลือก Value Field Settings
    5. ไปที่ Show Values As > เลือก Running Total In > Base Field เลือก “OrderID”
    6. กด OK

    ผลลัพธ์:

    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 67

    Pivot Table จะแสดงยอดสะสมตามลำดับ OrderID อัตโนมัติ โดยไม่ต้องเขียนสูตรเอง

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


    3. ใช้สูตร Array: วิธีทันสมัยใน Excel 365/2021

    สำหรับผู้ใช้ Excel เวอร์ชันใหม่ (365 หรือ 2021) สามารถใช้ฟังก์ชัน SCAN เพื่อคำนวณยอดสะสมแบบอาร์เรย์ได้

    แต่เวลาเราใช้ Dynamic Arrays แล้วกรณีผลลัพธ์ออกมาหลายค่า จะใส่ไว้ใน Table ไม่ได้ ดังนั้นมันจะเหมาะกับกรณีที่ผลลัพธ์ออกมาในบริเวณที่เป็นข้อมูลปกติที่ไม่ได้เป็น Table ซะมากกว่า

    ขั้นตอน:

    ในเซลล์ C3 ใส่สูตร: SCAN + LAMBDA มาช่วยได้

    SCAN(initial_value,array,function)
    =SCAN(0, Sales[Amount], LAMBDA(acc,val, acc+val))
    • 0 คือค่าเริ่มต้นของผลรวม
    • Sales[Amount] คือช่วงข้อมูล Amount ซึ่งเป็น Array ที่มีหลายค่า
    • LAMBDA(acc, val, acc+val) บอกให้บวกสะสมไปเรื่อยๆ
      • acc = accum value ก่อนหน้า (ค่าเริ่มต้นคือ initial_value คือ 0)
      • val = ค่าแต่ละตัวที่กำลังไล่ SCAN อยู่
      • ชื่อตัวแปรจะตั้งอะไรก็ได้ ไม่จำเป็นต้องใช้ acc กับ val นะ

    กด Enter สูตรจะคำนวณยอดสะสมทั้งหมดในครั้งเดียว

    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 68

    ผลลัพธ์:

    • C3: 200
    • C4: 350 (200+150)
    • C5: 425 (350+75)
    • และต่อไปเรื่อยๆ

    วิธีนี้ก็สะดวก ไม่ต้องลากสูตร และทำงานได้มีประสิทธิภาพ เพราะเอาผลลัพธ์ที่สะสมไว้มาใช้ต่อได้


    4. ใช้ Python in Excel: วิธีที่ง่ายกว่าที่คิด

    ในเมื่อ Excel รุ่นใหม่อย่าง Excel 365 สามารถใช้ Python ที่เหมาะกับการคำนวณขั้นสูงได้แล้ว! เรามาลองใช้ Python คำนวณ Running Total ดู

    ขั้นตอน:

    ไปที่ช่อง Cell ว่างๆ พิมพ์ =PY แล้ว Tab เพื่อเข้าสู่โหมดเขียน Code ด้วย Python

    ใส่โค้ด

    df=xl("Sales[#All]", headers=True)
    df['RunningTotal'] = df['Amount'].cumsum() 
    df

    กด Ctrl+Enter เพื่อรัน Code

    ผลลัพธ์:

    ตอนแรกจะแสดงเป็น Python Object ก่อน

    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 69

    ให้กดเปลี่ยนเป็น Excel Value มันจะได้ Spill ออกมาเป็น Dynamic Array (กด Ctrl+Shift+Alt+M ก็ได้)

    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 70

    ตารางจะแสดงคอลัมน์ “RunningTotal” พร้อมยอดสะสม

    วิธีนี้ได้ผลลัพธ์ออกมาง่ายๆ เลย เพราะมีฟังก์ชันสำเร็จรูปอย่าง .cumsum() มาช่วยอยู่แล้วนั่นเอง


    4. ใช้ Power Query (M Code)

    Power Query เหมาะกับการจัดการข้อมูลที่มีหลายขั้นตอน แล้วบันทึกเป็น Step การทำงานไว้ได้ หากต้องการทำซ้ำ สามารถกด Refresh ได้เลย

    เลือกตารางข้อมูล > ไปที่ Data > Get & Transform Data > From Table/Range

    ใน Power Query Editor ใช้โค้ด M ดังนี้

    4.1 วิธี M Code สร้าง List ที่เปลี่ยนช่วงข้อมูลให้เยอะขึ้นเรื่อยๆ

    let
        Source = Excel.CurrentWorkbook(){[Name="Sales"]}[Content],
        AddRunningTotal = Table.AddColumn(Source, "RunningTotal", (current) => 
            List.Sum(
                Table.SelectRows(Source, each [OrderID] <= current[OrderID])[Amount]
            ), type number)
    in
        AddRunningTotal

    หลักการ:

    • สูตร (current) => List.Sum(Table.SelectRows(Source, each [OrderID] <= current[OrderID])[Amount])

      จะสร้าง List ของ Amount โดย Filter OrderID ที่ไม่เกิน OrderID ปัจจุบัน แล้วบวกผลรวม
    • ตัวอย่าง: ที่แถว Order0003 จะได้ List [200, 150, 75] แล้วคำนวณเป็น 425
    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 71

    ข้อสังเกต:

    วิธีนี้ยังไม่ค่อยมีประสิทธิภาพ เพราะมีการคำนวณซ้ำซ้อนในแต่ละแถว (ถ้าเปิดดู List ก่อนใช้ List.Sum จะเห็นชัดว่าเป็น List ที่ซ้ำกันในแต่ละรอบ)


    4.2 วิธี M Code แบบมีประสิทธิภาพ (แต่ยากนะ)

    เพื่อลดการคำนวณซ้ำซ้อน เราจะใช้การสะสม (Accumulation) ด้วย List.Generate เพื่อคำนวณ Running Total ทีละแถว

    ขั้นตอน:

    ใช้โค้ด M ดังนี้ จะ Efficient ขึ้นเยอะ

    let
        Source = Excel.CurrentWorkbook(){[Name="Sales"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source, {{"OrderID", type text}, {"Amount", Int64.Type}}),
        MyData = Table.Buffer(#"Changed Type"),
        AmountList = List.Buffer(MyData[Amount]),
        RunningTotalList = List.Generate(
            () => [Total = AmountList{0}, Index = 0],
            each [Index] < List.Count(AmountList), 
            each [Total = List.Sum({[Total], AmountList{[Index] + 1}}), Index = [Index] + 1], 
            each [Total]
        ),
        TransfromToList = Table.ToColumns(MyData) & {Value.ReplaceType(RunningTotalList, type {number})},
        Result = Table.FromColumns(TransfromToList, Table.ColumnNames(MyData) & {"Running Total"})
    in
        Result
    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 72

    คลิก Close & Load เพื่อโหลดข้อมูลกลับไปที่ Excel

    หลักการทำงานของโค้ด

    • Source : ดึงตาราง “Sales” จาก Excel มาเป็นตารางใน Power Query
    • #”Changed Type” : กำหนด Data Type
    • MyData : ใช้ Table.Buffer เพื่อเก็บตารางไว้ในหน่วยความจำ ลดการประเมินซ้ำเมื่ออ้างอิง MyData ภายหลัง (เช่น ดึง Amount, Table.ToColumns)
    • AmountList : ดึงคอลัมน์ Amount ออกมาเป็น List (เช่น {200, 150, 75, …}) และใช้ List.Buffer เพื่อเก็บในหน่วยความจำ
    • RunningTotalList : คำนวณ Running Total ด้วย List.Generate ซึ่งจะอธิบายถัดไป
    • TransfromToList : แปลงตารางเป็น List และเพิ่ม Running Total โดยกำหนด Type เป็น Number
      • Table.ToColumns(MyData): แปลงตาราง MyData เป็น List ของคอลัมน์ (เช่น {{OrderID1, OrderID2, …}, {Amount1, Amount2, …}})
      • Value.ReplaceType(RunningTotalList, type {number}): กำหนด Data Type ให้ RunningTotalList เป็น List ของ number
      • รวม RunningTotalList เข้ากับ List ของคอลัมน์จาก MyData
    • Result : สร้างตารางผลลัพธ์
      • ใช้ Table.FromColumns เพื่อสร้างตารางใหม่จาก TransfromToList
      • ใช้ชื่อคอลัมน์จาก Table.ColumnNames(MyData) และเพิ่ม Running Total

    ส่วนสำคัญ

    ส่วนสำคัญ คือ Part ที่ เป็น Running Total List ที่ใช้สูตรนี้ ที่ทำให้มัน Efficient ขึ้นมาก

    = List.Generate(
            () => [Total = AmountList{0}, Index = 1],
            each [Index] <= List.Count(AmountList),
            each [Total = [Total] + AmountList{[Index]}, Index = [Index] + 1],
            each [Total]
        )

    หลักการ ของ RunningTotalList

    • เริ่มต้นที่ Total = AmountList{0} (Amt แรก คือ 200) และ Index = 0
    • วนลูปจนถึง Index < List.Count(AmountList) (เช่น 8 สมาชิก วนถึง Index = 7)
    • คำนวณ Total โดยใช้ List.Sum({[Total], AmountList{[Index] + 1}}), บวกยอดสะสมจาก Total เดิม และ Amount ใหม่ของแถวถัดไป
    • คืนค่า Total เป็น List ของ Running Total (เช่น {200, 350, 425, …})
    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 73

    ผลลัพธ์:

    • RunningTotal จะแสดงยอดสะสมตามลำดับ (200, 350, 425, 550, 600, 700, 950, 1250)

    ข้อดี:

    วิธีนี้ลดการคำนวณซ้ำซ้อนเมื่อเทียบกับวิธี 4.1 เพราะคำนวณสะสมทีละครั้งแทนการ Filter ใหม่ทุกแถว เหมาะกับข้อมูลขนาดใหญ่


    5. ใช้ DAX

    DAX เหมาะสำหรับการทำงานใน Power Pivot (หรือ Power BI) โดยที่เราทำได้ 2 วิธี คือ ใช้ DAX สร้าง New Column หรือ สร้าง New Measure ก็ได้

    5.1 DAX New Column

    DAX New Column จะคำนวณ Running Total และเก็บผลลัพธ์เป็นคอลัมน์ใหม่ในตาราง Sales

    กดสร้าง New Column ใน Data Model ชื่อ Running Total แล้วใส่สูตรนี้

    โค้ด DAX สำหรับ New Column

    = 
    VAR CurrentID=Sales[OrderID]
    VAR AccumTable=FILTER(
            ALL(Sales[Amount],Sales[OrderID]) ,
            Sales[OrderID] <= CurrentID)    
    RETURN
        SUMX(AccumTable,Sales[Amount])
    สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 74

    การทำงาน

    • VAR CurrentID = Sales[OrderID]: เก็บค่า OrderID ของแถวปัจจุบัน (เช่น Order0001)
    • VAR AccumTable = FILTER…
      • ALL(Sales[Amount], Sales[OrderID]): ล้างบริบทการกรองและเลือกเฉพาะคอลัมน์ Amount และ OrderID
      • Sales[OrderID] <= CurrentID: กรองแถวที่มี OrderID น้อยกว่าหรือเท่ากับ CurrentID
    • SUMX(AccumTable, Sales[Amount]): รวมค่า Amount จากตาราง AccumTable ที่กรองแล้ว

      ข้อดี

      • โค้ดอ่านง่ายขึ้นด้วย VAR
      • เหมาะสำหรับการเก็บค่า Running Total แบบคงที่ไว้ในตารางเลย ตอนเรียกดูรายงานจะเร็ว

      ข้อควรระวัง

      • ต้องเรียงลำดับ OrderID ให้ถูกต้อง (เช่น ใช้ Power Query เพื่อเรียงลำดับก่อน)
      • ค่าเหล่านี้จะไม่เปลี่ยนตาม Filter Context ของรายงานแล้ว

      5.2 DAX Measure (ใช้ VAR)

      DAX Measure จะคำนวณ Running Total ตามบริบทการกรอง (เช่น ใน Visual หรือ PivotTable) โดยไม่เก็บผลลัพธ์ในตารางเลย

      โค้ด DAX สำหรับ New Measure

      Running Total Measure = 
      VAR CurrentID = MAX(Sales[OrderID])
      RETURN
      CALCULATE(
          SUM(Sales[Amount]),
              Sales[OrderID] <= CurrentID
      )
      สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 75

      การทำงาน

      • VAR CurrentID = MAX(Sales[OrderID]): เก็บค่า OrderID สูงสุดในบริบทการกรองปัจจุบัน (เช่น ถ้าใน PivotTable กรองถึง Order0003, CurrentID จะเป็น Order0003)
      • CALCULATE: คำนวณผลรวมของ Amount โดยล้าง Filter Context เกี่ยวกับ OrderID แล้วค่อยกรองแถวใน Sales โดยเลือกเฉพาะแถวที่มี OrderID น้อยกว่าหรือเท่ากับ CurrentID
      • ผลลัพธ์:
        • ถ้าใน Visual กรองถึง Order0003: 200 + 150 + 75 = 425
        • ถ้าแสดงทั้งตาราง: 200 + 150 + 75 + 125 + 50 + 250 + 100 + 300 = 1250

      ข้อดี

      • โค้ดชัดเจนด้วย VAR
      • คำนวณแบบไดนามิกตามบริบทการกรอง
      • ประหยัดหน่วยความจำ เพราะไม่เก็บในตาราง

      ข้อควรระวัง

      • ต้องใช้ใน Visual หรือ PivotTable ที่มีการกรอง OrderID
      • อาจช้าลงถ้ามีการกรองจำนวนมาก

      การเปรียบเทียบ

      คุณสมบัติNew Column (VAR)Measure (VAR)
      ที่เก็บข้อมูลอยู่ในตารางคำนวณแบบไดนามิก
      ประสิทธิภาพอาจช้าตอน refresh
      แต่เร็วตอนดูรายงาน
      เร็วตอน refresh
      แต่อาจช้าตอนดูรายงาน
      การใช้งานแสดงผลคงที่วิเคราะห์แบบโต้ตอบได้

      คำแนะนำ

      • New Column: ใช้เมื่อต้องการค่า Running Total แบบคงที่และไม่เปลี่ยนแปลงบ่อย
      • Measure: ใช้เมื่อต้องการวิเคราะห์แบบไดนามิกหรือกรองข้อมูลใน Visual

      📌 สรุป: วิธีไหนเหมาะกับใคร?

      วิธีจุดเด่นเหมาะกับกรณี
      1.1 SUM ปกติเข้าใจง่าย มือใหม่ใช้ได้ทันทีตารางเรียงลำดับแน่นอน
      1.2 SUM + [@Amount]ลากสูตรอัตโนมัติ, อ่านง่ายใช้กับ Table ได้ดี
      และประสิทธิภาพสูง
      1.3 SUMIFSไม่พึ่งลำดับแถว, คงผลลัพธ์เดิมไว้ได้แม้มีการสลับลำดับข้อมูลถูก Sort ใหม่แล้วไม่พัง
      2. Pivot Tableไม่ต้องเขียนสูตรวิเคราะห์ข้อมูลแบบ เปลี่ยนมุมมองได้สะดวก
      3. SCAN (Array)เขียนครั้งเดียว คำนวณทั้งชุดงานไม่อยู่ใน Table / ชอบสูตรใหม่
      4. Pythonเขียนสั้น ใช้ .cumsum()เขียน Script/Advanced Data Analysis
      5.1 Power Query
      (Filter)
      ขั้นตอนชัดเจนเหมาะในขั้นตอนข้อมูล ที่ข้อมูลไม่เยอะ
      5.2 Power Query (Accumulate)เร็วกว่าแบบ Filterเหมาะในขั้นตอนข้อมูล ใช้กับข้อมูลจำนวนมากได้
      6.1 DAX Columnค่าเก็บคงที่ ดูรายงานเร็วสร้าง Data Model
      6.2 DAX MeasureDynamic ตาม Contextวิเคราะห์ใน PowerPivot / Visual

      ส่งท้าย

      Running Total อาจดูเหมือนเรื่องเล็กๆ แต่พอเราได้ลองใช้หลายๆ วิธี จะพบว่าแต่ละแบบมี “แนวคิดเบื้องหลัง” ที่แตกต่างกัน และนั่นแหละคือกุญแจสู่การเป็น “คนเก่ง Excel” เลยล่ะ!
      ลองใช้หลายเทคนิคกับข้อมูลจริงดูนะ แล้วคุณจะเข้าใจ Excel ในแบบที่ลึกและสนุกยิ่งขึ้นแน่นอนครับ 😊

    • แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel

      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel

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

      ดังนั้นผมจึงคิดว่า ทำไมเราไม่เขียนฟังก์ชันที่ตอบโจทย์ขึ้นมาเองซะเลยล่ะ! จะได้แก้ Pain Point และให้การใช้งาน Power Query ง่ายขึ้นด้วย

      ในบทความนี้ผมก็จะมาแนะนำให้รู้จักว่าผมเขียนฟังก์ชันอะไรเจ๋งๆ ออกมาใน Package ThepExcel-Mfx บ้าง และความสามารถของมันคืออะไร? ซึ่งจะใช้ได้ทั้งกับ Excel และ Power BI เลยครับ สะดวกมากๆ ยกตัวอย่างสิ่งที่ผมทำไว้ เช่น

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

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

      Trim แบบเดียวกับ Excel ด้วย ThepTrim

      ใน Power Query นั้นมี Trim แต่ว่ามันดันไม่ตัดเว้นวรรคตรงกลาง วิธีแก้ปัญหาที่ค่อนข้างดีคือสร้างฟังก์ชันขึ้นมาให้มันทำแบบเดียวกับ Excel ซะเลย

      คุณสามารถเอา M code นี้ไปใช้เป็นฟังก์ชันของตัวเองได้ เช่น ตั้งชื่อว่า ThepTrim ก็ได้

      (OriginalText as text,optional TrimChar as text) as text=>
      let
          // MCode created by ThepExcel.com
          TrimCharFix = if TrimChar is null then " " else TrimChar,
          SplitStep = Text.Split(OriginalText,TrimCharFix),
          RemoveBlankStep = List.Select(SplitStep, each _ <> ""),
          CombineStep = Text.Combine(RemoveBlankStep,TrimCharFix)
      in
      CombineStep

      จัดการวันที่ผิดรูปแบบ ด้วย ThepConvertDate

      วิธีใช้งาน

      • ThepConvertDate([Text Input])
        กรณีไม่กรอก locale, ใช้วันที่ที่ใกล้วันปัจจุบันที่สุด
      • ThepConvertDate([Text Input],”uk”) พยายามมองเป็น ว ด ป
      • ThepConvertDate([Text Input],”us”) พยายามมองเป็น ด ว ป
      • ThepConvertDate([Text Input],”th”) พยายามมองเป็นปีไทย
      (DateText as text, optional locale as nullable text) as nullable date =>
      let
          // 0. ตัด ordinal suffixes st/nd/rd/th ที่มาต่อท้ายตัวเลข (กรณีตามด้วย space)
          OrdinalDelims = {"st ", "nd ", "rd ", "th "},
          RemoveOrdinal = List.Accumulate(
              OrdinalDelims,
              DateText,
              (state, s) => Text.Replace(state, s, " ")
          ),
      
          // 1. ตาราง mapping ไทย→อังกฤษ (full name + abbr. มี/ไม่มีจุด)
          MonthTH2EN = {
              {"มกราคม", "Jan"}, {"ม.ค.", "Jan"}, {"ม.ค", "Jan"}, {"มค", "Jan"},
              {"กุมภาพันธ์", "Feb"}, {"ก.พ.", "Feb"}, {"ก.พ", "Feb"}, {"กพ", "Feb"},
              {"มีนาคม", "Mar"},    {"มี.ค.", "Mar"}, {"มี.ค", "Mar"}, {"มีค", "Mar"},
              {"เมษายน", "Apr"},    {"เม.ย.", "Apr"}, {"เม.ย", "Apr"}, {"เมย", "Apr"},
              {"พฤษภาคม", "May"},  {"พ.ค.", "May"}, {"พ.ค", "May"}, {"พค", "May"},
              {"มิถุนายน", "Jun"},  {"มิ.ย.", "Jun"}, {"มิ.ย", "Jun"}, {"มิย", "Jun"},
              {"กรกฎาคม", "Jul"},  {"ก.ค.", "Jul"}, {"ก.ค", "Jul"}, {"กค", "Jul"},
              {"สิงหาคม", "Aug"},   {"ส.ค.", "Aug"}, {"ส.ค", "Aug"}, {"สค", "Aug"},
              {"กันยายน", "Sep"},   {"ก.ย.", "Sep"}, {"ก.ย", "Sep"}, {"กย", "Sep"},
              {"ตุลาคม", "Oct"},     {"ต.ค.", "Oct"}, {"ต.ค", "Oct"}, {"ตค", "Oct"},
              {"พฤศจิกายน", "Nov"}, {"พ.ย.", "Nov"}, {"พ.ย", "Nov"}, {"พย", "Nov"},
              {"ธันวาคม", "Dec"},   {"ธ.ค.", "Dec"}, {"ธ.ค", "Dec"}, {"ธค", "Dec"}
          },
      
          // 2. แปลงชื่อเดือนไทย → อังกฤษ (ใช้ RemoveOrdinal แทน DateText)
          ReplaceMonthTH = List.Accumulate(
              MonthTH2EN,
              RemoveOrdinal,
              (state, m) => Text.Replace(state, m{0}, m{1})
          ),
      
          // 3. แทนตัวคั่นทุกชนิด (รวม . , space, -, _ , /) เป็น "/"
          delimiters = {"-", ",", "_", " ", "/", "."},
          NormalizeDelimiter = List.Accumulate(
              delimiters,
              ReplaceMonthTH,
              (state, d) => Text.Replace(state, d, "/")
          ),
      
          // 4. split แล้วเอาค่าว่าง/null ออก
          TokenList =
              List.Select(
                  List.Transform(
                      Text.Split(Text.Lower(NormalizeDelimiter), "/"),
                      Text.Trim
                  ),
                  each _ <> "" and _ <> null
              ),
          PreprocessedText = Text.Combine(TokenList, "/"),
      
          // 5. ลอง parse ด้วย locale ต่างๆ
          TryTH = try Date.FromText(PreprocessedText, "th-TH") otherwise null,
          TryUK = try Date.FromText(PreprocessedText, "en-GB") otherwise null,
          TryUS = try Date.FromText(PreprocessedText, "en-US") otherwise null,
      
          // 6. สร้าง MakeSenseDate: เลือกวันที่ห่างจากวันนี้น้อยสุด
          CurrentDate = DateTime.Date(DateTime.LocalNow()),
          CandidateDates = List.RemoveNulls({TryTH, TryUK, TryUS}),
          DateWithDiff = List.Transform(
              CandidateDates,
              each {_, Number.Abs(Duration.Days(_ - CurrentDate))}
          ),
          SortedByDiff = List.Sort(
              DateWithDiff,
              (a, b) => if a{1} < b{1} then -1 else if a{1} > b{1} then 1 else 0
          ),
          MakeSenseDate = if List.Count(SortedByDiff)>0 then SortedByDiff{0}{0} else null,
      
          // 7. เลือกผลลัพธ์สุดท้ายตาม localeValue หรือ fallback เป็น MakeSenseDate
          localeValue = if locale = null then "auto" else Text.Lower(locale),
          Result =
              if localeValue = "th" then TryTH
              else if localeValue = "uk" then TryUK
              else if localeValue = "us" then TryUS
              else MakeSenseDate
      in
          Result
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 76

      วิธีโหลด Package ThepExcel-Mfx

      แต่ก่อนจะใช้ฟังก์ชันที่ผมเขียนได้ ก็ต้องมีฟังก์ชันที่ผมเขียนก่อนนะครับ

      ใครสนใจไฟล์ Package ThepExcel-Mfx ที่ผมทำขึ้นมานี้สามารถโหลดไฟล์ได้ครับ
      มีทั้งแบบฟรี และแบบ Premium (ใครที่อยากได้ฟังก์ชันเจ๋งๆ เยอะกว่า หรือ อยากสนับสนุนผมก็ซื้อแบบ Premium ได้ครับ)
      ซึ่งทั้ง 2 แบบผมจะมีการเพิ่มฟังก์ชันให้เรื่อยๆ ตาม Feedback ของคนใช้งานด้วยครับ

      1. พอมีไฟล์ของผมแล้วทำดังนี้ ให้ Copy Query Folder ที่ชื่อ ThepExcel-Mfx
      2. จากนั้นเอาไป Paste ใส่ในไฟล์ Excel หรือ Power BI ของตัวเองได้เลย
      ThepExcel-Mfx

      เพียงเท่านี้คุณก็จะสามารถใช้ฟังก์ชันพิเศษที่ผมเขียนเอาไว้ได้แล้วครับ

      แนะนำฟังก์ชันใน Package ThepExcel-Mfx

      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 77

      ให้ตารางข้างบนเป็น Query ที่ชื่อว่า MyTable ซึ่งจะใช้อ้างอิงกับหลายๆ ตัวอย่างนะครับ

      กลุ่มที่อยู่ใน Package Free (ใน Premium ก็มี)

      ThepDatefromText : เปลี่ยนข้อความ ให้เป็นวันที่ แถมเลื่อนปีได้

      =ThepDatefromText(DateText as text,DateFormat,optional offsetYear as number)as date
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 78
      สามารถกำหนดได้ให้อ่าน format แบบไหน โดยมันจะสนใจแค่การเรียงของตัวเลขเท่านั้น ไม่สนตัวคั่น
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 79
      สามารถเลื่อนปีให้น้อยลง 543 ปีได้ เพื่อแก้ปัญหาการกรอก พ.ศ. <-> ค.ศ.

      ThepExtractNumber : ดึงเฉพาะตัวเลขจากข้อความ เลือกได้ว่าจะเอาจุดกับ space หรือไม่

      =ThepExtractNumber(OriginalText as text,optional Keepdot as logical, optional Keepspace as logical) as text
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 80
      เก็บเฉพาะตัวเลข ถ้าไม่ระบุอะไรเพิ่ม คือจะเก็บ . และ space ไว้ด้วย

      ThepGetColumnName : ดึงเอาชื่อคอลัมน์จากลำดับตัวเลข

      =ThepGetColumnName(TableName as table,ColNumber as number) as text
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 81
      ดึงค่าว่าคอลัมน์ที่ 3 ของตาราง MyTable ชื่อว่าอะไร

      ThepTrim : Trim แบบเดียวกับ Excel ที่เราคุ้นเคย แต่เลือกอักขระที่จะ Trim ได้ด้วย

      =ThepTrim(OriginalText as text,optional TrimChar as text) as text
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 82
      ถ้าไม่ระบุอะไรก็จะ Trim ข้อความที่เป็น Space ออกไป ทั้งหน้า หลัง และตรงกลางจะเหลือแค่เคาะเดียว
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 83
      แต่ถ้าระบุอักขระตัวไหนก็จะ Trim ตัวนั้นออกแทน space

      ThepGetMultipleListItem : ดึงข้อมูลจาก List หลายๆ ไอเท็มพร้อมกันได้

      =ThepGetMultipleListItem(OriginalList as list,PosIndex as list) as list

      โดยระบุ PosIndex เป็น List ที่เก็บ index ของ item ที่ต้องการไว้ (index ของ list เริ่มต้นที่เลข 0)

      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 84
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 85
      สามารถระบุ Index ติดลบเพื่อเอาข้อมูลนับจากหลังสุดได้ (คล้าย Python)

      ThepRenameColumn : เปลี่ยนชื่อคอลัมน์โดยระบุตำแหน่ง (ระบุเป็น list ได้ )

      =ThepRenameColumn(TableName as table,ColNumber as any,NewName as any) as table
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 86
      แบบเปลี่ยนแค่คอลัมน์เดียว
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 87
      แบบเปลี่ยนคอลัมน์ที่ 1 3 และ 4 พร้อมกัน (ถ้าใส่ลำดับคอลัมน์เป็น -1 ก็จะหมายถึงคอลัมน์สุดท้าย)

      ThepGenDateTableFromDate : สร้างตารางจากวันที่เริ่มต้นและสิ้นสุดที่กำหนด

      =ThepGenDateTableFromDate(StartDate as date,EndDate as date) as table

      สามารถกด Invoke ฟังก์ชันแล้วระบุวันที่จากปฏิทินได้เลย

      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 88
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 89

      ThepGenDateTableFromText : สร้างตารางจากข้อความวันที่เริ่มต้นและสิ้นสุดที่กำหนด

      =ThepGenDateTableFromText(StartDateText as text,EndDateText as text) as table

      คล้ายๆ กับฟังก์ชันก่อนหน้า แต่คราวนี้ ระบุ Date ให้เป็น text รูปแบบ yyyymmdd ได้เลย

      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 90
      สร้างวันที่ตั้งแต่ 1 Jan 2020 ถึง 15 Jan 2020

      ThepReplaceAllError : เปลี่ยน Error ทั้งตารางให้กลายเป็นตัวที่ต้องการ

      =ThepReplaceAllError(TableName as table,optional ReplaceWith as text) as table
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 91
      เดิมมี Error หลายจุด
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 92
      สามารถสั่งให้กลายเป็นค่าอะไรก็ได้ เช่น ค่าว่าง null

      ThepRegExExtract : ดึงข้อความที่ตรงกับ RegEx Pattern ที่ระบุออกมา

      ThepRegExMatchCount : นับได้ว่าเจอผลลัพธ์ตาม Pattern กี่ชุด (ไม่สนใจ capturing Group)

      ThepRegExReplace : แทนที่ข้อความที่ตรงกับ Pattern ที่ระบุ

      ThepOneHot : แปลงคอลัมน์ที่มีหลายๆ item เป็น Category ให้กลายเป็นคอลัมน์ที่มีค่าเป็น 1 กับ 0 (One Hot Encoding)

      =ThepOneHot(TableName as table,TargetColumnName as text) as table
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 93

      ThepThaiNumbertoArabic : แปลงเลขไทยเป็นเลขอารบิก

      = ThepThaiNumbertoArabic(OriginalText as text) as text
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 94

      ThepNETWORKDAYS : คำนวณจำนวนวันทำการระหว่างวันเริ่มและวันจบ

      =ThepNETWORKDAYS(startDate as date, endDate as date, optional weekendPattern as text, optional holidays as nullable list) as number

      กลุ่มที่อยู่ใน Package Version Premium เท่านั้น

      ThepReplaceTextList : แทนค่าในข้อความโดยใส่ค่าทีเดียว

      หลายๆ ตัวโดยใช้ List ได้

      =ThepReplaceTextList(OriginalText as text,OldTextList as list,NewTextList as list) as text 
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 95

      ThepFlattenHeader : เปลี่ยนหัวตารางหลายชั้นให้กลายเป็นชั้นเดียว แถมใส่ตัวคั่นได้

      =ThepFlattenHeader(TableName as table,NumRowHeader as number,optional Seperator as text, optional reverse as logical) as table
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 96
      หัวตาราง 2 ชั้น ช่างช้ำใจ…
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 97
      ถ้าไม่ระบุตัวคั่นก็จะต่อกันเลย และลำดับจะย้อนกลับจากหัวตารางล่างไปบนให้ด้วย
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 98
      สามารถใส่ตัวคั่น เช่น – และระบุเป็น false เพื่อไม่ต้องกลับลำดับบนล่างของหัวตาราง

      ThepGetColumn : ดึงเอาคอลัมน์จากลำดับตัวเลขเริ่มและสิ้นสุด

      =ThepGetColumn(TableName as table,StartColumnNum as number,optional EndColumnNum as number) as table
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 99
      เอาเฉพาะคอลัมน์ 2 ถึง 4 จากตาราง MyTable มาได้เลย

      ThepMoveColumn : ย้ายคอลัมน์แบบไม่อ้างอิงชื่อคอลัมน์อื่นที่ไม่เกี่ยวข้อง

      =ThepMoveColumn(TableName as table,ColumnName as any,optional MoveFirst as logical) as table
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 100
      ย้ายคอลัมน์ลูกค้ามาซ้ายสุดของตาราง โดยสูตรไม่อ้างอิงชื่อคอลัมน์อื่น
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 101
      ย้ายคอลัมน์ลูกค้ากับสินค้า (ระบุเป็น List ได้) ไปขวาสุดของตาราง ( ระบุ MoveFirst เป็น false) โดยสูตรไม่อ้างอิงชื่อคอลัมน์อื่น

      ThepExpandAllColumn : แตกคอลัมน์ออกมาจากทุกตารางแบบไม่ฝังชื่อคอลัมน์ กำหนด prefix ได้

      =ThepExpandAllColumn(TableName as table,optional prefix as text) as table

      ตารางที่จะ Expand ออกมาจะต้องอยู่ที่คอลัมน์ที่ชื่อว่า Data เท่านั้น เช่น มีข้อมูลก่อนจะ Expand ดังนี้

      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 102

      เราสามารถเรียกฟังก์ชันมา Expand คอลัมน์ทั้งหมดได้ (โดยมันจะ Scan คอลัมน์ทั้งหมดใหม่เสมอ) ดังนี้

      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 103

      หรือเราจะระบุ Prefix ของคอลัมน์ที่ Expand ออกมาก็ได้ เช่น

      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 104

      ThepMergeTableOffsetRow : ดึงข้อมูล 2 ตารางมาประกบกัน สามารถเหลื่อมแถวได้

      =ThepMergeTableOffsetRow(TableName1 as table,TableName2 as table, RowOffset as number) as table
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 105
      สั่งให้ Merge กับตารางตัวเอง โดยเลื่อนแถว -1 คือ เอาข้อมูลของแถวก่อนหน้ามาได้

      ThepSearchColumn : เลือกเอาเฉพาะคอลัมน์ที่มีคำที่กำหนด แถมปะเพิ่มคอลัมน์ที่ต้องการได้

      =ThepSearchColumn(TableName as table,FindColText as text,optional MatchType as text,optional ColtoKeep as list) as table

      ตัว parameter MatchType สามารถระบุ option เป็นข้อความได้ดังนี้

      • contain : หาที่มีคำนั้นอยู่ข้างใน (ค่า Default กรณีไม่ระบุ MatchType)
      • start: หาที่มีคำนั้นนำหน้า
      • end : หาที่มีคำนั้นลงท้าย
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 106
      หาคอลัมน์ที่มีคำว่า ชิ้น อยู่
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 107
      หาคอลัมน์ที่มีคำว่าชิ้น และปะคอลัมน์ TXID กับ สินค้าเข้าไปด้วย

      ThepRegExExtractAll : ดึงผลลัพธ์ทุกตัวทุก SubGroup ออกมาเป็น List

      เทคนิคที่ทำให้ใช้สูตรของผมได้ง่ายขึ้น (ไม่จำเป็นต้องทำก็ได้)

      ปกติแล้ว การ Copy Paste Query ข้ามไฟล์ ถ้า Code ใน Query นั้นๆ ดันไม่ได้เริ่มด้วย let…in… ตัวโปรแกรมจะใส่ Code let…in…เพิ่มมาให้เองอัตโนมัติ

      ซึ่งมีข้อเสียคือ เวลาเรียกใช้ฟังก์ชันใน Formula Bar มันจะมองไม่เห็น ToolTips เช่นในรูป (แต่ถ้ากด Invoke Function จะเห็นปกตินะ)

      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 108

      ซึ่งถ้าอยากให้ตอนเขียนสูตรใน Formula Bar เห็น Tooltips ตามปกติตามรูปข้างล่าง ก็มีอยู่ 3 way ที่จะแนะนำ คือ

      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 109
      • Way 1: ให้เอาไฟล์ของผม copy paste เป็นไฟล์ตั้งต้นของคุณเวลาจะเขียน Query ไปเลย (โดยไม่ต้องใช้การ copy query)
      • Way 2 : เปิด Advanced Editor แล้ว copy M code จากไฟล์ผมไป Paste ใน Blank Query ของคุณตรงๆ
      • Way 3 : ใช้การ Copy Query นี่แหละ แต่ให้เข้า Advanced Editor แล้วเอาคำว่า let…in… source ที่ มาครอบอยู่ออกไปซะครับ

      เดี๋ยวขออธิบาย Way3 เพิ่มเติม… เช่น สูตรในฟังก์ชัน ThepTrim หลังจาก Copy Query มาจะเป็นแบบนี้ (มีสีแดงๆ เพิ่มมาโดยอัตโนมัติ ให้คุณเอามันออกไปซะ)

      ดู code แบบนี้ได้ใน View -> Advanced Editor นะครับ

      let
           Source = (OriginalText as text,optional TrimChar as text) as text=>
       let
           TrimCharFix = if TrimChar is null then " " else TrimChar,
           SplitStep = Text.Split(OriginalText,TrimCharFix),
           RemoveBlankStep = List.Select(SplitStep, each _ <> ""),
           CombineStep = Text.Combine(RemoveBlankStep,TrimCharFix)
       in
       CombineStep
       in
           Source

      พอเอาสีแดงๆ ออกไปจะเหลือเป็นแบบนี้ ซึ่งจะใช้สูตรได้ดีขึ้น

      (OriginalText as text,optional TrimChar as text) as text=>
       let
           TrimCharFix = if TrimChar is null then " " else TrimChar,
           SplitStep = Text.Split(OriginalText,TrimCharFix),
           RemoveBlankStep = List.Select(SplitStep, each _ <> ""),
           CombineStep = Text.Combine(RemoveBlankStep,TrimCharFix)
       in
       CombineStep
    • วิธีคำนวณ Critical Path Method ในงานบริหารโครงการ ด้วย Excel (ปรับปรุงใหม่)

      วิธีคำนวณ Critical Path Method ในงานบริหารโครงการ ด้วย Excel (ปรับปรุงใหม่)

      ต่อเนื่องจากบทความการบริหารโครงการ หรือ Project Management ด้วย Excel ที่ผมได้เขียนไปก่อนหน้านี้ ซึ่งเป็นเรื่องของการทำ Gantt Chart คราวนี้ผมจะขอพูดถึงเรื่องของการวางแผนโดยใช้ Critical Path หรือคือเส้นทางการทำงานที่สำคัญที่สุด ซึ่งถ้าหากงานใดงานหนึ่งใน Path นั้นเกิดการ Delay ปุ๊ปจะทำให้โครงการโดยรวม Delay ทันที

      หมายเหตุ : เดิมทีบทความนี้ใช่สูตรสมัย Excel 2013 ซึ่งยากมาก เวลาก็ผ่านไปนานแล้ว ผมเลยปรับบทความนี้ใหม่ให้ใช้สูตรของ Excel 365 จะได้เขียนสูตรง่ายขึ้น และทำให้ข้อมูลเป็น Table จะได้อ่านสูตรง่ายขึ้นและมีความ Dynamic มากขึ้นด้วย

      Case ตัวอย่าง

      โดยผมใช้ภาพประกอบจากบทความนี้ ซึ่งมีอธิบายเรื่องวิธีการคำนวณแบบ Manual ให้ด้วย แต่ผมจะอธิบายวิธีการทำแบบ Auto ใน Version Excel ให้ดูครับ

      วิธีคำนวณ Critical Path Method ในงานบริหารโครงการ ด้วย Excel (ปรับปรุงใหม่) 110
      รูปจาก https://pmstudycircle.com/2014/01/critical-path-method-cpm-in-project-management/

      วิธีการอ่านรูป

      • A,B,C คือชื่อของงานย่อยๆ
      • ตัวเลขในกล่องสี่เหลี่ยมคือ ระยะเวลาที่ต้องใช้ในการทำงานนั้นๆ
      • ลูกศรที่ชี้คือทำงานนั้นเสร็จแล้วต้องทำงานอะไรต่อ (แสดงความ dependency กัน) เช่น งาน B จะเริ่มทำได้เมื่อ A และ D เสร็จแล้วทั้งคู่เท่านั้น

      ความหมายของคำศัพท์แต่ละอัน

      มีองค์ประกอบอยู่ 4 ตัวที่สำคัญ คือ

      • Early Start (ES) : งานนั้นๆ จะเริ่มเร็วสุดได้เมื่อไหร่ = Early Finish ของ Activity ก่อนหน้าอันสุดท้าย + 1 นั่นเอง
      • Early Finish (EF) : งานนั้นๆ จะเสร็จได้เร็วสุดเมื่อไหร่ = Early Start + Duration ของงาน -1 (เพื่อ adj ให้นับวันเริ่มด้วย)
      • Late Finish (LF) : งานนั้นๆ จะเสร็จได้ช้าสุดเมื่อไหร่ = Late Start ของ Activity ถัดไปอันแรก -1
      • Late Start (LS) : งานนั้นๆ จะเริ่มได้ช้าสุดเมื่อไหร่ = Late Finish – Duration + 1

      Assumption

      สมมติว่าทำงานนึงเสร็จวันที่ 5 งานที่ต้องทำลำดับต่อไปจะเริ่มได้เร็วสุดวันที่ 6 นะครบ (ถือว่าวันที่ 5 คือสิ้นวันแล้ว)

      ซึ่งเราจะคำนวณพวก Early Start, Early Finish, Late Start, Late Finish ของแต่ละงานแบบอัตโนมัติครับ บอกไว้ก่อนว่าสูตรในบทความนี้ค่อนข้างซับซ้อน กรุณาทำใจก่อนดู 555

      เริ่มลงมือทำ

      ข้อมูลดิบใน Excel

      เราบันทึกข้อมูลลงไปประมาณนี้

      Activity	Duration	งานก่อนหน้า
      A	10	
      B	12	A,D
      C	9	B
      D	5	
      E	7	D,G
      F	6	E
      G	3	
      H	4	G
      I	6	H

      โดยผมทำเป็น Table ไว้ จะได้อ่านสูตรง่ายขึ้นและมีความ Dynamic มากขึ้นด้วย

      เริ่มคำนวณ ES และ EF

      เราจะต้องคำนวณ Early Start (ES) ก่อน ซึ่งคำนวณมาจาก

      Early Start (ES) 
      = Early Finish ของ Activity ก่อนหน้าอันสุดท้าย + 1

      ซึ่ง Early Finish ของ Activity ก่อนหน้าอันสุดท้าย ถ้าไม่มีก็คือถือว่าเป็น 0 ไปนั่นเอง ซึ่งเราใช้ IF มาดักได้

      Early Start (ES) 
      = IF([@งานก่อนหน้า]="",0,[@[Max EF ก่อนหน้า]])+1

      ส่วน EFก่อนหน้า เรายังไม่มี ก็ต้องคำนวณออกมาก่อน ซึ่งทำได้โดยใช้สูตรที่ว่า

      Early Finish (EF) 
      = ESตัวนั้น + Duration -1
      = [@ES]+[@Duration]-1

      ซึ่ง EF ก่อนหน้า มันอาจมีหลายตัวก็ได้ เช่น กิจกรรม B มีก่อนหน้าคือ A กับ D ซึ่งเราต้องทำการ Lookup ค่า EF ของ A กับ D ออกมา แล้วหาค่า MAX ซึ่งเราทำแบบนี้ได้

      Max EF ก่อนหน้า 
      =MAX(XLOOKUP(TEXTSPLIT([@งานก่อนหน้า],","),[Activity],[EF]))

      ที่นี้จะเห็นว่างานที่จะเสร็จเป็นอันสุดท้ายคือ C ซึ่งจะไปจบวันที่ 31 ไอ้เส้นทางที่จบที่ C นี่แหละ คือ Critical Path ล่ะ

      วิธีคำนวณ Critical Path Method ในงานบริหารโครงการ ด้วย Excel (ปรับปรุงใหม่) 111

      เดี๋ยวต่อไปเราจะคำนวณ LF กับ LS นะครับ โดยจะคำนวณ LF ก่อน เพราะเรารู้แล้วว่าต้องจบไม่เกิน 31 นะ

      ปรับตารางให้ทำงานง่ายขึ้น

      เพื่อให้ง่ายขึ้น จากนั้นผมจะเพิ่มคอลัมน์อีกอัน ชื่อว่า “งานต่อหลัง” เพื่อคำนวณว่า งานนั้นมีอะไรต่อหลังจากนั้นนั้นๆ บ้าง?

      หลักการคือ เราหางานที่จะตามหลังจากงานบรรทัดนั้นๆ ด้วย FILTER + FIND แล้วค่อยเอาผลลัพธ์ที่ได้มารวมกันด้วย TEXTJOIN

      งานต่อหลัง
      =TEXTJOIN(",",TRUE,FILTER([Activity],ISNUMBER(FIND([@Activity],[งานก่อนหน้า])),""))
      วิธีคำนวณ Critical Path Method ในงานบริหารโครงการ ด้วย Excel (ปรับปรุงใหม่) 112

      คำนวณ LF และ LS

      สำหรับ LF นั้น = Late Start ของ Activity ถัดไปอันแรก -1 แต่ถ้าเป็น Activity สุดท้ายแล้ว (ไม่มีตัวต่อ ก็จะเท่ากับค่า MAX ของ EF)

      ดังนั้นเราจะเขียนสูตรได้ว่า ถ้าตัวตามหลังไม่มี ก็ให้ LF เป็น MAX EF เลย

      LF
      =IF([@งานต่อหลัง]="",MAX([EF]),[@[Min LS ถัดไป]] -1)

      จากนั้นเราคำนวณ LS (Late Start) ก่อน

      LS
      =[@LF]-[@Duration]+1

      คราวนี้เราจะกลับมาคำนวณ LF ที่ค้างไว้ โดย Min LS ถัดไป ก็คือต้อง Lookup LS ของงานต่อหลังมา แล้วหาค่า MIN

      Min LS ถัดไป
      =MIN(XLOOKUP(TEXTSPLIT([@งานต่อหลัง],","),[Activity],[LS]))

      แล้วเราก็จะได้ผลลัพธ์ครบทุกช่องตามต้องการแล้ว

      วิธีคำนวณ Critical Path Method ในงานบริหารโครงการ ด้วย Excel (ปรับปรุงใหม่) 113

      จัดเรียงหน้าตาและทำ Gantt Chart

      ถ้าสูตรทุกอย่าง work แล้ว เราอาจจะรวบสูตร

      เอา Max EF ก่อนหน้า ไปรวมกับ ES

      ES
      = IF([@งานก่อนหน้า]="",0,MAX(XLOOKUP(TEXTSPLIT([@งานก่อนหน้า],","),[Activity],[EF])))+1

      เอา Min LS ถัดไป รวมกับ LF

      LF
      =IF([@งานต่อหลัง]="",MAX([EF]),MIN(XLOOKUP(TEXTSPLIT([@งานต่อหลัง],","),[Activity],[LS])) -1)

      จากนั้นจัดเรียงคอลัมน์ใหม่ให้เหมาะสม เช่น ให้ LS ขึ้นก่อน LF แล้วเว้นไป 1 คอลัมน์ แล้วสร้างคอลัมน์ใหม่เป็น 1-32 (ให้เลยวันสุดท้าย)

      ที่เว้น 1 คอลัมน์ จะได้ไม่ต้องทำเป็น Table

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

      วิธีคำนวณ Critical Path Method ในงานบริหารโครงการ ด้วย Excel (ปรับปรุงใหม่) 114

      ต่อไป ผมจะใส่ Conditional Format 2 อัน สำหรับในช่อง ES-EF กับ LS-LF

      สำหรับ ES-EF เราจะทำอันนึงเป็นสีน้ำเงินแบบมี Pattern แนวตั้ง (จะได้มองทะลุด้านหลังได้) ซึ่งเขียน Conditional Format แบบ Custom ดังนี้ (เลือกพื้นที่เริ่มจาก J3)

      Conditional Format ES-EF สีน้ำเงิน
      =AND(J$2>=$D3,J$2<=$E3)

      สำหรับ LS-LF เราจะทำเป็นสีเหลืองแบบทึบ ซึ่งเขียน Conditional Format แบบ Custom ดังนี้ (เลือกพื้นที่เริ่มจาก J3)

      Conditional Format LS-LF สีเหลือง
      =AND(J$2>=$G3,J$2<=$H3)

      ซึ่งเราจะเรียงเอาสีน้ำเงินขึ้นก่อน ไม่งั้นเดี๋ยวจะมองไม่เห็น

      วิธีคำนวณ Critical Path Method ในงานบริหารโครงการ ด้วย Excel (ปรับปรุงใหม่) 115

      แค่นี้เราจะเห็นได้ชัดเลยว่าสามารถเริ่มงานอะไรได้ตั้งแต่ตอนไหน เริ่มได้ช้าสุดตอนไหน

      และเราจะสังเกตได้ง่ายเลยว่าตรงไหนคือ Critical Path ซึ่งก็คืองานที่สองสีซ้อนกัน 100% ทั้งงานนั่นเอง (ไม่มีเวลาให้ Late ได้เลย)

      วิธีคำนวณ Critical Path Method ในงานบริหารโครงการ ด้วย Excel (ปรับปรุงใหม่) 116

      ซึ่งทุกอย่างจะเปลี่ยนแบบอัตโนมัติทั้งหมดด้วย!

      ลองเปลี่ยน Dependency

      ลองแก้โจทย์ว่างาน G ต้องทำงาน B ให้เสร็จก่อนดู

      วิธีคำนวณ Critical Path Method ในงานบริหารโครงการ ด้วย Excel (ปรับปรุงใหม่) 117

      จะเห็นว่าตัวเลขทุกอย่างเปลี่ยนตามหมดเลย

      ซึ่งถ้าลอง Sort ตาม LS อาจจะดูง่ายขึ้นได้ดังนี้

      วิธีคำนวณ Critical Path Method ในงานบริหารโครงการ ด้วย Excel (ปรับปรุงใหม่) 118

      สรุป

      เราสามารถใช้ Excel คำนวณเรื่อง Critical Path ได้ แต่ก็ต้องใช้ทั้งความเข้าใจหลักการของ Project Management เอง และความเข้าใจเรื่องของการใช้สูตรต่างๆ ด้วย

    • อัปเดทโครงการ ทำบุญเรียน Excel

      อัปเดทโครงการ ทำบุญเรียน Excel

      จากที่ผมได้ Post ใน Facebook เพจ เชิญชวนเพื่อนๆ เรียน Excel แบบได้บุญ โดยการบริจาคสร้างสะพานที่วัดป่าบุญนาค ที่ อ.เชียงดาว จ.เชียงใหม่…

      โดยผมได้เปิดสอน Excel Power Query + Power Pivot ฉบับรวบรัด 2 ชั่วโมง Live ผ่าน Zoom แบบฟรีๆ ไปในวันที่ 23 เมษา 2568 เวลา 20:00-22:00 โดยที่ผู้เรียนขอแค่มีพื้นฐานการใช้ PivotTable ปกติเป็นก็เรียนรู้เรื่องครับ ซึ่งผมจะขอส่ง invite ให้เฉพาะคนร่วมทำบุญครั้งนี้นะครับ (ร่วมกี่บาทก็ได้) ❤️

      ปกติผมเองปกติจะไปปฏิบัติธรรมที่วัดป่าบุญนาค ที่ อ.เชียงดาว จ.เชียงใหม่ เป็นประจำทุกปี (อย่างน้อยปีละครั้ง) เพราะว่าชอบที่นั่นมาก การปฏิบัติธรรมไม่เคร่งเครียดจนเกินไป และได้มีโอกาสอยู่กับตัวเอง เพราะสัญญาณมือถือแทบไม่มี (ไม่ต้องยึดมือถือเลย 🤣)

      .

      ทีนี้ตอนน้ำท่วมเหนือครั้งก่อน มันพัดต้นไม้ใหญ่มาชนสะพานในวัดซะเกือบพัง ตอนนี้ก็ซ่อมชั่วคราวไปก่อนให้พอเดินได้ แต่ครูบาเตรียมจะซ่อมสะพานที่ชำรุด และจะลงเสาเข็มเหล็กใหม่ เพื่อให้แข็งแรงขึ้นในช่วงปลายเดือน เม.ย. 68 นี้…

      สำหรับผู้ที่สนใจ

      ใครสนใจร่วมเรียน Excel + ทำบุญสร้างสะพาน สามารถโอนไปที่วัดโดยตรง ได้ที่… (กี่บาทก็ได้)

      ธนาคารออมสิน
      เลขที่บัญชี 055060377219
      ชื่อ เงินก่อสร้างวัดป่าบุญนาค

      หมายเหตุ : สามารถบริจาคได้เรื่อยๆ ครับ แต่ที่วัดจะเริ่มสร้างสะพานสิ้นเดือนเมษานี้ ส่วนที่ผมสอน Power Query + Power Pivot 2 ชม. คือ วันที่ 23 เมษานี้ ตอน 2 ทุ่ม ถ้าบริจาคช้ากว่านั้นจะไม่ได้เรียนสด แต่ผมส่งคลิปย้อนหลังให้ได้ครับ

      การส่งหลักฐาน

      ทีนี้ใครที่ร่วมทำบุญครั้งนี้ ให้ส่ง email มาที่ thepexcel@gmail.com ใส่ subject ว่า “ทำบุญเรียน Excel” แล้วแนว slip มาด้วยครับ เพื่อเป็นหลักฐานที่ชัดเจนยิ่งขึ้น

      แล้วผมจะส่ง mail invite Live ผ่าน Zoom การอบรม Excel Power Query + Power Pivot ฉบับรวบรัด 2 ชั่วโมง ไปให้ทาง Email ที่ส่ง Slip มาครับ ❤️

      ณ ตอนนี้มียอดบริจาคเท่านี้แล้วครับ

      ยอดบริจาคล่าสุด

      เทคนิคการดึงข้อมูล

      ผมใช้ n8n ดึงรูป Slip จาก Email แล้วส่งให้ AI อ่านตัวเลขในรูป slip แล้วเอามากรอกใน Google Sheets ให้ จากนั้นเอาไปทำ Dashboard ใน Power BI อีกทีครับ (Refresh เพื่อดึงสดจาก Google Sheets ได้)

      อัปเดทโครงการ ทำบุญเรียน Excel 122
    • IF vs IFS vs SWITCH vs LET ใครคิดเร็ว ใครคิดช้า? มาเรียนรู้วิธีทำให้สูตร Excel เร็วขึ้น

      IF vs IFS vs SWITCH vs LET ใครคิดเร็ว ใครคิดช้า? มาเรียนรู้วิธีทำให้สูตร Excel เร็วขึ้น

      บทความนี้จะพาคุณลึกเข้าไปใน “Performance” ของฟังก์ชันตรวจสอบเงื่อนไขใน Excel
      ตั้งแต่ IF() พื้นฐาน ไปจนถึง IFS(), SWITCH(), LET() และเทคนิคซ่อนสูตรด้วย LAMBDA() เพื่อเลื่อนการคำนวณ จับเวลาด้วย LET() + NOW() แล้วแสดงผลเป็นมิลลิวินาที (ms) ให้เห็นกันชัด ๆ


      🌟 1. ทำไมต้องสนใจ Performance ของสูตร?

      เมื่อสูตร Excel ซับซ้อนขึ้น หรือมีการคำนวณกับ dataset ขนาดใหญ่ ความเร็วในการคำนวณ (calculation speed) จะกลายเป็นปัจจัยสำคัญ

      • ถ้าเราซ้อน VLOOKUP/XLOOKUP/MAKEARRAY/FILTER หลายครั้งในเงื่อนไขที่ไม่จำเป็น → Excel จะ “คิด” ทุกเงื่อนไขซ้ำนับร้อยครั้ง
      • สูตรที่ช้าไม่ใช่แค่รอผลนาน แต่ยังกินทรัพยากรเครื่อง และอาจทำให้ workbook ทั่วทั้งไฟล์อืดตาม

      บทความนี้อ้างอิงแนวคิดจาก

      The SWITCH and LET functions – Excel formula performance
      by Owen Price (Microsoft MVP)
      ซึ่งลงลึกเรื่องว่า IF() กับ CHOOSE() ให้การประมวลผลแบบ lazy evaluation (short‑circuit) แต่ IFS()/SWITCH()/LET() จะคำนวณ ทุก พารามิเตอร์โดยไม่เลือก


      🔧 2. วิธีจับเวลาใน Excel แบบง่าย ๆ ด้วย LET() + NOW()

      Excel ไม่มีฟังก์ชัน Timer เหมือนภาษาโปรแกรม แต่เราสามารถวัดเวลาคร่าว ๆ ได้ด้วยสูตรนี้ (เพราะใน LET จะไล่คำนวณจากบนลงล่าง แม้จะไม่ได้เรียกใช้ตัวแปรนั้นๆ เลย) :

      =LET(
        start,     NOW(),           // เก็บเวลาเริ่มต้น (หน่วยวัน)
        result,    <สูตรที่อยากวัด>,   // สูตรหนัก ๆ เช่น MAKEARRAY
        elapsed,   NOW() - start,   // ผลต่าง (หน่วยวัน)
        elapsedMs, elapsed * 24 * 60 * 60 * 1000,  // แปลงมิลลิวินาที
        elapsedMs                   // คืนค่าเวลา (ms)
      )

      หมายเหตุ:

      • ค่าที่ได้เป็นการประมาณ ไม่แม่นยำระดับ millisecond เป๊ะ ๆ แต่ใช้เปรียบเทียบระหว่างสูตรได้ดีและง่าย โดยไม่ต้องใช้ VBA จับเวลา

      🧪 3. ชุดทดสอบ: MAKEARRAY(2000,2000,PRODUCT)

      เพื่อให้เห็นภาพชัดที่สุด เราใช้สูตรสร้าง array ขนาดใหญ่ เบิ้มๆ ไปเลย:

      =MAKEARRAY(2000, 2000, PRODUCT)

      เป็นการคูณเลขแถว × เลขคอลัมน์ จำนวน 4 ล้านเซลล์ → Excel ต้องคำนวณนานหลายร้อยมิลลิวินาที

      จากนั้นเอาสูตรนี้ไปใส่ใน IF(), IFS(), SWITCH(), LET() และ LET+LAMBDA() แล้วดู ค่าเวลา (ms) จริงที่ได้

      IF vs IFS vs SWITCH vs LET ใครคิดเร็ว ใครคิดช้า? มาเรียนรู้วิธีทำให้สูตร Excel เร็วขึ้น 123
      สูตรพฤติกรรมคำนวณผลลัพธ์ (ms)สรุป
      MAKEARRAYคำนวณตรง ๆ~400ความเร็วที่ต้องใช้สูตร
      IF(TRUE,…)ถ้าเงื่อนไขเป็น TRUE → ไม่ประมวล MAKEARRAY~0✅ Lazy & เร็ว
      IFS(TRUE,…, FALSE, MAKEARRAY)ประมวลทุกเงื่อนไข แม้ไม่จำเป็น~420❌ ช้า
      SWITCH(1,1,…,2,MAKEARRAY)ประมวลทุกทางเลือก~420❌ ช้า
      LET(slow,MAKEARRAY, result)ประกาศตัวแปรก็เรียกคำนวณทันที แม้ไม่ได้ใช้~420❌ ช้า
      LET(thunk, LAMBDA(MAKEARRAY), result)เก็บสูตรไว้ใน LAMBDA ไม่ประมวลจนกว่าจะเรียก ()~0✅ Lazy & เร็ว

      🧠 4. เจาะลึกแต่ละฟังก์ชัน

      4.1 IF() – ขี้เกียจแบบฉลาด ทำให้คำนวณเร็ว 😂

      =IF(condition, value_if_true, value_if_false)
      =IF(TRUE, "เร็ว", MAKEARRAY(1000,1000,PRODUCT))
      • Short‑circuit (lazy): ถ้า condition = TRUE → Excel จะไม่ไปคำนวณ value_if_false เลย
      • เช่น ในทีนี้จะไม่คำนวณตรง MAKEARRAY(1000,1000,PRODUCT) เลย
      • เหมาะกับกรณีที่เงื่อนไขหลักมีโอกาสเป็นจริงสูงมาก

      Tips : พวก IFNA, IFERROR ก็คำนวณเร็วเช่นกันนะ

      4.2 IFS() – อ่านง่าย เขียนง่าย แต่ขยันเกิน ทำให้ช้า

      =IFS(cond1, val1, cond2, val2, …)
      =IFS(
          TRUE, "เร็ว",
          FALSE, MAKEARRAY(2000,2000,PRODUCT)
        )
      • ไม่ short‑circuit: Excel จะประมวล ทุกเงื่อนไข condN, valN แม้จะเจอเงื่อนไขแรกเป็นจริงแล้วก็ตาม (ทำเพื่อ! 😅)
      • เช่น ในที่นี้แม้ Condition แรกจะจริงไปแล้ว แต่ก็มาคิด Condition ที่สองต่อ ทำให้ยังคำนวณ MAKEARRAY(2000,2000,PRODUCT) ช้าๆ ออกมาอยู่ดี
      • ถ้าใช้ภายใน IFS() สูตรหนัก ๆ หลายตัว → ช้ากว่าซ้ำนับครั้งไม่ถ้วน

      4.3 SWITCH() – อ่านเปรียบเทียบค่าคงที่ได้ดี แต่ขยันเกินจนช้า

      =SWITCH(expression, val1, res1, val2, res2, …)=SWITCH(1,
          1, "เร็ว",
          2, MAKEARRAY(2000,2000,PRODUCT)
        )
      
      • ไม่ short‑circuit: Excel จะคำนวณทุกเงื่อนไข แม้ expression จะตรงกับ val1 ตั้งแต่แรกแล้ว
      • เช่น ในทีนี้ แม้ expression จะเป็น 1 ซึ่งตรงอันแรกแล้ว มันก็ยังคิด 2 ที่เป็น MAKEARRAY ช้าๆ อยู่ดี
      • อ่านง่ายกว่าซ้อน IF/IFS แต่หากมีสูตรหนักก็ไม่ work

      Tips: ใช้ CHOOSE จะ Short-circuit ทำให้เร็วได้ เช่น

      =CHOOSE(3, "A", "B", MAKEARRAY(2000,2000,PRODUCT))  // ถ้าเลือก 3 จะคำนวณ MAKEARRAY แค่ครั้งเดียว

      4.4 LET() – ลดการคำนวณตอนเรียกใช้ซ้ำแต่คำนวณทุกค่าที่ประกาศไว้

      =LET(name1, expr1, name2, expr2, …, result)
      =LET(slow, MAKEARRAY(2000,2000,PRODUCT),
        result, "เร็ว",
        result)
      • ทุก exprN ที่มีการประกาศตัวแปรไว้ จะถูกประมวลผลทันทีเมื่อสูตรรัน โดยไม่สนว่า nameN จะถูกนำไปใช้ใน result สุดท้ายหรือไม่
      • เช่น ในทีนี้ตัวแปร slow ไม่ได้ถูกเรียกใช้ในตอนจบเลย แต่ก็ยังคำนวณ MAKEARRAY ช้าๆ อยู่ดี
      • ใช้ลดการซ้ำของสูตร เช่น VLOOKUP ครั้งละหลายรอบได้ดี แต่ประกาศตัวแปรหนัก ๆ แล้วไม่ได้ใช้ → ก็ยังช้าเหมือนเดิม

      4.5 LET() + LAMBDA() – “Thunk” เลื่อนการคำนวณได้

      =LET(
        Thunk, LAMBDA(MAKEARRAY(2000,2000,PRODUCT)),
        result,    "เร็ว",
        result
      )
      • เมื่อประกาศตัวแปร ที่ใช้ LAMBDA ครอบไว้ → Excel จะไม่ประมวล MAKEARRAY ทันที
      • ถ้าต้องการคำนวณจริง ๆ ให้เรียก Thunk() โดยต้องเติมวงเล็บ () ไว้ข้างหลังด้วยนะ แบบนี้
      =LET(
        Thunk, LAMBDA(MAKEARRAY(2000,2000,PRODUCT)),
        result,    "เร็ว",    Thunk())

      🚀 5. ทริกปรับสูตรให้เร็วขึ้น

      1. ใช้ IF() แทน IFS() ถ้าเงื่อนไขแรกมีโอกาสเป็น TRUE สูง
      2. ห่อสูตรหนัก ๆ ใน LAMBDA() แล้วเรียกเมื่อจำเป็น
      3. ลดการคำนวณซ้ำ ด้วย LET() แต่แน่ใจว่าชื่อที่ประกาศจะถูกใช้จริง
      4. เลือก CHOOSE() แทน SWITCH() เมื่อค่าต้องเลือกเป็นลำดับ (1,2,3…) เพื่อได้ lazy evaluation

      ✨ 6. สรุปอีกทีให้เซฟเก็บ

      • IF(), IFNA(), IFERROR() = ✅ Lazy Evaluation ทำให้เร็ว : หยุดคำนวณเงื่อนไขหลังทันที
      • IFS() = ❌ Eager Evaluation ทำให้ช้า: คิดทุกเงื่อนไข
      • CHOOSE() = ✅ Lazy Evaluation ทำให้เร็ว : คิดเฉพาะทางเลือกที่เลือกจริงๆ
      • SWITCH() = Eager Evaluation ทำให้ช้า: คิดทุกทางเลือก
      • LET() = Eager Evaluation ทำให้ช้า: คิดทุกตัวแปร
      • LET+LAMBDA() = Lazy Evaluation ทำให้เร็ว: เลื่อนคำนวณจนกว่าจะเรียกใช้

      ใครกำลังเจอ Excel อืดเพราะสูตรซ้อนซับซ้อน ลองเอาแนวทางนี้ไปปรับใช้ดูครับ
      – บางทีแค่เปลี่ยนจาก IFS → IF หรือห่อสูตรใน LAMBDA ก็ช่วยลดเวลาไปได้ครึ่งหนึ่ง!

      ถ้าคิดว่าบทความนี้เป็นประโยชน์ อย่าลืมแชร์หน้านี้ให้เพื่อน ๆ เห็นทริกเทพเอ็กเซลกันเยอะ ๆ นะครับ 😉

    • 🔍 ยกระดับการค้นหาข้อความใน Excel ด้วย RegEx ⚡

      🔍 ยกระดับการค้นหาข้อความใน Excel ด้วย RegEx ⚡

      ถ้าคุณใช้ Excel มานาน คงคุ้นเคยกับ Wildcard อย่าง * หรือ ? กันดีใช่มั้ยครับ 😜 โดยปกติเราจะใช้ Wildcard ร่วมกับฟังก์ชันยอดฮิต เช่น SEARCH, SUMIFS, หรือ VLOOKUP เพื่อช่วยค้นหาหรือจับคู่ข้อความง่ายๆ

      ตัวอย่างการใช้ Wildcard:

      • *phone* → ค้นหาคำที่มีคำว่า “phone” อยู่ที่ตำแหน่งไหนก็ได้ เช่น smartphone, iphone16, phone call
      • ca? → ค้นหาคำที่ขึ้นต้นด้วย “ca” และตามด้วยตัวอักษรอีกหนึ่งตัว เช่น cat, car

      แต่ Wildcard มีข้อจำกัดมาก ถ้าคุณต้องการจัดการข้อความที่ซับซ้อนกว่านั้น เช่น ดึงอีเมลจากข้อความยาวๆ เช็คว่าข้อความมีตัวเลขหรือไม่ หรือแทนที่คำเฉพาะที่เข้าเงื่อนไข Wildcard จะเริ่มเอาไม่อยู่ทันที…

      มาทำความรู้จักกับ RegEx กัน

      RegEx (Regular Expression) คือ “ภาษาสำหรับกำหนดรูปแบบข้อความ” ที่ยืดหยุ่นและมีพลังสูงกว่า Wildcard หลายเท่าตัว สามารถทำงานที่ซับซ้อนได้ง่ายกว่า เช่น:

      • ตรวจสอบว่าข้อความมีเบอร์โทรศัพท์หรือรหัสพิเศษซ่อนอยู่หรือไม่
      • ดึงเฉพาะอีเมลออกมาจากข้อความที่ซับซ้อน
      • แทนที่ข้อความหรือสัญลักษณ์ตามเงื่อนไขเฉพาะเจาะจง

      🛠 พื้นฐานการเขียน RegEx แบบง่ายๆ

      เรามาเริ่มเรียนรู้การใช้งาน RegEx พื้นฐานกันก่อนเลยครับ:

      อักขระที่อยากได้

      • cat → หาคำนั้นๆ เลย เช่น cat
      • . → แทนตัวอักษรอะไรก็ได้ 1 ตัว เช่น ca. จะจับได้ cat, car, cab
      • \d → ตัวเลข (digit)
      • \w → ตัวอักษรหรือตัวเลข (word character)
      • \s → ช่องว่าง (space)

      character class

      • [abc] → a, b, หรือ c
      • [^abc] → ไม่ใช่ a, b, c
      • [a-z] → a ถึง z ตัวไหนก็ได้
      • [A-Z] → A ถึง Z ตัวไหนก็ได้
      • [0-9] → เลข 0 ถึง 9

      ตัวระบุจำนวน

      • + → มีตัวข้างหน้าซ้ำตั้งแต่ 1 ตัวขึ้นไป
      • * → มีตัวข้างหน้าซ้ำกี่ตัวก็ได้ (0 ตัวขึ้นไป)
      • {n} → ตัวข้างหน้าซ้ำจำนวน n ตัวเป๊ะๆ

      ตัวอย่างแบบง่ายๆ :

      • \d{4} → ตัวเลข 4 หลัก เช่น 2024, 1234
      • [A-Za-z]+ → คำที่มีตัวอักษรภาษาอังกฤษเท่านั้น

      ถ้าอยากเรียนรู้แบบละเอียดขึ้น อ่านที่บทความเก่าที่ผมเขียนถึง RegEx ได้ที่นี่

      🚀 3 ฟังก์ชัน RegEx ทรงพลังใน Excel 365

      Excel 365 มีฟังก์ชัน RegEx หลักๆ อยู่ 3 ตัว ที่ช่วยงานข้อความได้อย่างลงตัว:

      1. REGEXTEST → เช็คว่าข้อความตรงกับ Pattern หรือไม่ (ได้ TRUE/FALSE)
      2. REGEXEXTRACT → ดึงข้อความที่ตรงกับ Pattern ออกมา
      3. REGEXREPLACE → แทนที่ข้อความที่ตรงกับ Pattern ด้วยข้อความใหม่

      🌟 มาลองใช้งานจริงกัน!

      สมมติในเซลล์ A1 มีข้อความ:

      Order: P1234, Contact: test@email.com, Note: urgent!!
      • เช็คว่ามีคำว่า P ตามด้วยตัวเลข 4 หลักหรือไม่:
      =REGEXTEST(A1, "P\d{4}")
      

      ผลลัพธ์: TRUE

      • ดึงเฉพาะอีเมลออกมา:
      =REGEXEXTRACT(A1, "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}")
      

      ผลลัพธ์: test@email.com

      • แทนที่คำว่า urgent! หรือ urgent!! ด้วย ⚠️ด่วน:
      =REGEXREPLACE(A1, "urgent!?+", "⚠️ด่วน")
      

      ผลลัพธ์: Order: P1234, Contact: test@email.com, Note: ⚠️ด่วน

      🎯 วิธีการนำ RegEx ไปใช้งานจริง

      ตัวอย่างเพิ่มเติม:

      • ดึงเบอร์โทรศัพท์จากข้อความ:
      =REGEXEXTRACT(A1, "\d{3}-\d{3}-\d{4}")
      

      (เช่น 089-123-4567)

      • ตรวจสอบว่าข้อความมีตัวเลขหรือไม่:
      =REGEXTEST(A1, "\d")
      
      • ลบตัวเลขทั้งหมดออกจากข้อความ:
      =REGEXREPLACE(A1, "\d", "")
      

      🤖 ให้ AI ช่วยคุณสร้าง Pattern ได้

      ถ้ารู้สึก RegEx มันดูซับซ้อน อย่าเพิ่งตกใจไป! เพราะยุคนี้คุณสามารถใช้ AI อย่าง ChatGPT หรือ Copilot ช่วยสร้าง Pattern ได้ง่ายๆ แค่บอก AI ว่าต้องการ Pattern แบบไหน มันก็จัดให้แบบรวดเร็วทันใจครับ 😉 เช่น

      ช่วยเขียน regex ที่ดัก email address ให้หน่อย
      🔍 ยกระดับการค้นหาข้อความใน Excel ด้วย RegEx ⚡ 124

      อธิบายแต่ละส่วน:

      ส่วนความหมาย
      [a-zA-Z0-9._%+-]+username ด้านหน้าของ @ เช่น john.doe
      @สัญลักษณ์ @
      [a-zA-Z0-9.-]+domain name เช่น gmail หรือ thepexcel
      \.จุดก่อน top-level domain เช่น .com
      [a-zA-Z]{2,}top-level domain เช่น com, co.th, edu

      📌 สรุป

      RegEx เป็นสุดยอดอาวุธลับที่ทำให้คุณทำงานกับข้อความได้ง่ายขึ้นมหาศาล Excel 365 พร้อมให้คุณใช้งานฟังก์ชัน RegEx แล้ว อย่ารอช้า ไปลองกันเลย แล้วจะรู้ว่าพลังของมันสุดยอดขนาดไหน! 😎

      ปล. ฟังก์ชันนี้สามารถใช้คู่กับฟังก์ชันยอดฮิตอย่าง XLOOKUP เพื่อเพิ่มประสิทธิภาพการค้นหาได้ด้วยนะครับ 😉

    • แผน Level Up ทักษะ Excel

      แผน Level Up ทักษะ Excel

      ✨ โลกของ Excel ก็เหมือนเกม RPG… ที่ทุกคนเริ่มจากเลเวล 1 แล้วค่อยๆ เก่งขึ้นได้จริง!

      วันนี้ผมมีแผน Level Up ทักษะ Excel สนุกๆ มาฝากครับ! ลองเช็กดูหน่อยว่าตอนนี้คุณอยู่เลเวลไหนกันแล้ว?
      มาดูกันครับว่า คุณอยู่จุดไหนของเส้นทางนี้แล้ว? แล้วต่อจากนี้ จะไปต่อทางไหนดี?

      เริ่มเดินทางสู่การฝึกฝน Excel

      🚀 LV.1 – Excel Novice 👶

      จุดเริ่มต้นของทุกคน…

      • เปิด Excel ได้ กรอกข้อมูลได้บ้าง
      • ทำ SUM ง่ายๆ ได้ แต่ยังไม่รู้จักฟังก์ชันอื่นๆ
      • ยังไม่เข้าใจว่าใน Excel มีข้อมูลประเภทไหน ใช้เครื่องมือไหนทำอะไร?

      อย่าเพิ่งท้อ เพราะทุกคนเริ่มจากจุดนี้เหมือนกัน!
      แค่คุณ “อยากเก่งขึ้น” นั่นแหละคือก้าวแรกที่สำคัญที่สุดแล้วครับ 💪

      🚀 LV.10 – Basic Tools & Formula ⚙️

      เริ่มจับทางได้ เริ่มคล่องมือมากขึ้น

      • ใช้ฟังก์ชันพื้นฐานอย่าง COUNT, MAX, AVERAGE ได้
      • ใช้เมนูพื้นฐานได้ดีขึ้น เช่น Sort & Filter, Find & Replace, Remove Duplicates
      • ใช้ Flash Fill (Ctrl+E) ได้แบบเทพๆ

      พื้นฐานเริ่มแน่น พร้อมออกผจญภัยแล้ว!
      จุดนี้แหละที่คุณจะเริ่ม “เลือกสาย” ได้ว่า อยากไปต่อทางไหนดี?


      🧭 เส้นทางต่อไป สายไหนที่ใช่สำหรับคุณ?

      หลังจาก Level 10 เป็นต้นไป คุณสามารถเลือกพัฒนาตัวเองได้ 2 สายหลัก (หรือจะเก่งทั้งสองสายก็ไม่ผิดนะ 😎)


      ✨ สายเขียนสูตร (Formula Path)

      เหมาะกับคนที่ชอบ “ผลลัพธ์เปลี่ยนทันที”
      เมื่อข้อมูลต้นทางเปลี่ยน → สูตรจะคำนวณผลใหม่ให้ทันที

      🗡️ LV.20 – Formula Knight ⚔️

      เริ่มเป็นอัศวินแห่งสูตร!

      • ใช้ SUMIFS, COUNTIFS, IF, IFERROR ได้สบายๆ
      • สูตรวันที่/เวลา: DATE, EDATE, EOMONTH, YEAR, MONTH
      • สูตรข้อความ: TRIM, LEFT, RIGHT, TEXTBEFORE, TEXTAFTER, TEXTSPLIT, TEXTJOIN
      • ดึงข้อมูลจากตารางอ้างอิงด้วย XLOOKUP, INDEX, MATCH, VLOOKUP

      ตอนนี้คุณพร้อมรับมือกับงานที่หลากหลายมากขึ้นแล้ว!

      🧙‍♀️ LV.40 – Dynamic Array Master 🌀

      เข้าสู่ขั้นเทพของโลกสูตร!

      • สูตร Dynamic Array ที่ผลลัพธ์กระจายเป็นหลายบรรทัด เช่น SEQUENCE, UNIQUE, FILTER, SORT, CHOOSECOLS, VSTACK, HSTACK
      • ใช้ LET เพื่อประกาศตัวแปรให้สูตรอ่านง่ายขึ้น
      • ใช้ LAMBDA, BYROW, MAP, SCAN, REDUCE เพื่อเขียนสูตรซับซ้อนแบบยืดหยุ่นสุดๆ
      • ฟังก์ชันขั้นเทพ: GROUPBY, PIVOTBY, REGEXEXTRACT, TEXTSPLIT, ฯลฯ

      สูตรเดียวเปลี่ยนทั้งรายงานได้เลย! 🔥
      เหมือนมีเวทมนตร์อยู่ในมือเลยล่ะครับ


      ⚙️ สายเครื่องมือ (Tool Path)

      เหมาะกับคนที่ชอบ “มองภาพรวม” ชอบลากวาง คลิก แล้วเห็นภาพเลย
      ใช้ข้อมูลเยอะๆ แล้วต้องการสรุปอย่างเร็วแบบมีระบบ

      🛡️ LV.20 – Pivot Paladin 🏅

      เชี่ยวชาญการใช้ Pivot Table

      • สรุปข้อมูลขนาดใหญ่แบบคลิกๆ ลากๆ
      • สร้างตารางแบบมี Group, Filter, Drill down
      • รู้จักฟีเจอร์ต่างๆ ของ Pivot เช่น Slicer, Timeline

      รายงานแบบมืออาชีพในไม่กี่คลิก สายนี้เหมาะกับงานธุรกิจสุดๆ!

      🚩 LV.40 – Power Query & Power Pivot Champion 🏆

      เข้าสู่โลกแห่งการจัดการข้อมูลจริงจัง

      • ใช้ Power Query รวมข้อมูลจากหลายแหล่ง (หลายไฟล์ หลายชีต)
      • แปลงข้อมูล, ล้างข้อมูล, สร้าง Step อัตโนมัติ แล้วแค่ Refresh ก็ได้ข้อมูลใหม่
      • ใช้ M Code ปรับแต่งขั้นสูง
      • ใช้ Power Pivot เพื่อผูกความสัมพันธ์หลายตาราง + เขียนสูตร DAX เพื่อสร้างรายงานขั้นเทพ

      สายนี้คือตัวจริงของงานวิเคราะห์และการทำ Dashboard ครับ
      ยิ่งถ้าต่อยอดไป Power BI ได้ด้วย จะสุดยอดมากๆ!

      🔥 แล้วมีสายอื่นอีกไหม?

      แน่นอน! ถ้าคุณอยากทำงานอัตโนมัติ หรือทำงานแบบโปรแกรมเมอร์

      • สายเขียนโปรแกรม:
        เรียนรู้ VBA, Office Script, หรือทำ Automation ผ่าน Power Automate, n8n
        สั่งให้ Excel ทำงานเองได้แบบไม่ต้องคลิกเอง!
      • Python in Excel:
        สำหรับสาย Data Science
        ใช้ Library อย่าง Numpy, Pandas, Scikit-learn, Matplotlib ใน Excel ได้เลย!
        วิเคราะห์ข้อมูลขั้นสูง + ทำกราฟอลังการ 💥

      🧠 สรุป: สายไหนก็เทพได้ แค่ “กล้าเริ่มต้น”

      💬 Excel ไม่ใช่เรื่องยาก ถ้าเริ่มจากสิ่งเล็กๆ ที่ทำได้ตอนนี้
      แล้วค่อยๆ อัปเลเวลไปเรื่อยๆ
      ไม่ว่าคุณจะเป็นสายสูตร หรือสายเครื่องมือ ก็สร้างผลงานเทพได้ทั้งนั้น!

      📍 ถ้าคุณอยากเริ่มต้นแบบสนุกๆ ลองเข้าไปดูบทความและคลิปต่างๆ ได้ที่นี่ ThepExcel.com หรือจะเริ่มจากโพสต์ดีๆ ในเพจ “เทพเอ็กเซล” ก็ได้เลยครับ 😄

    • วิธีทำรายงาน Excel อัตโนมัติ 100% แบบ Step-by-Step

      วิธีทำรายงาน Excel อัตโนมัติ 100% แบบ Step-by-Step

      คุณเคยเจอปัญหาแบบนี้ไหม?

      • ทุกวันต้องดาวน์โหลดไฟล์แนบจากอีเมล หรือดึงข้อมูลจากระบบที่ทำงาน แล้วก็อปลง Excel ด้วยตัวเอง
      • ไฟล์ที่ได้มาก็มักจะไม่สะอาด ต้องมานั่งลบแถวหัวตารางที่ไม่จำเป็น แก้ไขฟอร์แมตวันที่ รวมข้อมูลจากหลายไฟล์ กว่าจะได้ข้อมูลที่พร้อมใช้ก็เสียเวลาไปเพียบ…
      • ถ้าต้องมีการคำนวณเพิ่มเติม เช่น คำนวณยอดขายสะสม เปรียบเทียบยอดขายปีที่แล้ว หรือคำนวณเปอร์เซ็นต์เติบโต เวลาจะเปลี่ยนหน้าตารายงาน ก็ต้องมานั่งแก้สูตรทำใหม่ตลอด
      • เมื่อข้อมูลพร้อมแล้ว ยังต้องกด Refresh Pivot Table อัปเดต Dashboard เองทุกครั้ง
      • พอทำรายงานเสร็จก็แทบตายแล้ว ยังไม่มีเวลาวิเคราะห์ผลจากมันเลย เดี๋ยวก็ต้องส่งไฟล์แนบไปให้หัวหน้า หรือแจ้งทีมงานทางอีเมลหรือ Line ด้วยตัวเอง

      งานพวกนี้กินเวลาไปเยอะมาก โดยเฉพาะถ้าคุณต้องทำทุกวันหรือทุกสัปดาห์ จะดีกว่าไหมถ้า การทำรายงานสามารถเสร็จเร็วกว่านี้ได้? คุณจะได้มีเวลาเอาไปทำสิ่งที่มีคุณค่ามากขึ้น เช่น วิเคราะห์ผลจากรายงานเพื่อปรับปรุงธุรกิจให้ดียิ่งขึ้น

      👉 บทความนี้จะพาคุณไปเรียนรู้ วิธีทำให้ทุกขั้นตอนในกระบวนการทำรายงาน Excel เป็นระบบอัตโนมัติ 100% ตั้งแต่การดึงข้อมูล การ Clean ข้อมูล การคำนวณขั้นสูง การ Refresh ข้อมูล ไปจนถึงการแจ้งเตือนและส่งรายงานให้ทีมงาน โดยใช้ Power Query, Power Pivot, Pivot Table, VBA, Task Scheduler และเครื่องมือ Automation อื่นๆ

      ถ้าคุณอยากลดเวลาทำงานจาก 1 ชั่วโมงเหลือไม่กี่นาที และทำให้รายงานอัปเดตได้เองแบบไม่มี Human Error—มาลองทำไปพร้อมกัน!


      1️⃣ ดึงไฟล์รายงานใหม่อัตโนมัติ

      ก่อนที่เราจะทำรายงานได้ สิ่งที่ขาดไม่ได้เลยก็คือ “ข้อมูล” ซึ่งโดยปกติแล้ว ข้อมูลที่ใช้ทำรายงานมักจะถูกส่งมาในรูปแบบต่างๆ เช่น ไฟล์ Excel, CSV, Google Sheets หรือดึงจาก Database โดยตรง ซึ่งถ้าเราต้องมากดโหลดไฟล์เองทุกครั้งก็เสียเวลามาก 🕒

      ดังนั้น การตั้งระบบให้ดึงไฟล์รายงานใหม่แบบ อัตโนมัติ จะช่วยให้เราประหยัดเวลา และลดข้อผิดพลาดจากการทำงานแบบ Manual ได้เยอะ


      Option A: Power Query ดึงข้อมูลได้โดยตรง

      ใช้ในกรณีที่แหล่งข้อมูลของเรา สามารถเข้าถึงได้โดยตรง ผ่าน Power Query เช่น

      • ไฟล์ Excel หรือ CSV ในโฟลเดอร์ (ไม่ว่าจะอยู่ในเครื่องเรา หรือ บนพวก OneDrive/ SharePoint)
      • Google Sheets (ผ่าน Web)
      • ฐานข้อมูล SQL Server, MySQL, หรืออื่นๆ

      วิธีการใช้งาน Power Query

      1. เปิด Excel → เข้า Power Query (Get & Transform Data)
      2. เลือก Get Data → เลือกแหล่งข้อมูลที่ต้องการ
      3. หากเป็นไฟล์หลายไฟล์ สามารถใช้ Get data From Folder หรือ SharePoint Folder เพื่อรวมไฟล์อัตโนมัติได้ (แต่ถ้าเอาจากแหล่งออนไลน์ เช่น SharePoint มี Trick นิดนึง ดูได้ที่นี่)

      📌 จุดเด่นของวิธีนี้

      • ง่ายและสะดวก ใช้ Power Query ดึงข้อมูลได้โดยตรง
      • อัปเดตอัตโนมัติ แค่ Refresh ก็ได้ข้อมูลล่าสุด

      Option B: Power Query ดึงข้อมูลโดยตรงไม่ได้ ทำยังไงดี?

      กรณีที่ Power Query ไม่สามารถเข้าถึงแหล่งข้อมูลได้โดยตรง เช่น

      • ไฟล์แนบที่ถูกส่งมาทางอีเมล หรือ Line
      • ไฟล์ที่อยู่บน Google Drive ที่ Power Query ดึงลำบาก ต้องไปกดโหลดเอง

      👉 วิธีแก้ปัญหาคือ ใช้ Automation Tool เช่น

      • Power Automate (ของ Microsoft)
      • Make.com
      • n8n (สามารถโหลดมาใช้ฟรีได้)

      ตัวอย่าง

      • ตั้งค่าให้ดึงไฟล์แนบจาก อีเมล หรือ Line แบบอัตโนมัติ
      • เก็บไว้ในโฟลเดอร์ที่กำหนด
      • เมื่อไฟล์ถูกดาวน์โหลดมาเก็บในที่ที่กำหนด → จากนั้น Power Query ก็สามารถใช้ Get Data ดึงไฟล์ หรือทั้ง Folder นั้นเข้า Excel ได้เลย 🎉

      เมื่อเราสามารถดึงไฟล์ใหม่อัตโนมัติได้แล้ว งานทำรายงานของเราจะ เร็วขึ้น และ สะดวกขึ้น มาก 🚀


      2️⃣ ใช้ Power Query Clean ข้อมูล

      หลังจากที่เราดึงข้อมูลมาได้แล้ว ปัญหาที่มักจะเจอบ่อยคือ ข้อมูลไม่สะอาด เช่น คอลัมน์ชื่อไม่ตรงกัน, มีแถวหัวตารางที่เกินมา, ฟอร์แมตวันที่ / ตัวเลขผิด, ข้อมูลมีค่า Error หรือค่าซ้ำซ้อน…และอีกมากมาย ซึ่งรมถึงโครงสร้างตารางที่มาผิดรูปแบบโดยสิ้นเชิง

      Power Query เป็นเครื่องมือที่ช่วยให้เราทำ Data Cleaning ได้ง่ายและอัตโนมัติ ด้วยการกำหนดขั้นตอนการทำงานไว้ใน Applied Steps (ซึ่งจริงๆ คือ M Code) ซึ่งสามารถสั่งทำซ้ำได้ง่ายๆ ด้วยการ Refresh

      การ Transform data ที่หลากหลาย

      • จัดโครงสร้างข้อมูลให้ถูกต้อง
        • Pivot, Unpivot, Split, Merge Columns และอื่นๆ อีกมากมาย
      • จัดรูปแบบข้อมูลให้เป็นมาตรฐาน
        • เราสามารถใช้ M Code แก้ชื่อคอลัมน์แบบอัตโนมัติด้วย Table.TransformColumnNames ก็ได้นะ
      • ลบค่าที่ไม่ต้องการ (Error หรือค่าซ้ำซ้อน)
        • Remove Rows/Columns, Choose Columns, Filter
        • Remove Errors, Remove Duplicates
      • เพิ่มคอลัมน์ให้ครบถ้วน
        • Add Custom Column, Column From Example, Extract Data
      • รวมข้อมูลจากหลายตาราง (ถ้าจำเป็น)
        • 📌 Append Queries → รวมข้อมูลโดยเอามาต่อตูดกันในแนวตั้ง (ชื่อคอลัมน์เหมือนกัน) ใช้เมื่อเราต้องการรวมข้อมูลจากหลายไฟล์ / หลายชีต
        • 📌 Merge Queries → รวมข้อมูลที่มีคีย์ร่วมกันคล้ายๆ VLOOKUP (เลือกคอลัมเชื่อมเอง) ใช้เมื่อเราต้องการรวมข้อมูลจาก 2 ตารางที่มี รหัสสินค้า หรือ รหัสลูกค้า เหมือนกัน
      • เทคนิคเมื่อรวมหลายไฟล์เข้าด้วยกัน
        • หลังจาก Get Data From Folder แล้วกด Combine แล้วอาจต้องไปแก้ใน Transform Sample File ด้วย (เป้นตัวกำหนดว่าจะทำอะไรกับแต่ละไฟล์ก่อนจะจับรวมกัน)

      ซึ่งรายละเอียดของการสั่งงาน Power Query ผมมีสอนอยู่เยอะแล้ว ยังไงลองดูใน 2 คลิปนี้ก่อนก็ได้ครับ


      สุดท้าย: โหลดข้อมูลกลับไปใช้ใน Excel หรือ Data Model

      • ถ้าเป็นรายงานทั่วไป
        • กด Close & Load To… → เลือก Table/PivotTable ใน Excel
      • ถ้าข้อมูลมีโครงสร้างซับซ้อน
        • เลือก Only Create Connection แต่ให้ติ๊ก Add this Data to Data Model ต่อ

      3️⃣ ใช้ Power Pivot คำนวณข้อมูลขั้นสูง ด้วย DAX (ถ้างานซับซ้อน)

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

      🔴 1. ข้อมูลมีหลายตาราง และแต่ละตารางมีความละเอียด (Granularity) ไม่เท่ากัน

      เวลาทำ รายงานวิเคราะห์ข้อมูล เรามักต้องรวมข้อมูลจากหลายแหล่ง เช่น

      • ข้อมูล ยอดขายจริง (Actual Sales)
      • ข้อมูล เป้าหมายยอดขาย (Sales Target)
      • ข้อมูล ลูกค้า, สินค้า, ภูมิภาค

      หลายคนอาจคิดว่า “ก็ใช้ VLOOKUP รวมข้อมูลทั้งหมดเข้าไว้ในตารางเดียวสิ!” แต่ปัญหาคือ ถ้าข้อมูลแต่ละตารางมีความละเอียด (Granularity) ไม่เท่ากัน เช่น

      • Actual Sales → มีข้อมูล รายวัน / รายสินค้า
      • Target Sales → มีข้อมูล รายเดือน / รายภูมิภาค

      ถ้าใช้ VLOOKUP จะเกิดปัญหา เช่น

      • จะเอาข้อมูล Target รายเดือนมาวางใน Actual รายวันยังไง? 🤔
      • จะเฉลี่ยเป้าหมายเป็นรายวัน หรือเอาไปจับคู่ยังไง?

      การใช้ Data Model ช่วยแก้ปัญหานี้ได้ เพราะมันสามารถสร้าง Relationship และใช้ DAX คำนวณข้อมูลข้ามตารางได้


      🔴 2. ไม่ต้องใช้ VLOOKUP ซ้อนกันหลายชั้น (ลดความช้า & ไฟล์ไม่พัง!)

      • ถ้ามีข้อมูล 5 ตาราง แล้วต้องใช้ VLOOKUP ซ้อนกัน ไฟล์จะ ช้า และอาจมีปัญหาได้
      • Power Pivot สามารถ สร้างความสัมพันธ์ระหว่างตาราง โดยไม่ต้องใช้ VLOOKUP

      ซึ่งมีข้อดีหลายอย่าง เช่น

      • ดึงข้อมูลจากหลายตารางมารวมกันได้อัตโนมัติ
      • ลดขนาดไฟล์ เพราะไม่ต้อง Copy ข้อมูลซ้ำไปมา
      • คำนวณเร็วขึ้น เพราะใช้ Data Model แทนการคำนวณแบบ Cell-by-Cell

      🔴 3. การคำนวณขั้นสูง (เช่น CALCULATE, Running Total, YTD, MTD) ทำไม่ได้ใน Pivot Table ธรรมดา
      ถ้าเราใช้ Pivot Table ปกติ จะเจอปัญหา แม้ว่ามันจะมีฟีเจอร์ชื่อว่า Calculated Field มาให้เราสร้าง Field คำนวณขึ้นมาเองได้ แต่ว่าการคำนวณสรุปที่ใช้ได้ถูกจำกัดแค่การ SUM ซึ่งต่างจากเวลาเราใช้ Power Pivot ที่สามารถเขียน Measure ที่สามารถใช้สูตร DAX อะไรก็ได้

      นอกจากนี้ใน PivotTable ปกติ แม้จะมี Show Value as มาช่วยคำนวณที่คล้ายกับว่าจะทำ Running Total ได้ แต่จริงๆ แล้วมีข้อจำกัดเยอะ เพราะเครื่องมือไม่ได้เข้าใจความเป็น ปี ไตรมาศ เดือน จริงๆ ซึ่งต่างจาก Time Intelligence ของ DAX ซึ่งสามารถคำนวณเกี่ยวกับเวลาได้อย่างถูกต้องจริงๆ


      ตัวอย่างการใช้สูตร DAX ใน Measure ของ Power Pivot

      Total Sales = SUM(Sales[Amount])
      Target Sales = SUM(SalesTarget[TargetAmount])
      Sales vs Target % = [Total Sales] / [Target Sales]

      เราสามารถใช้ CALCULATE เปลี่ยน Filter Context ในรายงานได้อย่างอิสระ

      📌 คำนวณยอดขายเฉพาะสินค้าหมวดหมู่ “Electronics”

      Sales Electronics = 
      CALCULATE(
          [Total Sales], 
          Products[Category] = "Electronics"
      )

      📌 นับจำนวนลูกค้าที่ซื้อสินค้ามากกว่า 3 ชิ้น

      Customers Buying More Than 3 Items = 
      CALCULATE(
          DISTINCTCOUNT(Sales[CustomerID]), 
          Sales[Quantity] > 3
      )

      📌 คำนวณยอดขาย Year-to-Date (YTD Sales)

      YTD Sales = 
      CALCULATE(
          [Total Sales], 
          DATESYTD(Sales[Date])
      )

      📌 Running Total (ยอดขายสะสม)

      Running Total = 
      CALCULATE(
          [Total Sales],
          FILTER(
              ALL(Sales[Date]),
              Sales[Date] <= MAX(Sales[Date])
          )
      )

      📌 เปรียบเทียบยอดขายกับปีที่แล้ว (YoY Growth)

      เวลาเขียน DAX เราสามารถประกาศตัวแปรด้วย VAR ได้ด้วย ซึ่งดีมากๆ เลย

      YoY Growth = 
      VAR CurrentYearSales = [Total Sales]  
      VAR PreviousYearSales = CALCULATE([Total Sales], SAMEPERIODLASTYEAR(Sales[Date]))  
      RETURN  
          (CurrentYearSales - PreviousYearSales) / PreviousYearSales

      DAX ช่วยให้เราสามารถคำนวณข้อมูลซับซ้อนแบบ Dynamic ได้ ไม่ต้อง Copy Formula ทับไปมาเหมือน Excel ปกติ

      4️⃣ สร้าง Pivot Table / Dashboard ให้พร้อมใช้

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

      ✅ ใช้ Pivot Table สรุปข้อมูล / ปรับ Show Value as ได้ตามความเหมาะสม
      ✅ ใช้ Pivot Chart แสดงผลให้ดูเข้าใจง่าย
      ✅ อาจใช้ Conditional Formatting เพื่อให้ตัวเลขสำคัญดูโดดเด่นขึ้น
      ✅ เพิ่ม Slicers / Timeline ให้สามารถเลือก Filter บน Table/PivotTable/Pivot Chart ได้แบบ Interactive เลย (แต่ก็สู้ Power BI ไม่ได้นะ)


      5️⃣ตั้งให้ Excel Refresh ข้อมูล + ปิดอัตโนมัติ 🔄

      💡 ถ้าคุณต้อง Refresh Power Query ทุกวัน โดยไม่ต้องกดเอง และ ให้ Excel ปิดเองอัตโนมัติ นี่คือวิธีทำให้ Excel ทำงานเอง 100% ตั้งแต่เปิดไฟล์ → Refresh → ปิดไฟล์

      ซึ่งวิธีที่ผมจำนำเสนอคือ ใช้ Task Scheduler + VBS ซึ่ง เหมาะกับ ไฟล์ที่อยู่ บนเครื่องตัวเอง หรือเซิร์ฟเวอร์ และใช้ได้กับ Excel Desktop โดยที่เราไม่ต้องเสียค่าใช้จ่าย (แต่มีข้อจำกัดคือต้องเปิดเครื่องคอมพ์เราไว้ด้วย)


      📌 แนวคิดของ Workflow ที่เราจะทำให้ Excel ทำงานเอง:

      • Task Scheduler สั่งรัน VBS ตามเวลาที่กำหนดเพื่อเปิด Excel
      • ใน VBS จะมีสั่งให้เปิด Excel ที่กำหนดแล้วรัน VBA Macro บนนั้น
      • VBA Macro ใน Excel จะสั่ง Refresh Power Query อัตโนมัติ
      • Excel จะปิดตัวเองอัตโนมัติหลังจาก Refresh เสร็จ

      หลายคนสงสัยว่า “ทำไมไม่ใช้แค่ Macro (VBA) ใน Excel อย่างเดียว?”
      👉 เหตุผลก็คือ VBA ทำงานได้แค่ใน Excel เท่านั้น 🚀 แต่ VBS (VBScript) สามารถสั่งให้ Windows ควบคุม Excel (ในระดับพื้นฐาน) ได้จากภายนอกเลย โดยที่เราจะแบ่งหน้าที่กันทำงาน คือ

      • VBS (VBScript) เป็นตัวสั่งให้ Excel เปิดขึ้นมาอัตโนมัติ แล้วเรียก Macro ทำงาน ✅
      • VBA (Macro) สั่งงานละเอียด สามารถสั่ง Excel Refresh All (Queries และ Pivot ทั้งหมด) และปิดตัวเองได้

      🔥 วิธีที่ดีที่สุด = ใช้ VBS เปิด Excel แล้วให้ VBA ทำงานใน Excel! ซึ่งระบบอัตโนมัติทำงานได้เสถียรกว่าใช้ Task Scheduler สั่งเปิดไฟล์ Excel แล้วรัน Macro ตรงๆ

      ทีนี้ขั้นตอนการสร้างไฟล์และ Code ทั้งหมดจะเป็นแบบนี้ครับ

      สร้างไฟล์ VBS (AutoRefresh.vbs)

      📌 VBS มีหน้าที่:
      ✔ เปิด Excel อัตโนมัติ
      ✔ เรียกใช้ Macro ใน Excel

      ' AutoRefresh.vbs - Improved version
      On Error Resume Next
      
      Dim objExcel, objWorkbook
      Set objExcel = CreateObject("Excel.Application")
      If Err.Number <> 0 Then
          WScript.Echo "Error: ไม่สามารถสร้าง Excel application ได้"
          WScript.Quit 1
      End If
      
      objExcel.Visible = False
      
      Set objWorkbook = objExcel.Workbooks.Open("C:\Reports\DailyReport.xlsm")
      If Err.Number <> 0 Then
          WScript.Echo "Error: ไม่สามารถเปิดไฟล์ DailyReport.xlsm ได้"
          objExcel.Quit
          WScript.Quit 1
      End If
      
      ' เรียก Macro AutoRefreshAndClose
      objExcel.Run "AutoRefreshAndClose"
      If Err.Number <> 0 Then
          WScript.Echo "Error: ไม่สามารถเรียกใช้ Macro AutoRefreshAndClose ได้"
          objWorkbook.Close False
          objExcel.Quit
          WScript.Quit 1
      End If
      
      ' ปิด Workbook (ถ้า Macro ยังไม่ได้ปิด Excel)
      objWorkbook.Close True
      objExcel.Quit
      
      Set objWorkbook = Nothing
      Set objExcel = Nothing
      On Error GoTo 0
      

      📌 บันทึกไฟล์เป็น "C:\Scripts\AutoRefresh.vbs"


      สร้าง Macro VBA (AutoRefreshAndClose) ใน Excel

      📌 VBA มีหน้าที่:

      • Refresh Power Query อัตโนมัติ
      • รอให้ Refresh เสร็จก่อนทำงานต่อ
      • บันทึกไฟล์
      • ปิด Excel อัตโนมัติ

      กด Alt+F11 เข้า Visual Basic Editor แล้ว Insert Module ใหม่ แล้วแปะ code นี้ลงไป

      ป.ล. คำสั่ง Application.CalculateUntilAsyncQueriesDone จะใช้ได้ใน Excel 2016 ขึ้นไป นะครับ

      Sub AutoRefreshAndClose()
          On Error GoTo ErrHandler
          
          Dim FilePath As String
          
          ' รีเฟรชข้อมูลทั้งหมด
          ThisWorkbook.RefreshAll
          ' รอให้ asynchronous queries ทำงานจนเสร็จ
          Application.CalculateUntilAsyncQueriesDone
          
          ' ปิดการแจ้งเตือนก่อนบันทึกไฟล์ เพื่อป้องกัน prompt ยืนยันการบันทึกทับ
          Application.DisplayAlerts = False
          ThisWorkbook.Save
          Application.DisplayAlerts = True
          
          ' ปิด Excel
          Application.Quit
          Exit Sub
          
      ErrHandler:
          MsgBox "AutoRefreshAndClose Error " & Err.Number & ": " & Err.Description, vbCritical, "Error"
          Application.Quit
      End Sub

      📌 ที่สำคัญ ต้อง บันทึกไฟล์เป็น "Excel Macro-Enabled Workbook (*.xlsm)" ด้วยนะ ไม่งั้น VBA หาย!!


      ตั้ง Task Scheduler ให้รัน VBS อัตโนมัติ

      📌 Task Scheduler มีหน้าที่:
      ✔ เรียก VBS ตามเวลาที่กำหนด
      ✔ ทำให้ Excel เปิด – Refresh – ปิดเอง

      วิธีตั้งค่า Task Scheduler

      1️⃣ กด Windows + R → พิมพ์ taskschd.msc → กด Enter
      2️⃣ กด Action -> Create Basic Task
      3️⃣ ตั้งชื่อ Task เช่น "Auto Refresh Excel"
      4️⃣ เลือก Daily → ตั้งเวลาเป็น 09:00 AM
      5️⃣ เลือก Action → Start a program
      6️⃣ ในช่อง Program/script ใส่ Path เพื่อเรียกใช้ wscript.exe ดังนี้

      C:\Windows\System32\wscript.exe

      7️⃣ ในช่อง Add arguments ให้ใส่ Path ของไฟล์ VBS ที่เราสร้างไว้

      "C:\Scripts\AutoRefresh.vbs"

      8️⃣ กด Finish → ทดสอบ Run Task

      Windows จะเรียกใช้ VBS ตามเวลาที่กำหนด และ VBS จะสั่งให้ Excel เปิด – Refresh – ปิดเอง! (แต่ต้องเปิดคอมพ์ไว้ก่อน 9 โมงเช้านะ ไม่งั้น Task Scheduler ก็รันไม่ได้)


      สรุป Workflow อัตโนมัติ 100%

      📌 Task Scheduler → สั่งรัน VBS อัตโนมัติตามเวลาที่กำหนด
      📌 VBS → เปิด Excel และรัน Macro (VBA)
      📌 VBA Macro → สั่ง Refresh Power Query แล้วรอให้เสร็จ
      📌 VBA Macro → บันทึกไฟล์และปิด Excel อัตโนมัติ

      ป.ล. นอกจากวิธีนี้ เรายังอาจสามารถใช้ Power Automate Desktop สั่งเปิดไฟล์ Excel ขึ้นมา แล้วกดปุ่ม Refresh ก็ได้นะครับ มันอาจมีหลายท่าที่ทำได้

      แต่เท่าที่เช็ค ณ ตอนนี้ Power Automate Cloud ไม่สามารถเขียน Office Script ให้ Refresh Power Query ปกติได้ เพราะ Office Scripts ไม่สามารถ Refresh ข้อมูลใน Excel Online ผ่าน Power Automate ได้อย่างสมบูรณ์

      • คำสั่ง PivotTable.refresh ใช้ไม่ได้ใน Flow ของ Power Automate
      • คำสั่ง Workbook.refreshAllDataConnections ใช้ได้แค่กับข้อมูลที่มาจาก Power BI
      • Power Automate ไม่สามารถ Trigger การ Refresh ของสูตรที่ใช้ Workbook Links ได้

      ซึ่งตรงนี้ไม่แน่ใจว่าอนาคตจะเปลี่ยนไหมนะครับ


      6️⃣ตรวจสอบ+วิเคราะห์ผลจากรายงาน

      แม้ว่าเราจะทำให้ Excel อัตโนมัติ 100% แล้ว แต่นั่นไม่ได้หมายความว่าทุกอย่างจะถูกต้องเสมอไป! ✅

      การตั้งค่า Automation ช่วยลดเวลาทำงานซ้ำๆ ได้ก็จริง แต่ ข้อผิดพลาด ก็ยังสามารถเกิดขึ้นได้จากหลายปัจจัย เช่น:

      • ข้อมูลต้นทางผิดพลาด → เช่น มีคนกรอกข้อมูลผิด หรือใช้ฟอร์แมตไม่ตรงกับที่ระบบรองรับ
      • ไฟล์ต้นทางมีการเปลี่ยนแปลง → เช่น มีการเพิ่ม/ลบคอลัมน์ ทำให้ Power Query ทำงานผิดพลาด
      • ระบบ Automation มีปัญหา → อาจเกิดจากไฟล์ต้นทางไม่อัปเดต หรือระบบติดขัดจากข้อจำกัดของซอฟต์แวร์
      • สูตรคำนวณหรือ Model มีบั๊ก → เช่น เงื่อนไขใน DAX หรือ Power Pivot ที่ออกแบบไว้แต่เดิมไม่ครอบคลุมทุกกรณี

      ทำไมต้องตรวจสอบก่อนส่งรายงาน?

      เพราะ การทำรายงานไม่ได้จบแค่ทำให้เสร็จ แต่เป้าหมายของเราคือ การ Take Action ที่ถูกต้องจากข้อมูลที่น่าเชื่อถือ

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

      สิ่งที่ควรทำในขั้นตอนนี้

      • ตรวจสอบความถูกต้องของข้อมูล
        • เช็คว่า Power Query โหลดข้อมูลมาครบหรือไม่ (เรื่องพวกนี้สร้าง Query ที่ช่วยตรวจสอบปัญหาได้ เช่น นับจำนวน, Keep Errors, Keep Duplicates เพื่อให้เห็นปัญหาชัดๆ)
        • ตรวจสอบว่าสูตรคำนวณใน Power Pivot หรือ DAX ให้ผลลัพธ์ที่ถูกต้อง
        • เช็คว่ากราฟ, Pivot Table, และ Dashboard อัปเดตตรงตามที่ควรจะเป็น (ซึ่งใช้ Sense ทางธุรกิจดูได้ว่าเลขน่าจะถูกหรือผิด)
      • วิเคราะห์และสรุปข้อมูล
        • ใช้เวลาที่ประหยัดจากการทำรายงาน มาโฟกัสที่ การสรุป Insight ที่สำคัญ
        • ตั้งคำถามสำคัญ: มีอะไรเปลี่ยนแปลงผิดปกติ? ตัวเลขไหนต้องจับตา?
        • หาแนวทางในการพัฒนาองค์กรจากข้อมูลที่ได้
      • ใช้ AI เป็นเครื่องมือช่วย แต่ต้องคิดเอง
        • ใช้ AI เช่น ChatGPT ใช้ AI เป็น ที่ปรึกษา หรือช่วยเขียนรายงานเกลาภาษาให้สวยและเข้าใจง่ายขึ้นได้
        • แต่ AI ไม่สามารถเข้าใจบริบทธุรกิจของคุณได้ดีเท่าคุณเอง อย่าใช้มันตัดสินใจแทนคุณ
      • บันทึกไฟล์ที่ผ่านการตรวจสอบแล้ว
        • หากรายงานผ่านการตรวจสอบและวิเคราะห์แล้ว ให้บันทึกลงโฟลเดอร์ใหม่ เช่น "ReportsReady"
        • โฟลเดอร์นี้จะเป็นตัวบอกว่า รายงาน พร้อมสำหรับการส่งต่อให้ผู้บริหารหรือทีมงาน

      7️⃣แจ้งเตือนหรือส่งรายงานอัตโนมัติ

      หลังจากที่เราทำการวิเคราะห์ผลรายงาน แล้วใส่รายงานพร้อมผลการวิเคราะห์ลงใน Folder ReportsReady แล้ว
      👉 ขั้นตอนสุดท้ายก็คือ แจ้งเตือนหรือส่งรายงานให้ทีมงาน เพื่อให้แน่ใจว่าทุกคนได้รับข้อมูลล่าสุด โดยเราสามารถทำให้ระบบแจ้งเตือนและส่งรายงานอัตโนมัติได้ 2 วิธี


      Option A: ใช้ Automation Tool เช่น Power Automate, n8n, Make

      📌 เหมาะกับ:
      ✅ ไฟล์ที่อยู่บน Cloud (OneDrive, SharePoint, Google Drive, Dropbox)
      ✅ ต้องการแจ้งเตือนผ่าน Email, Microsoft Teams, Line
      ✅ ไม่ต้องเปิดเครื่องเอง → Cloud ทำงานให้

      💡 พวกโปรแกรม Automate สามารถตั้งค่าให้ “จับตาดูไฟล์” ใน Folder ที่กำหนดว่ามีการเพิ่ม/อัปเดตหรือไม่ (เป็น Trigger แบบหนึ่ง) ถ้ามี Workflow ก็จะทำงาน แล้วส่งแจ้งเตือนไปให้ทีมงานอัตโนมัติ

      ซึ่งสามารถแจ้งเตือนผ่านช่างทางต่างๆ ได้หลายช่องทาง เช่น

      • Line Messaging API
      • Microsoft Teams
      • Email
      • App Notification
      • อื่นๆ

      ทำให้ทีมงานได้รับการแจ้งเตือนแบบ Real-time ทุกครั้งที่ไฟล์อัปเดต ! 🚀 ซึ่งรายละเอียดต้องไปดูที่เครื่องมือ Automation แต่ละตัวอีกทีนะครับ


      Option B: ใช้ Task Scheduler + VBS + VBA ส่งอีเมลผ่าน Outlook

      📌 เหมาะกับ:
      ✅ ไฟล์ที่อยู่บน เครื่องตัวเอง หรือเซิร์ฟเวอร์
      ✅ ใช้ MS Outlook เป็นตัวส่งอีเมล
      ✅ ต้องการแนบไฟล์ Excel ไปในอีเมลโดยตรง


      วิธีใช้ Task Scheduler + VBS + VBA ส่งอีเมล

      📌 Workflow ที่เราจะทำ:
      1️⃣ Task Scheduler → เรียกใช้ VBS ตามเวลาที่กำหนด
      2️⃣ VBS → เปิด Excel และรัน Macro ที่ส่งอีเมล
      3️⃣ VBA ใน Excel → ใช้ MS Outlook สร้างอีเมลและแนบไฟล์รายงาน


      โค้ด VBS (AutoSendEmail.vbs)

      📌 VBS มีหน้าที่:
      ✔ เปิด Excel อัตโนมัติ
      ✔ รัน Macro ที่ส่งอีเมล

      On Error Resume Next
      
      Dim objExcel, objWorkbook
      Set objExcel = CreateObject("Excel.Application")
      If Err.Number <> 0 Then
          WScript.Echo "Error: ไม่สามารถสร้าง Excel application ได้"
          WScript.Quit 1
      End If
      
      objExcel.Visible = False
      
      Set objWorkbook = objExcel.Workbooks.Open("C:\ReportsReady\DailyReport.xlsm")
      If Err.Number <> 0 Then
          WScript.Echo "Error: ไม่สามารถเปิดไฟล์ DailyReport.xlsm ได้"
          objExcel.Quit
          WScript.Quit 1
      End If
      
      ' เรียก Macro SendReport
      objExcel.Run "SendReport"
      If Err.Number <> 0 Then
          WScript.Echo "Error: ไม่สามารถเรียกใช้ Macro SendReport ได้"
          objWorkbook.Close False
          objExcel.Quit
          WScript.Quit 1
      End If
      
      ' ปิด Workbook และ Excel
      objWorkbook.Close True
      objExcel.Quit
      
      Set objWorkbook = Nothing
      Set objExcel = Nothing
      On Error GoTo 0

      📌 บันทึกไฟล์เป็น "C:\Scripts\AutoSendEmail.vbs"


      โค้ด VBA (SendReport) ใน Excel

      📌 VBA มีหน้าที่:
      ✔ สร้าง Email ใน MS Outlook
      ✔ แนบไฟล์รายงาน
      ✔ ส่งอีเมลอัตโนมัติ

      Sub SendReport()
          On Error GoTo ErrHandler
          
          Dim OutApp As Object
          Dim OutMail As Object
          Dim AttachmentPath As String
          
          AttachmentPath = "C:\ReportsReady\DailyReport.xlsm"
          
          ' ตรวจสอบว่าไฟล์แนบมีอยู่จริงหรือไม่
          If Dir(AttachmentPath) = "" Then
              MsgBox "ไม่พบไฟล์แนบ: " & AttachmentPath, vbExclamation, "SendReport Error"
              Exit Sub
          End If
          
          Set OutApp = CreateObject("Outlook.Application")
          Set OutMail = OutApp.CreateItem(0)
          
          With OutMail
              .To = "your_team@example.com"
              .CC = "manager@example.com"
              .Subject = "Daily Report"
              .Body = "แนบไฟล์รายงานประจำวันที่ " & Format(Date, "dd/mm/yyyy") & " ตามที่อัปเดตไว้"
              .Attachments.Add AttachmentPath
              .Send ' หรือเปลี่ยนเป็น .Display เพื่อเช็คก่อนส่ง
          End With
          
          ' ล้างตัวแปร
          Set OutMail = Nothing
          Set OutApp = Nothing
          Exit Sub
          
      ErrHandler:
          MsgBox "SendReport Error " & Err.Number & ": " & Err.Description, vbCritical, "Error"
          Set OutMail = Nothing
          Set OutApp = Nothing
      End Sub

      📌 บันทึกไฟล์เป็น "Excel Macro-Enabled Workbook (*.xlsm)"


      ตั้ง Task Scheduler ให้รัน VBS อัตโนมัติ

      📌 ให้ Task Scheduler เรียกใช้ VBS เพื่อให้ Excel เปิดขึ้นมาแล้วส่งอีเมล

      1️⃣ เปิด Task Scheduler (taskschd.msc)
      2️⃣ กด Create Basic Task
      3️⃣ ตั้งชื่อ Task เช่น "Auto Send Report"
      4️⃣ เลือก Daily → ตั้งเวลาเป็น 10:00 AM
      5️⃣ เลือก Action → Start a program
      6️⃣ ในช่อง Program/script ใส่ Path ของ wscript.exe

      C:\Windows\System32\wscript.exe

      7️⃣ ในช่อง Add arguments ให้ใส่ Path ของ VBS

      "C:\Scripts\AutoSendEmail.vbs"

      8️⃣ กด Finish → ทดสอบ Run Task

      ทุกวัน เวลา 10:00 AM → ระบบจะเปิด Excel → ส่งอีเมลแนบไฟล์ให้ทีมโดยอัตโนมัติ!


      🎯 สรุป: วิธีไหนเหมาะกับคุณ?

      วิธีใช้กับไฟล์แบบไหน?ส่งแจ้งเตือนไปที่ไหน?ความซับซ้อน
      Power Automate / n8n / Makeไฟล์บน CloudEmail, Teams, Line, App⭐⭐⭐
      (ง่ายกว่า แต่อาจมีค่าใช้จ่าย)
      Task Scheduler + VBS + VBA (Outlook)ไฟล์บนเครื่องตัวเองEmail (Outlook)⭐⭐⭐⭐
      (ต้องตั้งค่ามากกว่า และต้องเปิดเครื่องทิ้งไว้)

      📢 แล้วคุณใช้วิธีไหนส่งรายงานอัตโนมัติ? มีปัญหาตรงไหน ลองแชร์กันดูครับ!


      🔥 สรุป: เปลี่ยน Excel Manual ให้เป็นระบบอัตโนมัติ 100%! 🔥

      หลังจากที่เราเดินทางกันมาตั้งแต่ ดึงข้อมูล → Clean ข้อมูล → คำนวณ → Refresh → แจ้งเตือน
      ตอนนี้คุณสามารถทำให้ Excel ทำงานอัตโนมัติได้ครบทุกขั้นตอน


      🤖 ทำให้ Excel ทำงานเอง 100% ตาม Workflow นี้

      1. ดึงข้อมูลอัตโนมัติ

      • ใช้ Power Query ดึงข้อมูลจากแหล่งต่างๆ
      • ใช้ Automation Tool (Power Automate, n8n, Make) ถ้าต้องดาวน์โหลดไฟล์แนบจาก Email หรือ Cloud

      2. Clean ข้อมูลให้อัตโนมัติ

      • ใช้ Power Query ลบแถวหัวตาราง, รวมไฟล์, แปลงฟอร์แมตข้อมูล
      • ใช้ Data Model (Power Pivot) ถ้าต้องคำนวณหลายตาราง

      3. ใช้ Power Pivot คำนวณขั้นสูง

      • ใช้ DAX คำนวณ Running Total, Moving Average, YTD, MTD
      • ใช้ Relationship แทน VLOOKUP เมื่อข้อมูล Granularity ไม่เท่ากัน

      4. ตั้งให้ Excel Refresh ข้อมูลอัตโนมัติ

      • ใช้ Task Scheduler + VBS + VBA เหมาะมากกับไฟล์ที่อยู่บนเครื่องตัวเอง

      5. ตรวจสอบ+วิเคราะห์ผลจากรายงาน

      • ตรวจความถูกต้อง
      • วิเคราะห์ผลเพื่อพัฒนาธุรกิจและองค์กร

      6. แจ้งเตือนหรือส่งรายงานอัตโนมัติ

      • ใช้ Power Automate / n8n / Make ส่งแจ้งเตือน Email, Teams, Line
      • ใช้ Task Scheduler + VBS + VBA ส่งอีเมลแนบรายงานผ่าน Outlook

      เริ่มใช้ระบบอัตโนมัติกับงานของคุณเลย

      • ไม่ต้องเสียเวลาทำงานซ้ำๆ ทุกวัน Excel จัดการให้เอง
      • ลดความผิดพลาด ข้อมูลอัปเดตตรงเวลาเสมอ
      • มีเวลาไปทำอย่างอื่นที่สำคัญกว่า ไม่ต้องกด Refresh หรือส่งอีเมลเอง

      ลองนำไปปรับใช้ดู แล้วอย่าลืมแชร์ว่าลองแล้วเป็นไงบ้างนะ! 🚀

    • ThepExcel Public Workshop 2025

      ThepExcel Public Workshop 2025

      ยกระดับทักษะของคุณกับ Workshop ที่ออกแบบมาเพื่อตอบโจทย์การทำงานของคุณ!

      • เรียนรู้ Excel / Power BI ตั้งแต่พื้นฐานแบบความรู้แน่นๆ ประยุกต์ได้
      • นำงานมาถาม/ปรึกษาช่วงท้ายการอบรมได้
      • ทำงานเสร็จไว มีเวลาทำในสิ่งสำคัญมากขึ้น
      • เลือกรูปแบบที่เหมาะกับคุณได้ทั้งแบบ Onsite ที่โรงแรม และ Live Online ผ่าน Zoom
      • สอนโดย คุณ ศิระ เอกบุตร เจ้าของเพจ “เทพเอ็กเซล” ที่มีผู้ติดตามนับแสน มียอดวิวนับล้านใน YouTube  มีประสบการณ์สอน Excel ให้บริษัทชั้นนำกว่า 100 แห่ง

      Power BI Workshop 2025
      (มิถุนายน )

      ⏰ กำหนดการ ONSITE เต็มวัน (2วัน)

      • วันเวลา : เสาร์-อาทิตย์ ที่ 14-15 มิถุนายน 2558 เวลา 9:00 – 17:00 น.
      • สถานที่: โรงแรมสินธร มิดทาวน์ (กทม.)
      • ราคา:
        • ราคาปกติ 8,500 บาท/ท่าน (รวม Vat)
        • กรณีพิเศษที่ได้ราคา 7,500 บาท/ท่าน (รวม Vat)
          • มาตั้งแต่ 2 ท่านขึ้นไป หรือ
          • ลูกค้าเก่า Workshop
      • ฟรี 2 Break และ 1 Lunch / วัน
      • จุดเด่น:
        • เจอกับวิทยากรแบบ face-2-face
        • เรียนกันเข้มข้น สามารถเก่งขึ้นได้ภายใน 2 วัน
        • โอกาสในการ Networking กับวิทยากรและผู้เข้าอบรมท่านอื่น
        • ในการอบรมแบบ Onsite จะมี TA ผู้ช่วย 1-2 ท่าน คอยตอบคำถามข้อสงสัย

      สอบถามรายละเอียดเพิ่มเติม

      ThepExcel Public Workshop 2025 126
      QR Line Official @ThepExcelWorkshop

      วิธีการสมัคร

      1. คลิกที่ปุ่ม “สมัครเลย” หรือ link ด้านล่าง (สามารถสมัครและชำระเงินทีเดียวหลายคน หลายคอร์สได้)
      2. ชำระเงินตามวิธีที่ระบุในรายละเอียดการชำระเงิน
      3. กรอกข้อมูลในแบบฟอร์มให้ครบถ้วน และแนบหลักฐานการชำระเงินในแบบฟอร์ม

      สมัครเลย ที่ https://forms.gle/1mTWCD8tDqm9M5fz9

      ThepExcel Public Workshop 2025 127
      QR แบบฟอร์มใบสมัคร

      🎁 สิ่งที่ผู้เข้าอบรมจะได้รับ

      • ใบรับรองการอบรมแบบดิจิทัล (PDF)
      • โอกาสถามคำถามและแก้ไขปัญหาหลังการอบรม
      • เอกสารประกอบการอบรมแบบดิจิทัล (ไฟล์ Excel ประกอบการอบรม และ Slide PDF)
      • สิทธิ์เข้ากลุ่ม Facebook Group พิเศษ ที่จัดให้คนลง Workshop คอร์สนั้นๆ กับเทพเอ็กเซลเท่านั้น
      • สิทธิ์รับชมคลิป VDO ย้อนหลัง เอาไว้ทบทวนหลังการอบรม (ดูผ่าน Facebook Group พิเศษเท่านั้น)
      • สิทธิ์เข้าร่วม Live Online Q&A session ปรึกษาปัญหา Excel ในงานของคุณ หลังจบคอร์ส ฟรี! (แจ้งวันหลังจากเรียนจบ)

      สิ่งที่ต้องเตรียม

      • Notebook ที่ติดตั้ง Excel (ขั้นต่ำเวอร์ชัน 2016 ขึ้นไป แต่แนะนำ Excel 2019 ขึ้นไป) หรือ Power BI Desktop
      • สำหรับผู้เข้าอบรม Onsite: สามารถเช่า Notebook ได้ (เลือกในแบบฟอร์มใบสมัคร)
        • ในราคา 1,000 บาท/คน /2 วัน ( หากรวม vat = 1,070 บาท)

      รายละเอียดการชำระเงิน

      • ถ้าไม่ต้องการให้ออกใบเสนอราคา /ใบแจ้งหนี้ ก่อน ก็สามารถชำระเงิน แล้วแนบหลักฐานการชำระในใบสมัคร ได้เลย
      • ถ้าต้องการให้ออก ใบเสนอราคา /ใบแจ้งหนี้ ก่อน สามารถติดต่อ LINE: @ThepExcelWorkshopได้

      ชำระเงินแล้วแนบหลักฐานการชำระเงินในใบสมัครได้เลย

      ผู้เข้าอบรมทุกท่านจะได้รับใบประกาศนียบัตรและใบกำกับภาษีเต็มรูปแบบ สามารถออกใบกำกับภาษีในนามบริษัทเพื่อใช้เบิกค่าใช้จ่ายได้

      โดยทางเทพเอ็กเซลจะส่งใบเสร็จรับเงิน/ใบกำกับภาษีให้ทาง email ผ่านระบบ e-tax invoice by email ซึ่งเป็นวิธีที่ทางกรมสรรพากรอนุญาตให้ใช้ได้

      ราคาค่าอบรม :

      กรณีชำระในนามบุคคล

      • ราคาปกติ : 8,500 บาท/ท่าน  (รวม VAT แล้ว)
      • ราคากรณีพิเศษ1* : 7,500 บาท/ท่าน  (รวม VAT แล้ว)
      • ราคากรณีพิเศษ2** : 7,000 บาท/ท่าน  (รวม VAT แล้ว)

      กรณีชำระในนามนิติบุคคล (มี หัก ณ ที่จ่าย 3%)

      • ราคาปกติ : 8,500 บาท/ท่าน  (รวม VAT แล้ว)
        • หัก ณ ที่จ่าย 3% = 224.30 บาท
        • ยอดชำระ 7,775.70 บาท/ท่าน (รวม VAT และหัก ณ ที่จ่าย 3% แล้ว)
      • ราคากรณีพิเศษ1* : : 7,500 บาท/ท่าน  (รวม VAT แล้ว)
        • หัก ณ ที่จ่าย 3% = 210.28 บาท
        • ยอดชำระ 7,289.72 บาท/ท่าน (รวม VAT และหัก ณ ที่จ่าย 3% แล้ว)
      • ราคากรณีพิเศษ2* : 7,000 บาท/ท่าน  (รวม VAT แล้ว)
        • หัก ณ ที่จ่าย 3% = 196.26 บาท
        • ยอดชำระ 6,803.74 บาท/ท่าน (รวม VAT และหัก ณ ที่จ่าย 3% แล้ว)

      หมายเหตุ

      • *ราคากรณีพิเศษ หมายถึง Early Bird (ต้องชำระเงินก่อนเดือนที่เรียนคอร์สนั้นๆ) หรือ มาตั้งแต่ 2 ท่านขึ้นไป หรือ ลูกค้าเก่า Workshop (ที่สมัครช่วงหมด Early Bird)
      • **ราคากรณีพิเศษ2 หมายถึง
        • ต้องอยู่ในช่วง Early Bird (ต้องชำระเงินก่อนเดือนที่เรียนคอร์สนั้นๆ) และ กรณีสมัคร 2 คอร์สขึ้นไปพร้อมกัน
        • ต้องอยู่ในช่วง Early Bird (ต้องชำระเงินก่อนเดือนที่เรียนคอร์สนั้นๆ) และ เป็นลูกค้าเก่า Workshop (รวมถึงคนสมัครร่วม)

      ช่องทางการชำระเงิน

      ชำระเงินโดยการโอนเงินค่าอบรมมาที่
      บัญชี ออมทรัพย์ : บริษัท เทพเอ็กเซล จำกัด
      ธนาคารไทยพาณิชย์ (SCB)

      สาขา บิ๊กซี สะพานควาย
      033-421749-2

      *** ถ้าชำระเงินหลายหลายคน กรุณากรอกในหมายเหตุ ***

      วิธีการสมัคร

      1. คลิกที่ปุ่ม “สมัครเลย” หรือ link ด้านล่าง (สามารถสมัครและชำระเงินทีเดียวหลายคน หลายคอร์สได้)
      2. ชำระเงินตามวิธีที่ระบุในรายละเอียดการชำระเงิน
      3. กรอกข้อมูลในแบบฟอร์มให้ครบถ้วน และแนบหลักฐานการชำระเงินในแบบฟอร์ม

      กรอกใบสมัครที่ https://forms.gle/1mTWCD8tDqm9M5fz9

      ThepExcel Public Workshop 2025 127
      QR แบบฟอร์มใบสมัคร

      หรือสอบถามรายละเอียดเพิ่มเติมเกี่ยวกับ Workshop ได้ที่ LINE: @ThepExcelWorkshop

      ThepExcel Public Workshop 2025 129
      QR Line Official @ThepExcelWorkshop
    • แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ

      หลายคนน่าจะใช้ Power Query (ทั้งใน Excel และ Power BI) ดึงข้อมูลจากไฟล์ต่างๆ ทั้งไฟล์ Excel / CSV หรือแม้กระทั่งดึงหลายๆ ไฟล์จาก Folder ในเครื่องตัวเองมารวมกันได้แล้ว… แต่อาจเริ่มอยากพัฒนาไปอีกขึ้น คือ การเอาแหล่ง Data Source ไปไว้บน Online เลย

      เพราะถ้าเราดึงจากแหล่งออนไลน์ได้ มันดีกว่าการดึงจากเครื่องตรงที่สามารถทำการ Schedule Refresh ให้ Power BI ได้ รวมถึงแหล่งข้อมูลเอาวางไว้ตรงกลาง ให้เพื่อนๆ มาดึงไฟล์ไปใช้ได้

      ว่าแต่การดึงข้อมูลจากแหล่งออนไลน์ด้วย Power Query มันทำยังไงกันแน่? เพราะวิธีมันไม่ได้ตรงไปตรงมานัก

      คนที่เคยพยายาลอง Get Data จากบริการ Online ของ Microsoft เองจะพบว่ามันไม่ง่ายเลย บอกเลยว่า จริงๆ แล้วการดึงจากระบบ Microsoft เผลอๆ อาจยากกว่าดึงจากบริการของ Google ซะอย่างงั้น 555

      ไม่ต้องห่วง เพราะในบทความนี้ผมจะบอกวิธีการดึงโดยละเอียด และท้ายสุด เราจะมีวิธีดึงข้อมูลจาก Folder ที่มันอยู่ในระบบ Online ยังไงให้มัน Work? ใครอยากรู้อ่านต่อได้เลยครับ!

      ดึงข้อมูลจาก Google Sheets

      การดึงข้อมูลจาก Google Sheets ที่ง่ายที่สุดคือให้เรา Publish ข้อมูลบน Google Sheets ก่อน โดยไปที่ File- > Share -> Publish to web (ไม่ใช่กด share link ปกตินะ)

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 130

      แล้วกดเลือกว่าจะ Publish เป็นอะไร ซึ่งตัวที่ผมขอแนะนำคือเป็น Microsoft Excel (.xlsx) เพราะเผื่อว่ามีข้อมูลหลายชีท จะได้ไม่มีปัญหา

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 131

      จากนั้นเราก็จะได้ Link มาซึ่งสามารถเอา URL ที่ได้นี้ไปใช้ใน Power Query โดยเลือก Get Data from Web แล้วแปะ URL แล้ว ok ได้เลย

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 132

      แล้วผลลัพธ์ก็จะเหมือนกับการ Get Data from Excel ปกติ คือเลือก Sheet เลือก Table ได้เลย

      ดึงข้อมูลจาก Google Form

      อันนี้แค่เราทำการกดไปที่ Response ของ Google Form แล้วกด Link to Sheets ก็สามารถทำต่อตามหัวข้อตอนที่ดึงจาก Google Sheets ได้เลย

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 133

      ดึงข้อมูลจาก One Drive Business

      สำหรับอันนี้ วิธีทำ คือให้เข้า one drive for business จนเจอไฟล์ที่ต้องการ แล้วต้องกด … แล้วเลือกเปิดไฟล์ใน Desktop App ก่อน เพื่อให้ได้ File Path มา

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 134

      แล้วกดไปที่ File -> Info -> Copy Path (ไม่ใช่ local นะ)

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 135

      มันจะได้ Link ประมาณนี้

      https://thepexcelcom-my.sharepoint.com/personal/sira_thepexcel_com/Documents/xxxxxx/ThepExcel-data-new.xlsx?web=1

      ให้ตัดที่เขียนว่า ?web=1 ออกไปซะ เหลือแค่ถึง .xlsx ปกติ

      มันจะได้ Link ประมาณนี้

      https://thepexcelcom-my.sharepoint.com/personal/sira_thepexcel_com/Documents/xxxxxx/ThepExcel-data-new.xlsx

      ดึงข้อมูลจาก Microsoft Form

      ปกติ Microsoft Form จะสามารถกดเปิด Response ใน Excel ได้แบบนี้

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 136

      ก็ให้กด Open in desktop app ต่อแบบนี้

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 137

      แล้วก็เข้าไป Copy Path เหมือนเดิม

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 138

      จะได้ Link มา (อย่าลืมลบ ?web=1 ออกล่ะ) แล้วก็ Get Data From Web ได้เลย (อาจต้อง log in ตามปกติ )

      ดึงข้อมูลจาก One Drive Personal

      ดึงข้อมูลจาก SharePoint Folder

      ก่อนอื่นให้ไปที่ Folder ที่ต้องการ ซึ่งต้องบอกก่อนว่า วิธีที่ถูกต้องคือต้องวางไฟล์ไว้ใน SharePoint Site ไม่ใช่ One Drive นะครับ (แม้ว่าการวางไว้ใน One Drive พอเข้าไปในเว็บมันจะแสดงว่าอยู่ในเว็บ SharePoint ก็เถอะ)

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 139

      ที่ถูกต้องคือมันต้องมี url ที่มีคำว่า sites แบบนี้

      ให้เรา Copy มาแค่คำที่ต่อจากคำว่า Sites เช่น

      https://thepexcelcom.sharepoint.com/sites/ThepExcel

      ให้เราลอง Get Data จาก SharePoint Folder ด้วย Power BI ดู (เพราะจาก Excel บางทีมันไม่มีปุ่มให้กด)

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 140

      ใส่ Site URL เข้าไป เช่น

      https://thepexcelcom.sharepoint.com/sites/ThepExcel

      Tips: เวลาเข้าระบบของ Microsoft อย่าลืมกด Login ด้วย Microsoft Account นะ จะใช้ Anonymous ไม่ได้นะครับ

      มันจะดึงข้อมูลมาทั้ง Site เลยแบบนี้ ด้วยสูตร M Code ประมาณนี้

      = SharePoint.Files("https://thepexcelcom.sharepoint.com/sites/ThepExcel/", [ApiVersion = 15])
      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 141

      กลายเป็นว่ามันเยอะเกินไป และถ้าเราอยากจะเลือกเฉพาะบาง Folder ต้องไป Filter เอาจาก Folder Path คอลัมน์สุดท้ายทีหลัง ซึ่งจะช้ามากเพราะมันต้องอ่านทุกไฟล์เลย

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 142

      เคล็ดลับคือ ให้เปลี่ยน M Code จาก SharePoint.Files เป็น SharePoint.Contents

      เราจะเห็น Structure ของ Site ออกมาก่อน ไม่ใช่เห็นทุกไฟล์ตามปกติ

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 143

      ถ้า Copy Query หรือ M Code ที่ได้ไปใช้ใน Excel ก็จะได้เหมือนกัน

      แปลว่าสิ่งที่จำเป็นจริงๆ คือ M Code ส่วนแรก อันนี้ (ซึ่งในอนาคต ApiVersion อาจเปลี่ยนไปได้อีก ต้องไปคอยดูว่าใน Power BI เรียกแบบไหน)

      =SharePoint.Contents("https://thepexcelcom.sharepoint.com/sites/ThepExcel/", [ApiVersion = 15])

      พอเข้าไปใน SharePoint Site ด้วย SharePoint.Contents ได้แล้ว เราค่อยเข้าไปใน Object ที่เราต้องการ โดยกดเข้าไปตรง Table ตรงๆ เช่น Shared Documents มันจะเข้าไปทีละชั้นได้ แบบนี้จะ Work กว่ามาก

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 144
      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 145

      ดึงข้อมูลจาก Website ทั่วไป

      ถ้าเว็บนั้นเป็น Public ใครๆ ก็เข้าได้ และมี Static Content พวกตารางอยู่ในหน้านั้น ก็ดึงมาตรงๆ ได้เลย เช่น

      https://th.wikipedia.org/wiki/รายชื่อจังหวัดของประเทศไทยเรียงตามพื้นที่

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

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 146

      ดึงข้อมูลจาก Web ผ่าน API

      ถ้าเว็บที่เราจะดึงข้อมูลมี API (Application Programming Interfaces) หรือตัวกลางที่ไว้ใช้สื่อสารในการดึงข้อมูลให้ใช้ ก็สามารถใช้ Power Query ดึงข้อมูลจากเว็บนั้นมาได้ โดยทำตามนี้ (เขียนไว้หลายปีที่แล้ว มีหลายตอนนะ รายละเอียดเยอะ)

      ซึ่งการใช้ API นั้นจริงๆ ค่อนข้างยืดหยุ่นมาก แต่ก็ใช้ความสามารถทางเทคนิคสูงหน่อย อย่างไรก็ตามในยุคนี้เราใช้ AI มาช่วยได้ด้วย ไว้ผมจะเขียนบทความใหม่ให้อีกทีนะครับ

    • สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow

      ในบทความนี้ เราจะพาเพื่อนๆ มาทำความรู้จักกับการนำ AI Node มาใช้ใน n8n เพื่อทำงานอัตโนมัติ (Automation Workflow) โดยเฉพาะการเชื่อมต่อกับบริการ Model LLM ต่างๆ ที่ช่วยทำให้ Workflow ของเราไม่เพียงแต่สามารถรันอัตโนมัติ แต่ยังมีความ “ฉลาด” กว่าเดิมมากอีกด้วย

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

      ลองทดสอบสร้าง AI Chatbot แบบง่ายๆ

      ก่อนอื่น ให้เพื่อนๆ เริ่มจากการ สร้าง API Key สำหรับการเข้าถึงบริการ OpenAI โ (สามารถสมัคร API ได้ง่ายๆเลย ไม่ซับซ้อนเหมือนของ Google)

      เราสร้าง API Key ได้ 2 ระดับคือ ระดับ User กับ Project แต่ผมแนะนำให้สร้าง API ไว้ในระดับ Project จะควบคุมได้มากกว่าครับ

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 147

      ถ้าเราลองสร้าง Workflow โดยสร้างโหนดชื่อ Chat Trigger แล้วต่อกับ Basic LLM Chain โดย Plug Model เป็น Open AI Chat Model (จริงๆ จะเลือกของเจ้าไหนก็ได้)

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 148

      ป.ล. ผมเลือก Model GPT 4o-mini นะครับ ราคาถูกดี

      โดย Node Basic LLM Chain นี้จะทำหน้าที่รับข้อความและโต้ตอบกับผู้ใช้ได้ทันที

      หากคุณลองทดสอบ Chat ดู จะพบว่า มันสามารถตอบเราได้จริงๆ ด้วยนะ แต่มันไม่มีความทรงจำอะไรเลย จำไม่ได้แม้แต่ประโยคล่าสุดที่เพิ่งคุยไปด้วยซ้ำ! 555 😆

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 149

      ยกระดับการใช้งานด้วย AI Agent

      หากเราต้องการ AI ที่สามารถจดจำการสนทนาก่อนหน้าได้ เราควรใช้ AI Agent Node ที่มี ระบบ Memory ที่ช่วยให้ระบบจำบทสนทนาได้

      การใช้ Window Buffer Memory ที่จำข้อความก่อนหน้าได้ถึง 5 ครั้ง เพื่อให้การสนทนามีความต่อเนื่อง AI Agent จะทำหน้าที่ประมวลผลตามข้อมูลที่ได้รับอย่างยืดหยุ่น สามารถเพิ่มความฉลาดได้ด้วยการต่อเข้ากับ Tools ที่จำเป็นอีกด้วย

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 150

      พอลองคุยปุ๊ป มันบอกว่า ถ้าเราใช้ Tools Agent จะต้องมีการต่อ Tools อย่างน้อย 1 อัน ถึงจะสามารถใช้ได้ ถ้าจะไม่ใช้ Tools เลย มันแนะนำให้ใช้ Conversional Agents แทน

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 151

      ถ้าเราลองเปลี่ยนประเภท AI Agent เป็น Conversational Agent ก็จะสามารถคุยโดยมีความทรงจำได้แล้ว (โดยในที่นี้ไม่มีการใช้ Tools ใดๆ)

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 152

      เพิ่มความสามารถของ AI ด้วย Tools

      AI Agent สามารถใช้งานร่วมกับ Tools ที่จะช่วยทำให้ AI สามารถตอบสนองได้อย่างมีประสิทธิภาพ และทำงานได้ซับซ้อนมากขึ้น โดยแต่ละ Tool มีจุดเด่นที่แตกต่างกันดังนี้:

      • Calculator: ช่วยให้ AI คำนวณที่ซับซ้อนได้แม่นยำยิ่งขึ้น เหมาะสำหรับการตอบคำถามเชิงตัวเลข
      • SerpAPI: ใช้ค้นหาข้อมูลใหม่ๆ จาก Google ทำให้ AI ตอบคำถามที่เกี่ยวข้องกับข่าวสารปัจจุบันได้
      • Wikipedia Tool: ดึงข้อมูลความรู้ทั่วไปจาก Wikipedia โดยไม่ต้องใช้ API ทำให้ใช้งานสะดวก
      • Code Tool: ใช้รันโค้ด Python ซึ่งทำให้ AI รู้จักเวลาท้องถิ่นหรือตรวจสอบข้อมูลตามเงื่อนไขเฉพาะที่กำหนด
      • HTTP Request Tool: ส่งและรับข้อมูลจาก API ภายนอก เพื่อเพิ่มขอบเขตการเชื่อมต่อกับแหล่งข้อมูลอื่นๆ ได้
      • Vector Store Tool: เป็นเครื่องมือที่เชื่อมต่อกับฐานข้อมูลที่ออกแบบมาโดยเฉพาะเพื่อรองรับ AI ในการค้นหาข้อมูลที่มีความซับซ้อนและเชิงลึก โดย Vector Store จะจัดเก็บข้อมูลแบบ “Embedding” ซึ่งเหมาะสำหรับการจัดการข้อมูลที่มีความคล้ายคลึงกัน
      • Call n8n Workflow: เรียกใช้ Workflow อื่นใน n8n ช่วยให้สามารถรวมหลาย Workflow เข้าด้วยกันและทำงานได้เป็นระบบ

      ตัวอย่าง Workflow ที่ใช้ AI ร่วมกับ Tools

      แต่ถ้าเราคิดว่าจะมีการใช้ Tools หรือเครื่องมือเสริม ให้กับ AI (ซึ่งดีมาก) เค้าแนะนำให้ใช้ AI Agent ประเภท Tools Agent จะดีกว่านะครับ

      Calculator

      ก่อนอื่น ผมต้องบอกว่า ปกติแล้ว LLM มันจะคำนวณคณิตศาสตร์แย่มาก (ถ้าไม่ได้ใช้ coding ช่วย) เช่นผมถามมันให้คำนวณเลขปกติ บางทีมันก็ถูก บางทีมันก็ผิด

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 153

      ถ้าเราลองต่อ Tools เข้าไปกับ AI Agent ที่เป็น Tools Agent เช่นในทีนี้ผมลองต่อ Tools ที่ชื่อว่า Calculator เข้าไป

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 154

      เจ้า AI มันก็จะสามารถใช้เครื่องคิดเลขได้

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 155

      เราสามารถดูที่ Log ด้านขวาได้เลยว่ามีการเรียกใช้ Calculator แล้วจริงๆ

      เรื่องการคำนวณเราก็ยังสามารถถามเป็นคำบรรยายได้เช่นกันนะ มันจะแปลงคำบรรยายของเราไปเป็นสูตรคำนวณทางคณิตศาสตร์เอง

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 156

      SerpAPI (Google Search)

      ผมลองต่อกับ SerpAPI (ใช้ฟรี 100 ครั้ง/เดือน) เพื่อให้มันสามารถ Search หาคำตอบจาก Google Search ได้ด้วย (สมัครง่ายมาก)

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 157

      คราวนี้ลองถามเรื่องใหม่ๆ มันก็จะตอบได้แล้ว เช่น ผมถามเรื่องครูบาหมูเด้ง มันก็ตอบได้

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 158

      Wikipedia

      Tools อีกอันที่ดีและใช้ง่ายมาก คือ Wikipedia แค่ต่อ Tool ตัวนี้เข้าไปเราก็ได้ความรู้มหาศาลจาก Wikipedia มาเป็นเครื่องมือ ซึ่งอันนี้ไม่ต้องระบุ API อะไรเลยด้วย ใช้ง่ายมากๆ

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 159

      Code Tool

      เครื่องมือนี้มีความสามารถที่จะให้ AI ใช้เพื่อรัน Code ที่เรากำหนดเพื่อแก้ไขปัญหาบางอย่าง ที่ใช้บ่อยคือ Code ที่จะทำให้ AI รู้ว่าตอนนี้มันวันที่เท่าไหร่ เวลาเท่าไหร่แล้ว

      ผมสามารถใช้ Code Tool แบบนี้แล้วถามมันได้

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 160

      แต่ถ้า server ที่เรารัน อยู่คนละ timezone กับเรา เราอาจจะต้องระบุ timezone ใน code ให้ถูกต้อง วัน/เวลา จะได้ไม่เพี้ยน

      let now = DateTime.now().setZone("Asia/Bangkok");  
      // ระบุ time zone เป็น "Asia/Bangkok" เพื่อให้ตรงกับเวลาท้องถิ่นของคุณ
      return now.toISO();

      แบบนี้ก็จะใช้ได้แล้ว

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 161

      ซึ่ง Code Tool มันสามารถนำมาใช้แบบ Flexible ได้มากๆ เช่น เราอาจสร้าง Tool ที่นับอักขระในคำแบบเป๊ะๆ ออกมาช่วย AI ก็ได้

      ซึ่งเราสามารถกำหนดความสามารถของมันใน Code Node ได้เต็มที่ (ผมให้ AI เขียนให้หมดเลย)

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 162

      รวมถึงกำหนด Structure ของ Input ที่ต้องการได้ด้วย

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 163

      พอนำไป Chat คุยกับมันดู ก็สามารถตอบได้ถูกต้องแล้วว่า “strawberry” มี r กี่ตัว 😆

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 164

      ปิดบาง Node ชั่วคราว

      เราสามารถ Deactivate บางโหนดได้โดยการกดปุ่ม power ที่โหนดนั้นๆ เช่น บางทีผมไม่ได้อยากให้ใช้ tool บางอัน แต่ขี้เกียจลบออก ก็ปิดเอาได้ (จะขึ้น Deactivated)

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 165

      นำ Chat ไปให้คนอื่นใช้

      เราสามารถนำเอา Chat ไปให้คนอื่นลองใช้งานได้ โดยเข้าไปเลือก Make Chat Publicly Available ในโหนด Chat Trigger อันแรกเลย

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 166

      ทีนี้เราก็เอา URL ไปรันบน Browser ได้เลยครับ (อย่าลืม Active Workflow ด้วยนะ)

      ซึ่งเราอาจตั้ง system message ดีๆ ที่โหนด Ai Agent ได้นะ มันจะได้ตอบได้ตรงใจมากขึ้น

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 167

      เนี่ยมันก็จะเป็นหน้าเว็บ chat เต็มๆ เลย แค่เปิด URL ก็เล่นได้ เจ๋งมะ

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 168

      ตอนต่อไป

      ในตอนถัดไป เราจะมาดูวิธีทำให้ AI Agent ทำงานเป็นทีม โดยเฉพาะลูกเล่นเกี่ยวกับการใช้ Tools โดยเฉพาะการ Call n8n Sub Workflow เพื่อให้ Workflow สามารถทำงานซับซ้อนแบบอัตโนมัติอย่างเต็มรูปแบบ ซึ่งทำให้ AI Agent ของเรา ทรงพลังขั้นสุด!!

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

    • สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation

      ในการสร้าง Workflow ที่ซับซ้อนและต้องการความยืดหยุ่นสูง การควบคุมทิศทางการทำงาน (Control Flow) เป็นหนึ่งในหัวใจสำคัญของระบบ Automation เพราะไม่ใช่ทุกงานที่จะดำเนินไปในเส้นทางเดียวกันเสมอ มีบางสถานการณ์ที่เราจำเป็นต้องแตกแขนง Workflow ออกเป็นหลายเส้นทาง เช่น แยกไปทางใดทางหนึ่งตามเงื่อนไข หรือนำกลับมารวมกันอีกครั้ง

      ในตอนที่แล้ว เราเรียนรู้การจัดการข้อมูลใน Flow ไปแล้ว ในตอนนี้ เราจะมาเรียนรู้วิธีการใช้ Control Flow ใน n8n อย่างละเอียด ซึ่งประกอบไปด้วยการแตกเส้นทางการทำงาน (Splitting), การรวมข้อมูล (Merging), การวนลูป (Looping), การรอคอยเหตุการณ์ (Waiting) และการใช้งาน Sub-workflows ที่จะช่วยให้ระบบ Automation ของคุณทำงานได้อย่างคล่องตัวและมีความยืดหยุ่นมากขึ้น

      พร้อมกันหรือยังครับ? ถ้าพร้อมแล้ว มาดูกันเลย!

      Control Flow คืออะไร?

      Control Flow ใน n8n ช่วยให้คุณกำหนดทิศทางการทำงานของ Workflow ได้ตามเงื่อนไขหรือสถานการณ์ที่กำหนด เช่น การแยกเส้นทางตามเงื่อนไขต่าง ๆ การรวมข้อมูลจากหลายแหล่ง การจัดการกับการวนลูป และการเรียกใช้งาน Sub-workflow การใช้ Control Flow ที่ดีจะทำให้คุณสามารถสร้าง Automation ที่ซับซ้อนและยืดหยุ่นได้อย่างมีประสิทธิภาพ

      เพื่อความสะดวกในการเรียนรู้ เราจะใช้ Mockup Data ที่มีมาให้สำเร็จรูปใน n8n เพื่อประกอบการสอนบทความนี้ ทุกคนจะได้ทำตามได้ง่าย ๆ โดยไม่ต้องเตรียม Data จากที่อื่นให้ยุ่งยาก เราสามารถดึง Mockup Data มาจากโหนด Customer Datastore (n8n training) ได้เลย

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 169

      โดยเลือก option Get All People จะได้ลูกค้ามา 5 คนที่มีมาให้สำเร็จรูปใน n8nในการประกอบการสอนบทความนี้นะครับ ทุกคนจะได้ทำตามได้โดยไม่ต้องไปเอา Data มาจากที่อื่นให้ยุ่งยาก

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 170

      n8n มี Node หลายประเภทที่ช่วยจัดการกับ Control Flow ทำให้ Workflow ของคุณตอบสนองต่อสถานการณ์ต่าง ๆ ได้อย่างราบรื่น เรามาดูกันทีละกลุ่มกันครับ

      Splitting: การแยกเส้นทางด้วยเงื่อนไข

      เราสามารถใช้ If หรือ Switch Node เพื่อแบ่ง Workflow ออกเป็นหลายเส้นทางตามเงื่อนไขที่กำหนด ซึ่งมีการทำงานแตกต่างกันดังนี้:

      • If Node: แยกผลลัพธ์ออกเป็น 2 เส้นทาง (เช่น True/False)
      • Switch Node: แยกผลลัพธ์ออกเป็นหลายเส้นทาง เหมาะกับการทำงานที่มีผลลัพธ์มากกว่า 2 เส้นทาง

      If Node

      ในตัวอย่างนี้ เราจะใช้ If Node เพื่อแยก Workflow ออกเป็น 2 เส้นทาง เช่น หากข้อมูลมีการระบุประเทศไว้ เราจะให้ Workflow ทำงานถัดไปในเส้นทาง A แต่หากไม่มีข้อมูลประเทศ ให้ไปที่เส้นทาง B

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 171

      โดยใน Work Flow จะมีทางแยกออกมาเป็น “true” และ “false” ชัดเจน

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 172

      เส้น True: กรณีค่าประเทศไม่ว่าง เราจะใช้ Sort Node จัดเรียงข้อมูลตามประเทศ

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 173

      เส้น False: กรณีไม่มีค่าประเทศ เราจะใช้ Edit Fields Node แก้ไขข้อมูลให้ระบุว่า “ไม่รู้”

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 174

      ตอนนี้จะได้แบบนี้ เห็นมะ แยกออกมาเป็น 2 เส้นทางชัดเจน

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 175

      Switch Node

      ใช้ในการแบ่งเส้นทางที่มีผลลัพธ์หลายเส้นทาง (เหมาะกับผลลัพธ์มีมากกว่า 2 เส้นทาง)

      สมมติว่าผมเอากรณีจริง ที่ผ่านการเรียงข้อมูลแล้วมาเข้า Switch เล่นๆ ให้ดูว่า

      • ถ้า country เป็น US ให้ผลลัพธ์ออกมาในเส้นทางที่ตั้งชื่อว่า us
      • ถ้า country เป็น UK ให้ผลลัพธ์ออกมาในเส้นทางที่ตั้งชื่อว่า uk
      • แล้วตั้งค่า Fall Back (กรณีที่ไม่ตรงตามเงื่อนไขใดๆ เลย) ให้ออกมาอีกส้นทางนึง
      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 176

      จากนั้นผลที่แยกจาก Switch เราก็สามารถแยก Workflow ออกมาอีกหลายเส้นเลย (อันนี้คือทำเล่นๆ ขำๆ) คราวนี้มีรวมๆ ก็ 4 เส้นทางแล้ว 55

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 177

      Merging: การรวมข้อมูล

      การรวมข้อมูลจากหลายแหล่งเป็นสิ่งสำคัญเมื่อต้องการจัดการข้อมูลที่มาจากหลาย Node หรือหลายแหล่งข้อมูล ใน n8n มีการใช้ Merge Node ที่ยืดหยุ่นและปรับใช้ได้หลายวิธี:

      • Append: นำข้อมูลมาต่อกันในแนวตั้ง โดยอ้างอิงจากชื่อ Field ซึ่งเหมือนกับการใช้ UNION ใน SQL รวมถึงเหมือนกับ Append Query ของ Power Query ด้วย
      • Choose Branch : รวมแล้วเลือกว่าจะเอาผลลัพธ์จากกิ่งไหนออกไปยังผลลัพธ์ ซึ่งดีตรงสามารถรอให้ทุกกิ่งมาพร้อมกันก่อน ค่อยส่งต่อไป Step ถัดไปได้ (ปกติ Node จะรันเส้นบนให้จบก่อนแล้วค่อยเริ่มวิ่งเส้นล่าง)
      • Combine: การรวมข้อมูล 2 ตารางมีหลายวิธี แต่ที่จะเน้น คือ Matching Fields ซึ่งเหมือน SQL Join แบบต่างๆ รวมถึง Merge Query ของ Power Query เช่น:
        • Keep Matches: รวมเฉพาะรายการที่ตรงกัน (เหมือน INNER JOIN)
        • Keep Non-Matches: รวมเฉพาะรายการที่ไม่ตรงกัน
        • Keep Everything: รวมทั้งรายการที่ตรงกันและไม่ตรงกัน (เหมือน OUTER JOIN)
        • Enrich Input 1: เก็บข้อมูลทั้งหมดจาก Input 1 และเพิ่มข้อมูลที่ตรงกันจาก Input 2 (เหมือน LEFT JOIN)
        • Enrich Input 2: เก็บข้อมูลทั้งหมดจาก Input 2 และเพิ่มข้อมูลที่ตรงกันจาก Input 1 (เหมือน RIGHT JOIN)
      • SQL Query : เขียนการรวมด้วยภาษา SQL ได้เลย วิธีนี้จะยืดหยุ่นสุดๆ

      ในตัวอย่าง: ผมจะลองเอาผลลัพธ์จากทั้ง 4 เส้นกลับมารวมกันด้วยการ Append ก่อน

      ซึ่งถ้าคอลัมน์ตรงกันก็จะกลับมารวมกันได้ง่ายๆ แบบนี้ (ถ้าไม่ตรงกันอาจต้องใช้โหนด Rename Keys มาช่วย)

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 178

      จากนั้น ค่อยเอาผลที่ได้มา Combine กับตารางข้อมูลประเทศที่มีข้อมูลว่าแต่ละประเทศอยู่ทวีปไหนและมีพื้นที่เท่าไหร่ การรวมข้อมูลนี้จะคล้ายกับการใช้ VLOOKUP ใน Excel หรือ LEFT JOIN ใน SQL

      โดยผมมีข้อมูลอีกตาราง ที่ระบุว่าแต่ละประเทศ ว่าชื่อเต็มคืออะไร อยู่ทวีปไหน และมีพื้นที่เท่าไหร่ ซึ่งในที่นี้มี 6 ประเทศ

      Country CodeCountry NameContinentArea (sq km)
      USUnited StatesNorth America9,833,520
      UKUnited KingdomEurope243,610
      COColombiaSouth America1,141,748
      THThailandAsia513,120
      JPJapanAsia377,975
      CNChinaAsia9,596,961

      โดยผมใช้โหนดที่ชื่อว่า Code ซึ่งมีความสามารถในการรัน Code ภาษา JavaScript หรือ Python แอบสร้างข้อมูล Mockup ขึ้นมา แบบนี้ (การทำงานของโหนดนี้โดยละเอียดผมจะสอนทีหลัง ตอนนี้ให้ copy code นี้ไปใส่ก่อน ซึ่งจริงๆ เราก็ให้ AI ช่วยเขียนไปก่อนได้)

      // ข้อมูลประเทศ, ทวีป และพื้นที่
      const data = [
        {
          "Country Code": "US",
          "Country Name": "United States",
          "Continent": "North America",
          "Area (sq km)": 9833520
        },
        {
          "Country Code": "UK",
          "Country Name": "United Kingdom",
          "Continent": "Europe",
          "Area (sq km)": 243610
        },
        {
          "Country Code": "CO",
          "Country Name": "Colombia",
          "Continent": "South America",
          "Area (sq km)": 1141748
        },
        {
          "Country Code": "TH",
          "Country Name": "Thailand",
          "Continent": "Asia",
          "Area (sq km)": 513120
        },
        {
          "Country Code": "JP",
          "Country Name": "Japan",
          "Continent": "Asia",
          "Area (sq km)": 377975
        },
        {
          "Country Code": "CN",
          "Country Name": "China",
          "Continent": "Asia",
          "Area (sq km)": 9596961
        }
      ];
      
      // ส่งออกข้อมูลเป็น output ของ node
      return data.map(item => {
        return {
          json: item
        };
      });
      

      เราสามารถเอา Code Node นี้ไปเชื่อมกับ Trigger แรกสุด หรือจะเชื่อมกับ Node ล่าสุดที่เราทำเลยก็ได้ มันจะได้ถูกสั่งให้ทำงานต่อได้ทันทีเช่นกัน

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 179

      ผลลัพธ์ของโหนดนี้จะได้ตารางอ้างอิงของประเทศแบบที่ผมแปะให้ดูเลย

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 180

      คราวนี้เราจะทำคล้ายๆ ว่าจะ Lookup ข้อมูลจากประเทศเหล่านี้แปะกลับไปที่ตารางลูกค้าของเรา (คล้ายๆ VLOOKUP ใน Excel หรือ Left Join ใน SQL)

      ดังนั้นเราจะใช้ Merge Node มาช่วย แต่จะใช้โหมด Combine แบบ Matching Fields Enrich Input 1 (ตารางลูกค้า)

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 181

      ผลลัพธ์ที่ได้จะมี 5 items (ตาม Input1) หน้าตาสุดท้ายได้แบบนี้ ซึ่งคล้ายๆ ผลลัพธ์จากการใช้พวก VLOOKUP ใน Excel แหละ

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 182

      อย่างไรก็ถาม ถ้าเราลองไปดูผลลัพธ์จริงๆ ในกรณีที่หาไม่เจอ เช่น ประเทศ “ไม่รู้” มันจะไม่มี Field จาก Input2 โผล่ออกมาที่ผลลัพธ์เลย (ไม่ได้ขึ้นเป็นค่าว่าง หรือ error ด้วย)

      [
        {
          "id": "23423532",
          "name": "Jay Gatsby",
          "email": "gatsby@west-egg.com",
          "notes": "Keeps asking about a green light??",
          "country": "US",
          "created": "1925-04-10",
          "Country Code": "US",
          "Country Name": "United States",
          "Continent": "North America",
          "Area (sq km)": 9833520
        },
        {
          "id": "23423534",
          "name": "Max Sendak",
          "email": "info@in-and-out-of-weeks.org",
          "notes": "Keeps rolling his terrible eyes",
          "country": "US",
          "created": "1963-04-09",
          "Country Code": "US",
          "Country Name": "United States",
          "Continent": "North America",
          "Area (sq km)": 9833520
        },
        {
          "id": "23423536",
          "name": "Edmund Pevensie",
          "email": "edmund@narnia.gov",
          "notes": "Passionate sailor",
          "country": "UK",
          "created": "1950-10-16",
          "Country Code": "UK",
          "Country Name": "United Kingdom",
          "Continent": "Europe",
          "Area (sq km)": 243610
        },
        {
          "id": "23423533",
          "name": "José Arcadio Buendía",
          "email": "jab@macondo.co",
          "notes": "Lots of people named after him. Very confusing",
          "country": "CO",
          "created": "1967-05-05",
          "Country Code": "CO",
          "Country Name": "Colombia",
          "Continent": "South America",
          "Area (sq km)": 1141748
        },
        {
          "id": "23423535",
          "name": "Zaphod Beeblebrox",
          "email": "captain@heartofgold.com",
          "notes": "Felt like I was talking to more than one person",
          "country": "ไม่รู้",
          "created": "1979-10-12"
        }
      ]

      Waiting: รอคอย

      ใช้ Wait Node เพื่อหยุดการทำงานของ Workflow ชั่วคราว เมื่อ Workflow ถูกหยุดไว้ ข้อมูลจะถูกบันทึกลงในฐานข้อมูล และเมื่อเงื่อนไขที่กำหนดเป็นจริง Workflow จะโหลดข้อมูลกลับมาและดำเนินการต่อไป

      การใช้งาน: มีหลาย Option

      • After Time Interval: หยุดรอตามเวลาที่กำหนด เช่น หยุดรอ 10 นาที แล้วทำงานต่อ
      • At Specified Time: รอจนถึงเวลาที่ระบุ เช่น 31 ธันวาคม เวลา 23:59 น.
      • On Webhook Call: รอจนกว่าจะได้รับการเรียกผ่าน HTTP (Webhook)
      • On Form Submitted: รอจนกว่าจะได้รับข้อมูลจากฟอร์ม

      การใช้งานนี้สามารถใช้เพื่อการควบคุม API Rate Limit หรือรอการตอบกลับจากระบบภายนอกที่จำเป็นต้องรอข้อมูลก่อน ซึ่งจะแสดงให้เห็นในการใช้คู่กับโหนด Loop ในตัวถัดไป

      Looping: การวนลูปการทำงาน

      ปกติแล้ว “การวน Loop” คือการที่เราต้องการให้มีการทำงานซ้ำ ๆ กับข้อมูลทีละรายการไปเรื่อยๆ จนครบรายการที่มีทั้งหมด ซึ่งต้องบอกว่าใน n8n Node ปกติทั่วไปก็ทำแบบนั้นอยู่แล้ว อย่างในบทที่แล้วที่ผมส่ง Line Notify จากข้อมูลที่มีใน Google Sheets 6 รายการ มันก็ส่งทีละรายการ เป็นจำนวนทั้งหมด 6 รอบ เหมือนกับการวน Loop ทีละ item อยู่แล้วนะ

      อ้าว! แล้วเราจะมี Node Loop ไปทำไมอีก? 🤔

      คำตอบก็คือ มันอาจจะมี Node บางตัวที่ไม่ได้มีพฤติกรรมทำงานทีละรายการตามปกติ หรืออาจมีสถานการณ์บางอย่างที่อยากจะทำซ้ำๆ จนกว่าจะได้ตามเงื่อนไขที่ต้องการ

      สถานการณ์ที่พบบ่อย เช่น ผู้ให้บริการบางเจ้าอาจมีการกำหนดว่า ใน 1 ชั่วโมง เรายิง API ไปดึงข้อมูลได้สูงสุดกี่ครั้ง อะไรแบบนี้ (เดี๋ยวเยอะเกิน Server จะรับไม่ไหว) เราก็ต้องมีการควบคุมความถี่ในการส่ง API Request เพื่อเลี่ยงการชนกับ Rate Limit ของ API ได้

      ยกตัวอย่าง เช่น เราสามารถใช้ Loop Over Items เพื่อวนลูปทำงานทีละรายการ และตั้งค่า Wait Node เพื่อให้หยุดรอ 5 วินาที ก่อนจะส่งไปที่ API ในรอบถัดไป

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 183
      • เราเอา Node Loop Over Items มาต่อจาก Output เดิม เพื่อวนทำซ้ำๆ ทีละรายการ (Batch =1)
      • แล้วส่งเข้า Line Notify ส่ง Notify item นั้นๆ (record เดียว)
      • จากนั้นรอ 5 วินาที
      • จากนั้นมันจะวนกลับมา Loop ต่อเพื่อทำ item ถัดไป
      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 184

      ถ้า Loop ทำเสร็จหมดทุก items แล้ว Workflow ก็จะวิ่งออกไปทำงานต่อในกิ่งที่เขียนว่า Done ได้อีกนั่นเอง

      หน้าตาทั้ง Flow เราเป็นแบบนี้

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 185

      สรุป

      การกำหนด Control Flow ใน n8n จะช่วยให้คุณสามารถสร้าง Workflow ที่ซับซ้อนและยืดหยุ่นได้ตามความต้องการ ไม่ว่าจะเป็นการแยกเส้นทาง (Splitting), รวมข้อมูล (Merging), การหยุดรอ (Waiting) หรือการวนลูป (Looping) ซึ่งการใช้ Node เหล่านี้จะทำให้ Workflow ของคุณทำงานได้อย่างมีประสิทธิภาพและตอบโจทย์ทุกสถานการณ์

      ในตอนถัดไป เราจะมาเรียนรู้วิธีการนำ AI Model มาเชื่อมต่อใน Workflow ของคุณ เพื่อสร้าง AI Agent ที่ช่วยให้การทำงานของคุณฉลาดและอัตโนมัติมากขึ้น อย่าพลาดติดตามกันนะครับ!

    • สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น

      n8n เป็นเครื่องมือ Automation ที่ช่วยให้การสร้าง Workflow ที่เชื่อมต่อระบบและบริการต่าง ๆ ได้เป็นเรื่องง่ายขึ้น แต่สิ่งหนึ่งที่มักจะท้าทายสำหรับผู้ใช้คือการจัดการกับข้อมูลภายใน Workflow เนื่องจากข้อมูลที่ไหลเข้ามาอาจอยู่ในรูปแบบที่หลากหลาย หรือมาจากแหล่งที่แตกต่างกัน การจะดึงข้อมูลมาใช้งาน จัดการ แปลง หรือวิเคราะห์ให้ถูกต้องนั้นไม่ใช่เรื่องง่าย และนี่คือที่มาของการทำความเข้าใจเรื่อง “การจัดการข้อมูล” (Data Management) ใน n8n

      EP นี้จะพาคุณไปสำรวจเทคนิคและเครื่องมือที่มีอยู่ใน n8n สำหรับการจัดการข้อมูลตั้งแต่ขั้นพื้นฐาน ไม่ว่าจะเป็นการดึงข้อมูลจากแหล่งต่าง ๆ การแปลงข้อมูลให้ตรงตามที่ต้องการ หรือแม้กระทั่งการสรุปข้อมูลและการสร้างสูตรคำนวณที่ซับซ้อน คุณจะได้เรียนรู้วิธีจัดการข้อมูลในหลากหลายรูปแบบ ไม่ว่าจะเป็นการแก้ไขค่าข้อมูล การกรองเฉพาะข้อมูลที่ต้องการ หรือการรวมข้อมูลเพื่อนำไปใช้งานในขั้นตอนถัดไป

      บทความนี้เหมาะสำหรับทั้งผู้ที่เริ่มต้นใช้งาน n8n และผู้ที่ต้องการเพิ่มความสามารถในการจัดการข้อมูลให้ล้ำลึกมากขึ้น ด้วยการใช้ Node กลุ่ม Data Transformation ซึ่งจะทำให้ Workflow ของคุณมีความยืดหยุ่นและทรงพลังยิ่งขึ้น พร้อมกันหรือยังครับ? ถ้าพร้อมแล้ว เรามาเริ่มต้นกันเลย!

      โครงสร้างของข้อมูลใน n8n

      ข้อมูลที่ถูกส่งผ่านระหว่าง Node ใน n8n จะถูกจัดเก็บในรูปแบบของ Array of Objects ซึ่งเดี๋ยวผมจะขออธิบายให้แบบละเอียดเลย

      Array ใน n8n สำหรับคนที่คุ้นเคยกับ Excel

      ใน Excel เราจะคุ้นเคยกับการทำงานกับข้อมูลในลักษณะของ ตาราง ซึ่งประกอบไปด้วย แถว (Row) และ คอลัมน์ (Column) โดยข้อมูลในแต่ละแถวจะถูกจัดเรียงในรูปแบบของรายการต่างๆ ที่สอดคล้องกับคอลัมน์นั้นๆ เช่น ผลไม้ (รายการสินค้า) , สี, ราคา เป็นต้น

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 186

      Array ใน n8n ก็มีแนวคิดคล้ายๆ กับการจัดเก็บข้อมูลในแถวเหล่านั้นของ Excel เพียงแต่มันจะเก็บข้อมูลในลักษณะของ ลิสต์ของวัตถุ (List of Objects) ที่ผสมผสานกับ ข้อมูล Key กับ Value ที่คู่กัน

      สำหรับ ลิสต์ของวัตถุ (List of Objects) นั้นมีโครงสร้างดังนี้

      =[item1,item2,item3]  
      
      หรือเขียนแบบขึ้นบรรทัดใหม่
      
      =[
          item1,
          item2,
          item3
      ]
      • ใน Python เรียกว่า List
      • ใน Power Query ของ Excel จะเรียกว่า List (แต่ใช้อีกสัญลักษณ์นึง)

      ซึ่งข้อมูลแต่ละรายการ (item ของ List) มักจะถูกเก็บไว้ในรูปแบบของ ข้อมูลที่คู่กัน ระหว่าง คีย์ (Key) กับ ค่า (Value)

      {
          key1: value1,
          key2: value2,
          key3: value3
      }
      • ใน Python เรียกว่า Dictionary
      • ใน Power Query ของ Excel จะเรียกว่า Record (แต่ใช้อีกสัญลักษณ์นึง)

      ความแตกต่างหลักระหว่าง Array ใน n8n กับตาราง Excel ทั่วไป

      Array สามารถซ้อนข้อมูลมากกว่าหนึ่งอันในหนึ่งรายการ (Nested Data)
      ปกติแล้ว… ใน Excel ข้อมูลมักจะถูกเก็บในเซลล์อย่างเรียบง่าย แต่ใน n8n ข้อมูลหนึ่งรายการใน Array สามารถมีข้อมูลซับซ้อนได้ ซึ่งสามารถเปรียบเทียบกับว่าในช่อง Excel มี “ก้อนข้อมูล” ซ้อนอยู่ข้างใน แทนที่จะเป็นค่าเดียว

      ตัวอย่างเช่น

      [
        {
          "fruit": "apple",
          "color": "red",
          "price": 10
        },
        {
          "fruit": "banana",
          "color": "yellow",
          "price": 5
        }
      ]
      

      ถ้าเปรียบเทียบกับ Excel:

      • ให้คิดว่า แต่ละแถว ใน Excel คือ แต่ละ item ของ List ของ n8n
      • ชื่อแต่ละคอลัมน์ ใน Excel ก็จะคล้ายกับ คีย์ ในแต่ละออบเจ็กต์ เช่น fruit, color, price
      • ส่วน ค่าของเซลล์ ก็คือ ค่า (Value) ของคีย์เหล่านั้น เช่น “apple”, “red”, 10
        (ถ้าเป็นข้อความก็จะครอบด้วยเครื่องหมายคำพูด)

      แบบนี้คือเป็น List ที่มี 2 item โดยแต่ละ item คือ record ที่มี 3 คอลัมน์ (key) ซึ่งหน้าตาก็จะสามารถเข้าใจได้ว่าคล้ายๆ ตาราง Excel ที่ผมให้ดูตั้งแต่แรกนั่นแหละ

      แต่ถ้าจะให้เห็นแบบชัดๆ จริงๆ ใน Excel ต้องไปดูใน Power Query จึงจะสามารถ Get Data from JSON เพื่ออ่านข้อมูลแบบนี้ให้เห็นภาพได้

      ตอนแรกข้อมูล JSON เมื่อกี๊ ถือเป็น List ที่มี 2 item อยู่ข้างใน ซึ่งแต่ละ item คือ record ที่มี 3 key-value คู่กัน (โดยผม preview ให้ดูด้านล่าง)

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 187

      Array ที่มาใน n8n

      ทีนี้ข้อมูลที่มาจริงๆ ใน n8n มันก็อาจมีทั้งมาจากในรูปแบบของตาราง (แบบ Spreadsheet) ยกตัวอย่างเช่น ถ้าผมลองดึงข้อมูลจาก Google Sheets ต้นฉบับแบบนี้

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 188

      โดยที่เราจะใช้ Node Google Sheets เพื่อ Get Rows in Sheets

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 189

      แล้วเราอย่าลืมไป Enable API ของ Google Sheets บน Google Cloud Console ด้วยนะ

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 190

      แล้วก็เอา Client ID กับ Client Secret อันเดิมที่เคยทำในตอนที่แล้ว มากรอกได้เลย ไม่ต้องสร้างใหม่แล้ว

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 191

      จากนั้นเลือกข้อมูลจาก Sheet ที่ต้องการ มันจะเห็นแบบนี้ ซึ่งถ้าใน Output เราดูในมุมมองของ Table มันก็จะเห็นเป็นตารางเหมือนใน Google Sheets นั่นแหละ (แต่มี Row Number โผล่มาด้วย โดยที่แถวแรกสุดกลายเป็นหัวตารางไป)

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 192

      แต่ถ้าดูในมุมมของ JSON จะเห็นแบบนี้ ซึ่งจะเห็นว่าหัวตารางก็คือ Key และ Data คือส่วนของ Value ของ Record นั่นเอง

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 193

      และถ้าดูแบบ Schema (โครงสร้างข้อมูลอธิบายข้อมูลในตารางว่ามี field อะไรบ้าง) จะเห็นแบบนี้

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 194

      ทั้งหมด มันคือ List ที่มี Record เดียว (ที่มีหลาย key-value)

      ซึ่งข้อมูลที่ถูกส่งออกมาจาก Node Google Sheets นี้ ตอนนี้ถือว่ามี 6 items

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 195

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

      เช่น ถ้าผมต่อ Line Notify ออกไป มันจะยิงไป 6 ครั้งเลย

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 196

      นี่ให้ดู มันยิง 6 ครั้งจริงๆ

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 197

      ซึ่งถ้าเราอยากทำการแก้ไขข้อมูล หรือ คัดเลือกข้อมูล เราก็ต้องใช้พวก Node ในกลุ่ม Data Transformation

      Node กลุ่ม Data Transformation เพื่อแก้ไขข้อมูล

      การแก้ไข/เพิ่มข้อมูลด้วย Edit Fields

      เมื่อเราต้องการแก้ไขข้อมูลที่ได้รับเข้ามาใน Workflow เราสามารถใช้ Node ในกลุ่ม Data Transformation เช่น Edit Fields เพื่อเพิ่มหรือแก้ไขข้อมูลได้ตามต้องการ

      ยกตัวอย่างเช่น การเปลี่ยนชื่อสินค้าทั้งหมดให้เป็นตัวพิมพ์ใหญ่ เราสามารถใช้ Node Edit Fields พร้อม Expression เพื่อจัดการได้ โดยการใช้ฟังก์ชัน toUpperCase()

      Tips : ผมใช้วิธีเติม . ต่อท้ายชื่อ field ปกติ แล้วเลือก choice ของ method ที่ชื่อว่า toUpperCase() มันก็จะสามารถแปลงค่าใน field product ให้เป็นพิมพ์ใหญ่ได้ง่ายๆ

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 198

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

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 199

      แม้ว่าจริงๆ เราจะแก้การดึงข้อมูลที่จะส่ง Line ให้ไปเอาจาก Node Google Sheets ได้ (ฝั่ง Input ตัวที่ 2) แต่ผมว่าเราใช้วิธีกลับไปเลือก Include Other Input Fields ในโหนด Edit Fields ดีกว่าครับ

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 200

      นอกจากนี้ ใน Edit Fields เราก็สามารถเพิ่ม Field ใหม่ได้ด้วย เช่น เราสามารถกด Add Field แล้วตั้งชื่อ Field แล้วใส่ข้อมูล (fixed) หรือ สูตร (expression) ได้เลย

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 201

      ในที่นี้ผมเขียนสูตรคำนวณยอดขาย สมมติว่าผลไม้ราคาชิ้นละ 50 บาทง่ายๆ ก็คำนวณได้ดังนี้

      • วิธี คือ ลาก Quantity ลงมา จะได้ {{ $json.quantity }}
      • จากนั้นเราแก้สูตรในส่วนของ {{ … }} นะครับ เพราะว่าทุกอย่างใน {{ … }} จะมองว่าเป็นภาษา JavaScript
      • ใช้สูตรลักษณะแบบนี้เพื่อคำนวณได้เลย
      {{ $json.quantity *50}}

      ผลลัพธ์ที่ Output ออกมาจาก Node ก็จะมีคอลัมน์ใหม่ด้วย และเราก็สามารถเอาไปส่ง Line ต่อใน Step ต่อไปได้เลย

      ตัวอย่าง Output JSON ที่ได้

      [
        {
          "row_number": 2,
          "orderid": 123,
          "customer": "A",
          "product": "APPLE",
          "quantity": 3,
          "SalesAmt": 150
        },
        {
          "row_number": 3,
          "orderid": 123,
          "customer": "A",
          "product": "BANANA",
          "quantity": 2,
          "SalesAmt": 100
        },
        {
          "row_number": 4,
          "orderid": 124,
          "customer": "B",
          "product": "ORANGE",
          "quantity": 5,
          "SalesAmt": 250
        },
        {
          "row_number": 5,
          "orderid": 124,
          "customer": "B",
          "product": "MANGO",
          "quantity": 1,
          "SalesAmt": 50
        },
        {
          "row_number": 6,
          "orderid": 124,
          "customer": "B",
          "product": "GRAPE",
          "quantity": 4,
          "SalesAmt": 200
        },
        {
          "row_number": 7,
          "orderid": 125,
          "customer": "A",
          "product": "PEAR",
          "quantity": 6,
          "SalesAmt": 300
        }
      ]

      การสรุปข้อมูล ด้วย Summarize

      การสรุปข้อมูลใน n8n สามารถทำได้ง่าย เช่น การสรุปยอดขายต่อ Order ID ซึ่งคล้ายกับการใช้ Pivot Table ใน Excel หรือการ Group By ใน Power Query ทำให้ชาว Excel เข้าใจได้ไม่ยาก

      สมมติผมอยากจะทำการสรุปข้อมูลจากหลายๆ Item เข้าด้วยกัน ตาม OrderId กับ ลูกค้า แล้วอยากจะสรุปว่าทำยอดขายได้กี่บาท และ มีการซื้อสินค้ากี่ประเภท ผมทำได้ดังนี้

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 202

      ตัวอย่าง Output JSON ที่ได้

      [
        {
          "customer": "A",
          "orderid": "123",
          "sum_SalesAmt": 250,
          "unique_count_product": 2
        },
        {
          "customer": "A",
          "orderid": "125",
          "sum_SalesAmt": 300,
          "unique_count_product": 1
        },
        {
          "customer": "B",
          "orderid": "124",
          "sum_SalesAmt": 500,
          "unique_count_product": 3
        }
      ]

      การคัดเลือกข้อมูลด้วย Filter

      หากเราต้องการคัดเลือกข้อมูลเฉพาะรายการที่ตรงตามเงื่อนไข เช่น ยอดขายเกิน 300 บาท สามารถใช้ Node Filter ได้ ซึ่งจะทำให้ Workflow สามารถเลือกเฉพาะข้อมูลที่เราต้องการไปใช้ในขั้นตอนถัดไป

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 203

      จำนวน item ที่เหลือรอดไปก็ (อาจ) จะน้อยลง นี่คือ Concept ของการ Filter

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 204

      ตัวอย่าง Output JSON ที่ได้

      [
        {
          "customer": "A",
          "orderid": "125",
          "sum_SalesAmt": 300,
          "unique_count_product": 1
        },
        {
          "customer": "B",
          "orderid": "124",
          "sum_SalesAmt": 500,
          "unique_count_product": 3
        }
      ]

      รวบข้อมูลด้วย Aggregate

      สุดท้ายหากต้องการรวบข้อมูลทุกแถวเข้าด้วยกันเพื่อส่งออกเป็นข้อความเพียงข้อความเดียว เราสามารถใช้ Node Aggregate เพื่อช่วยในการรวบข้อมูลได้ ซึ่งเป็นวิธีที่ทำให้ Workflow ของเรามีความสะดวกและเรียบง่ายมากขึ้น

      สมมติผมอยากจะรวบข้อมูลส่ง Line แค่ Message เดียวเลย ผมก็อาจจะใช้โหนด Aggregate มาช่วยก็ได้

      ซึ่งสามารถ Aggregate Data ทั้งหมดทุกแถว ทุก Field เข้าเป็น List เดียว (ชื่อ data)เลยแบบนี้ก็ได้

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 205

      ถ้าใช้ all item data หน้าตา json จะเป็นแบบนี้

      [
        {
          "data": [
            {
              "customer": "A",
              "orderid": "125",
              "sum_SalesAmt": 300,
              "unique_count_product": 1
            },
            {
              "customer": "B",
              "orderid": "124",
              "sum_SalesAmt": 500,
              "unique_count_product": 3
            }
          ]
        }
      ]

      หรือจะ Aggregate แยก Field แบบนี้ก็ได้ (เลือกทีละ Field ได้เลย)

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 206

      ถ้าใช้ individual field หน้าตา json จะเป็นแบบนี้

      [
        {
          "customer": [
            "A",
            "B"
          ],
          "orderid": [
            "125",
            "124"
          ],
          "sum_SalesAmt": [
            300,
            500
          ],
          "unique_count_product": [
            1,
            3
          ]
        }
      ]

      เดี๋ยวผมลองใช้การ Aggregate แบบ all item data นะครับ เพราะผมคิดว่าน่าจะสะดวกกับหลายๆ เคสเลยถ้าเราใช้มันได้

      เรื่องของเรื่องคือ มันน่าจะต้องเขียนสูตร JavaScript ซึ่งผมเขียนไม่เป็น 😆

      แต่ไม่เป็นไร ผมสามารถไปถาม น้อง AI Chatbot เช่น ChatGPT ว่าจะต้องเขียนสูตรใน expression ของ n8n ยังไง ถึงจะทำให้รับ Input ที่ผมมี แต่สามารถส่ง output ออกมาสวยงามอ่านง่าย (ChatGPT ของผมชื่อว่าน้องฟ้า)

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 207

      น้อง AI เค้าแนะนำเขียน Expression แบบนี้

      ข้อมูลมีดังนี้
      {{ $json.data.map(item => 
      `Customer: ${item.customer}, Order ID: ${item.orderid}, Sales Amount: ${item.sum_SalesAmt}, Unique Products: ${item.unique_count_product}`).join('\n') }}
      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 208

      สุดท้ายออกมาแบบนี้ครับ สวยงาม

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 209

      ตอนต่อไป

      หลังจากที่เราได้เรียนรู้วิธีการจัดการข้อมูลใน Workflow ด้วย n8n กันแล้ว ในตอนต่อไป เราจะเจาะลึกยิ่งขึ้นไปอีก กับการควบคุมการไหลของข้อมูล (Control Flow) ที่เป็นหัวใจสำคัญในการสร้าง Workflow ที่ซับซ้อนขึ้น เช่น การใช้ If Node เพื่อสร้างเงื่อนไขต่าง ๆ หรือการใช้ Switch Node เพื่อแตกสายการทำงานออกไปในหลายทิศทาง นอกจากนี้ เรายังจะได้สำรวจการวน Loop เพื่อจัดการกับข้อมูลจำนวนมากได้อย่างอัตโนมัติและมีประสิทธิภาพ

      ถ้าคุณอยากจะพัฒนา Workflow ของคุณให้ทำงานได้อย่างลื่นไหลและยืดหยุ่นมากขึ้น ห้ามพลาดตอนต่อไป! เราจะมาเรียนรู้เทคนิคสำคัญที่จะช่วยให้คุณสามารถจัดการกับการควบคุมข้อมูลอย่างชาญฉลาด เตรียมพบกับความท้าทายใหม่ ๆ ที่จะช่วยยกระดับการทำงานของ n8n ไปอีกขั้น แล้วเจอกันใน EP ถัดไปครับ!

    • สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ

      ในโลกของการทำงานแบบอัตโนมัติ (Automation) การเชื่อมต่อแอปพลิเคชันและระบบออนไลน์ต่างๆ ผ่าน API กลายเป็นสิ่งจำเป็นมากขึ้นเรื่อยๆ ไม่ว่าจะเป็นการส่งข้อมูลข้ามแอป ตรวจสอบสถานะ หรือดึงข้อมูลเพื่อประมวลผล หลายๆ บริการ เช่น Gmail, Google Sheets, หรือ OpenAI ต่างก็มี API ที่เปิดให้เราสามารถเข้าถึงและใช้งานได้อย่างง่ายดาย

      ในตอนที่แล้ว เราได้เรียนรู้เกี่ยวกับการติดตั้งและการเริ่มต้นใช้งาน n8n ซึ่งเป็นเครื่องมือที่ช่วยให้เราสามารถสร้าง Workflow Automation ได้โดยไม่ต้องเขียนโค้ดเลย (No-Code) และยังมีฟีเจอร์เด่นในการเชื่อมต่อกับแอปพลิเคชันต่างๆ ผ่าน API ด้วย ในตอนที่สองนี้ เราจะพาคุณเข้าสู่หัวใจหลักของการทำงานกับ API และวิธีการตั้งค่าการเชื่อมต่อกับแอปยอดนิยม เช่น Google Drive, Gmail, Google Sheets, และ Line ผ่าน n8n อย่างละเอียด

      นอกจากนี้เรายังจะสาธิตการสร้าง Workflow อัตโนมัติที่ใช้ API แบบง่ายๆ ที่จะช่วยให้คุณแจ้งเตือนการอัปโหลดไฟล์ใหม่ใน Google Drive ผ่าน Line ได้ ซึ่งการสร้าง Workflow ที่เชื่อมโยงหลายแอปพลิเคชันนี้ไม่เพียงแต่จะช่วยให้การทำงานของคุณเป็นระบบมากขึ้น แต่ยังประหยัดเวลาการทำงานแบบซ้ำซ้อนอีกด้วย

      พร้อมที่จะเรียนรู้วิธีการเชื่อมต่อ API และสร้าง Automation แบบเต็มรูปแบบไปกับ n8n แล้วหรือยัง? ถ้าพร้อมแล้ว ไปกันเลยครับ!

      API คืออะไร?

      API หรือ Application Programming Interface เป็นชุดคำสั่งที่ช่วยให้แอปพลิเคชันหรือระบบต่างๆ สามารถสื่อสารและทำงานร่วมกันได้ โดยไม่ต้องให้ผู้ใช้มองเห็นกระบวนการเบื้องหลังที่ซับซ้อน API ทำหน้าที่เป็น “สะพาน” เชื่อมต่อระหว่างโปรแกรมเพื่อดึง ส่ง หรือจัดการข้อมูลได้อย่างรวดเร็วและมีประสิทธิภาพ

      การใช้ API เป็นฟีเจอร์สำคัญที่ทำให้ n8n สามารถเชื่อมต่อกับบริการออนไลน์ต่างๆ ได้ ไม่ว่าจะเป็นแอปพลิเคชันยอดนิยมอย่าง Google Drive, Gmail, Google Sheets, Open AI, Line ที่มี Node สำเร็จรูปให้ใช้งานใน n8n ทำให้การตั้งค่าและใช้งาน API เป็นเรื่องง่าย

      นอกจากการใช้งาน Node สำเร็จรูปแล้ว เรายังสามารถเชื่อมต่อกับบริการที่ไม่มี Node สำเร็จรูปได้ ด้วยการใช้ HTTP Request Node ซึ่งช่วยให้เราตั้งค่าการเชื่อมต่อ API ได้ตามต้องการใกล้เคียงกับการเขียนโปรแกรมเองเลย

      API Key กุญแจสำคัญในการใช้ API

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

      การขอรหัส API Key

      ก่อนอื่นเราต้องสร้าง API Key จากบริการที่เราต้องการเชื่อมต่อ ซึ่งขั้นตอนจะแตกต่างกันไปในแต่ละบริการ (ความยากง่ายต่างกัน) เช่น สำหรับ Google Drive เราสามารถรับ API Key ได้จาก Google Cloud Console แต่สำหรับ OpenAI เราจะต้องสร้าง API Key จาก OpenAI Dashboard เป็นต้น

      ถ้าใน n8n มี Node ของบริการนั้นๆ อยู่แล้ว การเข้าไปใน Node นั้นๆ มักจะมีสิ่งที่เรียกว่า Credentials ให้ระบุ ซึ่งเป็นการกำหนดการเข้าถึงบริการนั้นๆ และจะมี Document บอกวิธีการไว้โดยละเอียดเลย

      Work Flow อัตโนมัติที่จะทำในบทความนี้

      สมมติว่า ผมอยากจะให้มีระบบอัตโนมัติที่สามารถแจ้งเตือนว่า มีการ Upload ไฟล์ใหม่เข้ามาใน Folder ของ Google Drive ที่กำหนดเรียบร้อยแล้ว โดยสามารถแจ้งเตือนเราผ่านทาง Line ได้ภายใน 1 นาทีที่มีการวางไฟล์

      ดังนั้นเราจะต้องมีการเชื่อมต่อ API กับ Google Drive และ API ของ Line ให้ได้ ซึ่งมาดูวิธีการเชื่อมต่อทีละตัวกันครับ

      เชื่อมต่อกับ Google Drive

      เราจะเริ่มจากเริ่มต้น Flow ด้วย Node ที่ชื่อว่า Google Drive Trigger ซึ่งมีความสามารถในการ Run Flow อัตโนมัติ เมื่อเกิดเหตุการณืบางอย่างใน Google Drive

      เราสามารถอ่าน Docs เพื่อดูรายละเอียดการตั้งค่าเพื่อเชื่อมต่อ API ไปยัง Google Drive โดยใช้ OAuth2 single service ซึ่งปลอดภัยและทำได้ง่ายกว่าวิธีอื่น

      การต่อ API กับ Google ครั้งแรกอาจจะยุ่งยากหน่อยนะ แต่ว่ามันจำเป็นจริงๆ และวิธีนี้ใช้ได้กับ Google Service น่าจะเกือบทุกตัวเลยล่ะ ดังนั้นทำเถอะ 😆
      (ทำครั้งเดียว ครั้งต่อไปที่จะต่อผ่านบริการเดิมก็ Login ง่ายๆได้เลย)

      ขั้นตอนการสร้าง API / Client ID และ Client Secret กับ Google

      1. Login ไปที่ Google Cloud Console และสร้าง Project ใหม่ ตั้งชื่อ Project ตามใจชอบ เช่น “sira-n8n-tutorial”
      2. ไปที่ APIs & Services แล้วกด +ENABLE APIS AND SERVICES จากนั้นเลือก Google Drive API แล้วกด Enable
      3. สร้าง Credentials โดยเลือกประเภทเป็น User Data
      4. ตั้งชื่อแอป เช่น “n8n” ใส่ข้อมูล Email แล้วกด Save and Continue
      5. ที่ขั้นตอน OAuth Client ID เลือกเป็น Web Application
      6. กลับไปที่ n8n และสร้าง Credentials ใหม่ใน Node Google Drive Trigger จะมีข้อมูล OAuth Redirect URL ให้เรานำไปกรอกใน Google Cloud Console ในส่วนของ Authorized Redirect URIs
      7. ต้องกด Publish App ใน Google Console ด้วย ไม่งั้นเราจะ Login ไม่ผ่าน

      ดูรูปประกอบแต่ละขั้นตอนที่สำคัญกันครับ

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 210
      สร้าง Project ใหม่ขึ้นมา ตั้งชื่อตามใจชอบ เช่น ของผมใช้ sira-n8n-tutorial
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 211
      เลือกทำงานกับ Project ที่เราสร้างขึ้นมา (บางทีเรามีหลาย Project ต้องเลือกให้ถูกอัน)
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 212
      จากนั้นกดปุ่มที่เขียนว่า APIs & Services แล้วกด +ENABLE APIS AND SERVICES
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 213
      จากนั้นเลือก Google Drive API แล้ว Enable ซะ
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 214
      จากนั้นกด Create Credentials (ซึ่งอันนี้แหละที่จะได้พวก API Key มา)
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 215
      จากนั้นเลือกประเภทเป็น User Data แล้ว next จากนั้นตั้งชื่อ app ว่าอะไรก็ได้ เช่น n8n ก็ได้ แล้วใส่พวก email ลงไป แล้วกด Save and Continue
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 216
      กด Create New Credentials ใน Node Google Drive Trigger ของ n8n ก่อน
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 217
      แล้วเราจะได้ OAuth Redirect URL ที่จะต้องเอากลับไปกรอกใน Google Cloud Console API
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 218
      เอาข้อมูล Call Back URL กลับไปกรอกใน Authorized redirect URIs แล้วกด create จากนั้นกดปุ่ม Done
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 219
      แล้วกลับมาหน้า Credentials โดยเลือก menu ด้านซ้าย แล้วจากนั้นกด Edit ที่ OAuth 2.0 Client IDs ที่เราสร้างขึ้นมา
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 220
      จะได้ Client ID และ Client Secret ที่จะต้องเอากลับมากรอกใน n8n
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 221
      สำคัญมาก อย่าลืมกด Publish App ด้วย ไม่งั้นเราจะ Login ไม่ผ่าน

      การตั้งค่าใน n8n หลังจากได้ Client ID กับ Client Secret

      เราจะต้องนำ Client ID และ Client Secret ที่ได้จาก Google Console API กลับมากรอกใน n8n และกด Sign in (อย่าลืม Publish App ใน Google Console ก่อน)

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 222

      จากนั้น Google จะเตือนว่า App มันอาจจะอันตราย แต่เราไม่สน ให้เรากด Advanced แล้วลุยต่อ

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 223

      แล้วให้สิทธิ์ n8n ในการเข้าถึงข้อมูลตามความเหมาะสม (ผมให้หมดเลย)

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 224

      ถ้าทำสำเร็จ จะขึ้น Account Connected สีเขียวแบบนี้ เย้!

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 225

      ทดสอบวางไฟล์ใน Folder แล้วดึงข้อมูล

      สมมติผมไปสร้าง Folder ใน Google Drive ชื่อว่า n8n-test แล้วใส่ไฟล์รูปเข้าไปอันนึง

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 226

      จากนั้นลองมากรอกรายละเอียด Folder ที่ต้องการจะ Monitor แล้วกด Fetch Test Event ว่าอ่านไฟล์ได้จริงไหม จะพบว่ามันมองเห็นไฟล์ใน Folder ที่เราต้องการได้จริง

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 227

      เชื่อมต่อกับ Line

      การเชื่อมต่อกับ Line Notify เพื่อตั้งค่าการแจ้งเตือนเมื่อมีไฟล์ใหม่ถูกอัปโหลดใน Google Drive สามารถทำได้ง่ายๆ เช่นกัน โดยเข้าไปลงทะเบียนบริการที่ Line Notify และกรอกรายละเอียดตามที่ต้องการ

      ป.ล. ในที่นี้เราจะใช้ Line Notify ไปก่อนนะครับ (แม้บริการนี้จะใช้ได้ถึงแค่ 31 มีค. 2025 ก็ตาม ไว้ในอนาคตค่อยมาสอนวิธีเชื่อม Line Messaging API อีกที)

      ซึ่งก็ต้องมากำหนดพวก Credentials เช่นกัน แต่ว่ามันจะง่ายกว่าของ Google เยอะเลย

      วิธีการทำได้ดังนี้

      1. กรอก Service URL และ Callback URL ซึ่งได้จาก n8n คล้ายกับการตั้งค่า Google Drive
      2. เมื่อสร้าง Service เสร็จแล้ว ให้นำ Client ID และ Client Secret มากรอกใน n8n จากนั้นกดเชื่อมต่อ
      3. เลือกว่าจะให้แจ้งเตือนใน 1-on-1 Chat หรือในกลุ่มที่ต้องการ

      เมื่อเชื่อมต่อสำเร็จ เราจะเห็นสถานะ Connected สีเขียว พร้อมตั้งค่าให้แจ้งเตือนการอัปโหลดไฟล์ใหม่ใน Google Drive ผ่าน Line ได้

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 228
      กรอกรายละเอียดที่จำเป็นลงไป (ใส่ Service URL และ Callback URL เป็นตัวที่ copy มาจาก n8n คล้ายๆ ของ Google เลย จากนั้นกด Agree and continue แล้วกด Add

      จากนั้นไปเช็ค Mail เพื่อกด Link เพื่อ Verify Email ถึงจะสำเร็จ

      พอกลับมาหน้า https://notify-bot.line.me/my/services/ แล้วจะมี Manage registered services ให้เราเลือกตัวที่เราสร้างไว้ จะมี Client ID และ Client Secret คล้ายๆ ของ Google

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 229

      ให้เอากลับมากรอกใน n8n Credentials ได้เลย จากนั้นกด Connect แล้วเลือกว่าจะให้ Notify ไปที่ไหน

      จะเป็น 1-on-1 Chat หรือเป็น Group ไหนก็เลือกไป แล้วกด Agree

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 230

      พอสำเร็จก็จะขึ้น Connect สีเขียวเหมือนกัน

      แล้วพอกลับมาหน้าหลัก เดี๋ยวเราจะลองให้แจ้งเตือน โดยกำหนดข้อความได้ง่ายๆ ด้วยการพิมพ์ + ลางวาง data ส่วนที่ต้องการ

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 231

      พอ Test แล้วก็จะมี Line Notify ส่งมาจริงๆ

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 232

      กำหนดให้มัน Monitor ตลอดเวลา โดย Active Workflow

      การทำงานอัตโนมัติด้วย n8n

      เมื่อเชื่อมต่อทุกอย่างเรียบร้อยแล้ว เราสามารถตั้งค่าให้ Workflow ทำงานอัตโนมัติ โดยให้ Google Drive Trigger ตรวจสอบการอัปโหลดไฟล์ใหม่ และให้ส่งการแจ้งเตือนไปที่ Line ภายใน 1 นาที

      สิ่งสำคัญคือ ต้องกดให้ Workflow Active ด้วย เพื่อให้ Workflow ทำงานตลอดเวลาที่เครื่องเราเปิด n8n เอาไว้อ่ะนะ (ถ้าไม่อยากเปิดเครื่องตัวเอง อันนี้แหละที่ต้องมาเช่า Server บน Cloud ซึ่งจะสอนอีกทีในตอนต่อๆ ไปนะ)

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 233

      จากนั้นลองโยนไฟล์ใหม่เข้าไปใน Folder รอประมาณไม่เกิน 1 นาที มันควรจะมีแจ้งเตือนมาที่ Line

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 234

      นี่ไง มาละ

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 235

      Copy Workflow ให้เพื่อนได้

      Workflow ที่เราทำนั้น เราสามารถ Save Bkup ไว้ใช้ส่วนตัว หรือ Copy ให้เพื่อนก็ได้สบายๆ เลยนะ

      เพราะที่มุมขวาของ Workflow มันจะมีปุ่ม … ที่ให้เรา Download Workflow ออกมาเป็นไฟล์ JSON ได้

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 236

      ซึ่งใน JSON จะไม่ได้เก็บรายละเอียด Credentials ไว้ จึงมั่นใจได้ในความปลอดภัยในการแชร์ Workflow ให้คนอื่นครับ 😉

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 237

      ตอนต่อไป

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

      นอกจากนี้เราจะมาดูตัวอย่าง Workflow ที่น่าสนใจ เช่น การดึงข้อมูลจาก Google Sheets มาประมวลผล หรือการสร้างระบบอัตโนมัติที่มีการเชื่อมต่อกับ API หลายๆ ตัวใน Workflow เดียวกัน ทั้งหมดนี้จะช่วยให้คุณเห็นภาพชัดเจนว่า n8n สามารถทำให้การทำงานที่ซับซ้อนกลายเป็นเรื่องง่ายได้อย่างไร

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

      พร้อมลุยไปกับการทำ Automation ให้สมบูรณ์แบบในตอนต่อไป! ติดตามเราได้เลย แล้วพบกันครับ!

    • สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก

      ปัจจุบันกระแส Automation กำลังมาแรง เครื่องมือต่างๆ ที่ช่วยทำให้การทำงานเป็นอัตโนมัติมีมากมาย เช่น Zapier, Make, หรือ Power Automate แต่ยังมีอีกหนึ่งเครื่องมือที่เจ๋งไม่แพ้กัน แถมยัง ฟรี และ ยืดหยุ่น มากกว่า นั่นคือ n8n

      n8n คืออะไร?

      n8n (อ่านว่า “n-eight-n”) เป็นเครื่องมือที่ช่วยสร้าง Automation Workflow แบบ No-Code (ไม่ต้องเขียนโค้ด) หรือ Low-Code (เขียนโค้ดเล็กน้อย) โดยผู้ใช้สามารถออกแบบการทำงานเชื่อมต่อแอปพลิเคชันต่างๆ ผ่านการ ลาก-วางโหนด (Node) ที่เชื่อมโยงการทำงานระหว่างแอปต่างๆ เช่น Gmail, Google Sheets, Line, Notion หรือแม้แต่ AI Models เช่น OpenAI GPT ได้ง่ายๆ

      หมายเหตุ : ถ้าใครเคยผ่านบทความ ComfyUI ที่ใช้ gen รูป AI มา ก็จะเข้าใจ n8n ได้ไม่ยากเลย

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 238

      โดยเราสามารถออกแบบการทำงาน Automation โดยเลือกเชื่อมต่อ Node ที่มีอยู่มากมาย เชื่อมต่อกับแอปพลิเคชันต่างๆ ได้หลากหลาย เช่น Gmail, Google Sheets, Line, Notion, หรือแม้กระทั่งการเชื่อมต่อกับ AI Model เช่น OpenAI GPT, Claude หรือ API ของเราเอง

      นี่คือตัวอย่างบางส่วน (จากทั้งหมดมากกว่า 1,000 integrations)

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 239

      นอกจากนี้ n8n ยังมี Template ตัวอย่างมากมายกว่า 1,000 แบบ (https://n8n.io/workflows/) ให้คุณดาวน์โหลดไปใช้งานได้ทันที ซึ่งช่วยประหยัดเวลาและเปิดโอกาสให้คุณสร้าง Automation ได้รวดเร็วขึ้น

      แถมยังเลือกดูตาม Creator ที่เราสนใจได้ด้วย เช่น https://n8n.io/creators/max-n8n/

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 240

      หรือของผมเองก็มี (เดี๋ยวจะเพิ่ม Template ให้เรื่อยๆ นะ) https://n8n.io/creators/siraekabut/

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 241

      รูปแบบการใช้งาน n8n

      • Cloud (ผ่าน n8n.io): ไม่ต้องตั้งค่าใดๆ เพียงสมัครใช้งานก็สามารถสร้าง Automation ได้ทันที มีค่าใช้จ่าย แต่สามารถทดลองใช้งานฟรี (แต่อย่าลืมกดยกเลิกล่ะ 555)
      • Self-Hosted (ติดตั้งใช้งานเอง): สำหรับผู้ที่ต้องการควบคุมระบบอย่างเต็มที่ n8n สามารถติดตั้ง n8n ได้แบบฟรีๆ บนคอมพ์ตัวเอง เซิร์ฟเวอร์ส่วนตัว หรือบริการ Cloud เช่น Docker หรือ npm โดยไม่มีข้อจำกัดในการรัน Workflow เรียกได้ว่าเป็นตัวเลือกที่ดีมากๆ สำหรับสายประหยัด!

      ข้อดีของ n8n

      จุดเด่นของ n8n อยู่ที่ ความยืดหยุ่นและความคุ้มค่า ซึ่งแตกต่างจากเครื่องมือ Automation อื่นๆ ที่อาจมีข้อจำกัดในการเชื่อมต่อแอปหรือคิดค่าบริการตามการใช้งาน n8n ไม่ได้จำกัดความซับซ้อนของ Workflow คุณจะออกแบบการทำงานให้เชื่อมต่อกี่แอป กี่ขั้นตอนก็ได้ โดยไม่ต้องกังวลเรื่องค่าใช้จ่ายที่เพิ่มขึ้น

      • ยืดหยุ่นสูง Customize ได้เยอะ ใครก็สามารถเริ่มใช้งานได้ ไม่จำเป็นต้องเป็นโปรแกรมเมอร์ แต่ถ้าเขียนโปรแกรมภาษา JavaScript ได้ (ใช้ AI ช่วยก็ได้) ก็ยิ่งสามารถ Customize ได้ดีขึ้นอีก
      • ประหยัดในระยะยาว เพราะ n8n ไม่จำกัดความซับซ้อนของ Workflow คุณสามารถเชื่อมต่อแอปพลิเคชันได้หลายตัวและตั้งค่าให้ทำงานซับซ้อนเพียงใดก็ได้ โดยไม่ต้องกังวลเรื่องค่าใช้จ่ายที่เพิ่มขึ้นตามการใช้งาน

      เรามาดูรายละเอียดแต่ละประเด็นกัน

      n8n นั้นมีความยืดหยุ่นสูงมาก

      n8n เป็นโปรแกรม No Code/Low Code ที่เปิดให้ผู้ใช้งานดูและแก้ไขโค้ดได้ (Source-available) และสามารถติดตั้งใช้งานเองได้ ทำให้เป็นทางเลือกที่ดีสำหรับการทำ Automation ที่ต้องการความปลอดภัยและการควบคุมข้อมูลอย่างสูง

      • ถูกออกแบบมาให้รองรับการใช้งานแบบซับซ้อน ซึ่งโปรแกรมเมอร์ที่สามารถเขียน Code ได้ ก็สามารถสร้างงานที่ซับซ้อนได้มากขึ้น โดยสามารถเขียน JavaScript ได้เต็มที่ (หรือ Python ได้นิดหน่อย) เพื่อตั้งค่า Logic หรือแปลงข้อมูลได้โดยตรง
      • ไม่ง้อ Integration มาตรฐาน ถ้าสิ่งที่เราต้องการเชื่อมต่อ ยังไม่มีให้เลือกในโปรแกรม เราก็ยังสามารถหาทางเชื่อมต่อ API เองผ่าน Node กลางๆ เช่น HTTP Request Node ได้ด้วย ทำให้เปิดความเป็นไปได้อีกมากมายในการทำ Automation ครับ

      เทียบราคา

      สรุปราคา n8n แบบ cloud

      n8n (แบบ Cloud) มีรูปแบบการคิดค่าบริการโดยคิดตามจำนวนครั้งของการทำงานของ Workflow ทั้งหมดว่ารันกี่ครั้ง (workflow executions) ซึ่งต่างจากแพลตฟอร์มอื่นๆ อย่าง Make หรือ Zapier ที่ตามจำนวนขั้นตอนหรือการกระทำย่อยๆ ในแต่ละ Workflow

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 242
      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 243
      • ค่าใช้จ่าย n8n เป็นแบบคงที่ แม้ Workflow จะซับซ้อนแค่ไหนก็ตาม โดยเริ่มต้น package ที่ €20 ต่อเดือน สำหรับการใช้งาน 2,500 workflow executions (กดทดลองได้ แต่อย่าลืมกดยกเลิกก่อนครบกำหนด)
        • ถ้าเทียบกับ Make ที่ให้บริการเฉพาะแบบ Cloud โดยมีแพลนเริ่มต้นที่ $9/เดือน แต่ราคาอาจเพิ่มขึ้นตามจำนวนการกระทำในแต่ละ Workflow ที่สูงขึ้น (ถ้าใช้น้อยอาจจะถูกกว่า n8n Cloud)
      • n8n ไม่มีการจำกัดการเชื่อมต่อหรือการใช้งานแอปพลิเคชันแบบพรีเมียม ทุกการเชื่อมต่อสามารถใช้งานได้ฟรี
      • เมื่อเทียบกับ Make ที่คิดค่าบริการตามจำนวนการกระทำ (operations) n8n จะถูกกว่าในระยะยาว เนื่องจากคุณจะไม่เสียค่าใช้จ่ายเพิ่มเติมสำหรับ Workflow ที่มีหลายขั้นตอนหรือการเชื่อมต่อมากมาย

      สรุปราคา n8n แบบ Self Hostแต่ๆๆๆ ถ้าเราใช้ n8n แบบ Self Host คือยิ่งเสียตังน้อยไปอีก! ซึ่งแบบนี้คือแบบที่ผมอยากจะแนะนำสำหรับสายประหยัดครับ!!

      • เราสามารถโหลดโปรแกรมมาลงฟรี
        • ถ้า Host ในคอมพ์ตัวเองเลย แบบ Local Machine นี่ เสียแต่ค่า API เท่านั้น คือประหยัดขั้นสุด แต่ข้อเสียคือต้องเปิดคอมพ์ทิ้งไว้ ถึงจะรันแบบ Auto ได้จริง
        • ถ้าไปเช่าบริการ Server แบบ Online ก็สามารถหาได้ในราคาเดือนละไม่ถึง 5-10 USD + ค่า API อีก ก็ถือว่าเป็นวิธีที่ประหยัดสุดๆ แล้วครับ สำหรับการทำ Automation
        • ส่วนตัวผมแนะนำ Hostinger อันนี้ครับ ราคาดี Performance ดี ผมก็ใช้อยู่

      n8n บน Hostinger (VPS)

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 244
      • อันนี้ผมเอาไว้ใช้งานหลักของตัวเอง เพราะใช้แบบนี้ไม่จำกัด Executions เลย รันก็รอบก็ได้ จะมีกี่ Active Workflow ก็ได้
      • ติดตั้งไม่ยาก ราคาไม่แพง แต่ Spec ดีใช้ได้ เดิมทีผมเคยใช้ Render แต่ Spec ต่ำสุดมันห่วยไป ส่วน Spec สูงขึ้นดันแพงไป ก็เลยมาจบที่ Hostinger
      • ราคามีช่วง 5-24 USD ของผมใช้ Plan KVM2 ประมาณ 7USD (spec ดีกว่า render เยอะอ่ะ!)
      • ถ้าสมัครผ่าน Code Refer THEPEXCEL ของผม คุณจะได้ลดเพิ่ม 20% ด้วยนะ
      • ผมแนะนำเลือก Server ที่ Malaysia (อย่าเลือก server Indonesia มันห่วย 😂)

      ในบทความนี้ เราลองมา Install n8n แบบฟรีๆ ในเครื่องตัวเองกันก่อนดีกว่า

      วิธี Install n8n แบบฟรีๆ ในเครื่องตัวเอง

      การ install n8n แบบใช้ฟรี ทำได้ 2 แนวทาง คือ

      วิธี 1 ผ่าน docker

      หรือ

      วิธี 2 ผ่าน npm (node package manager) ของ node.js

      ซึ่งในบทความนี้ผมขอแนะนำแนวทางการลงผ่าน npm ดังนี้นะครับ ซึ่งอาจดู nerdๆ นิดนึงอย่าเพิ่งตกใจ ทำตามไปเดี๋ยวได้เอง 555

      วิธีการคือ

      1. install โปรแกรมที่ชื่อว่า Node.Js โดยโหลดจาก https://nodejs.org/
      2. ตรวจสอบว่า install เรียบร้อยแล้ว โดย run แล้วเข้า cmd (หน้าจอดำๆ) แล้วพิมพ์ว่า
      node -v
      npm -v

      ถ้าลงสำเร็จก็จะมีเลข version เด้งขึ้นมา

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 245

      3. ต่อไปเราจะ install n8n โดยพิมพ์ว่า

      npm install -g n8n

      กด enter จากนั้นก็รอไปยาวๆ จะขึ้นแบบนี้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 246

      ลงเสร็จจะขึ้นแบบนี้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 247

      อัปเดทโปรแกรม n8n

      พิมพ์ใน cmd ว่า

      npm update -g n8n

      เรียกใช้โปรแกรม n8n

      เราสามารถเรียกใช้โปรแกรม n8n ขึ้นมาโดยพิมพ์ว่า n8n ใน cmd แล้วกด enter

      n8n

      จะได้แบบนี้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 248

      กดไปที่ Ctrl+Click ที่ Link http://localhost:5678/ ที่ขึ้นมา หรือกด o ก็ได้

      มันจะขึ้นมาให้ setup user ก็ใส่ไปได้เลยตามปกติ จากนั้นโปรแกรมก็จะขึ้นแบบนี้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 249

      กด Start From Scratch เพื่อเริ่มสร้าง Workflow ใหม่

      เริ่มสร้าง Workflow แรก ลองดึงราคาน้ำมัน

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

      Workflow ต่างๆ จะต้องเริ่มจาก Trigger ซึ่งจะเป็นจุดที่ทำให้ Workflow ทำงาน ซึ่งค่า Default ตอนนี้คือการกดปุ่มแบบ Test Workflow แบบ Manual ซึ่งใช้ได้ ไม่เป็นไร (ในอนาคตเราจะลอง Trigger อื่น ซึ่งมีอีกเยอะ เช่น รันอัตโนมัติทุกๆ xx นาที)

      เราสามารถกด + เพื่อ search node เพื่อ add node ที่ต้องการได้เลย

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 250

      ลองใช้ HTTP Request Node ดูครับ มันมีความสามารถในการส่ง/รับข้อมูลจากเว็บไซต์ได้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 251

      ในที่นี้ เราจะลองให้มันดึงข้อมูลราคาน้ำมันจาก URL ที่เป็น API ของทางบางจาก (ง่ายดี) ดังนี้

      https://oil-price.bangchak.co.th/ApiOilPrice2/th

      วาง URL แล้วกด Test Step มันจะทดสอบว่า Node นี้ทำงานได้หรือไม่ โดยจะเห็น Input ที่ส่งเข้ามาให้ Node มาจากหน้าต่างด้านซ้าย และเห็นผลลัพธ์ของ Node ทางด้านขวาแบบชัดๆ เลย ว่ามันสามารถอ่านข้อมูลจาก URL ที่เราระบุได้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 252

      เดี๋ยวเราจะลองบันทึกข้อมูลที่ได้ลงไฟล์ csv บนเครื่องอันนึงขำๆ ก่อน (ไว้ตอนต่อๆ ไปค่อยดูวิธี save ลง google sheets หรือ database อื่นนะ)

      ก่อนอื่น กด Back to Canvas ที่มุมซ้ายบนออกมาหน้า Workflow ก่อน แล้วกด Add Node ต่อ ซึ่งการ save file นั้นไฟล์จะต้องเป็น Binary ก่อน เราจะบันทึกข้อความหรือ JSON ไปตรงๆ ไม่ได้

      ดังนั้นเราจะทำการ Convert JSON เป็น csv ก่อน โดยใช้ Node Convert to File แล้วเลือก Convert to CSV (หรืออันอื่นแล้วแต่ต้องการ)

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 253

      จากนั้นค่อยต่อด้วย Node Read/Write Files from Disk เลือกแบบ Write File to Disk แล้วใส่ Path และชื่อไฟล์ตามต้องการ

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 254

      พอเราลองมารัน Workflow ทั้งหมดดู โดยกด Test Workflow มันควรจะมี File ถูกสร้างขึ้นมาตามที่เรากำหนดครับ

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 255

      ไฟล์ออกมาจริงๆ มีข้อมูลมาจริง (แต่อาจยังไม่เรียบร้อย)

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 256

      ถ้า Workflow ใช้ได้ เราก็กด Save Workflow แล้วตั้งชื่อ หรือกำหนด tag เอาไว้ search ได้เลย

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 257

      พอเรากดที่ปุ่ม Home ด้านซ้ายสุด เราจะเห็นหน้า workflow ทั้งหมดที่เราทำไว้ ซึ่งสามารถ add workflow เพิ่ม หรือจะไปโหลดจาก Template ที่มีให้เลือกมหาศาลก็ได้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 258

      ตอนต่อไป

      บทความนี้เป็นเพียงจุดเริ่มต้น ในตอนต่อไปเราจะเรียนรู้การเชื่อมต่อกับแอปต่างๆ และระบบออนไลน์ผ่าน API เช่น Gmail, Google Sheets, OpenAI ฯลฯ ใครสนใจอย่าลืมติดตามต่อกันได้นะครับ!

    • Power BI WORKSHOP 2024 โดย เทพเอ็กเซล

      Power BI WORKSHOP 2024 โดย เทพเอ็กเซล

      เรียนรู้การใช้งาน Power BI อย่างมืออาชีพ กับคอร์ส Power BI Workshop ของเรา!

      คอร์สนี้จะช่วยให้คุณสามารสร้างรายงาน Interactive Dashboard แบบอัตโนมัติ โดยใช้โปรแกรม Power BI Desktop อย่างมีประสิทธิภาพ โดยเน้นการเรียนรู้ 3 ประเด็นสำคัญ:

      เนื้อหาการอบรม

      1. การนำเข้าและปรับแต่งข้อมูลด้วย Power Query:
        • เข้าใจการทำงานของ Power Query
        • เรียนรู้การ Transform ข้อมูลที่ใช้บ่อย
        • นำเข้าข้อมูลจากหลากหลายแหล่ง เช่น Excel, CSV
        • สามารถรวมข้อมูลจากหลายไฟล์เข้าด้วยกันได้
        • สามารถออกแบบ Query ให้รองรับการ Refresh ในอนาคตได้
      2. การทำ Data Model และการใช้ DAX:
        • หลักการทำงาน Data Model
        • เรียนรู้การสร้าง New Column และ New Measure
        • ใช้ฟังก์ชัน CALCULATE เพื่อคำนวณข้อมูลที่ซับซ้อน
        • ทำรายงานเปรียบเทียบ Actual vs Target
        • การทำ Date Table และ การใช้ Time Intelligence
        • การประกาศตัวแปร DAX ด้วย VAR
      3. การสร้างรายงานและ Visual:
        • ออกแบบ Visual ที่มีประสิทธิภาพ
        • เรียนรู้จุดเด่นของ Visual แบบต่างๆ
        • กำหนด Interaction ให้กับรายงาน
        • เรียนรู้เทคนิคการ Drill แบบต่างๆ
        • ปรับแต่ง Visual ให้ตรงตามความต้องการ

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

      ทำไมควรต้องเรียน Power BI?

      • 🔄 Power BI เป็นเหมือนพี่ใหญ่ของ Excel
        • ทักษะที่คุณได้จาก Power BI สามารถนำกลับมาใช้ใน Excel ได้! ไม่ว่าจะเป็น Power Query, Data Model หรือ DAX ก็มีใน Excel รุ่นใหม่ๆ ด้วยนะ (ถ้าคุณใช้ Excel เวอร์ชันเก่า ยิ่งควรมาลองใช้ Power BI)
      • 🆓 เริ่มได้ฟรี ไม่ต้องรอบริษัท
        • โหลด Power BI Desktop ฟรี! ใช้งานได้เต็มที่โดยไม่ต้อง Login ด้วยนะ
        • ลองโหลดได้ที่ https://powerbi.microsoft.com/en-us/downloads/
      • 📊 ไม่มีข้อมูล? ไม่ใช่ปัญหา!
        • เริ่มจากข้อมูลที่คุณมีก็ได้ ไม่ว่าจะเป็น Excel, CSV หรือแม้แต่ข้อมูลจากเว็บไซต์ หรือจะใช้ข้อมูลสาธารณะมาฝึกฝนก่อนก็ได้นะ
      • ⚡ เร็วกว่า ยืดหยุ่นกว่า VLOOKUP และ Pivot
        • ลองนึกภาพ dashboard สวยๆ ที่อัพเดตอัตโนมัติ แสดงข้อมูลที่ผู้บริหารต้องการได้ในพริบตา!
      • 🌱 ง่ายกว่าที่คิดเยอะ
        • มีเครื่องมือช่วยเพียบ! บางอย่างแค่คลิกๆ ไม่ต้องเขียนสูตรเลย เน้นความเข้าใจภาพรวม สนุกแน่นอน!
      • 🧠 DAX ไม่ใช่ภูเขาที่ไต่ไม่ได้
        • เริ่มจากง่ายๆ ก่อน แล้วค่อยๆ ต่อยอด คุณจะเห็นว่าหลายฟังก์ชันคล้าย Excel เลย บางอันง่ายกว่าด้วยซ้ำ!
      • 💼 สกิลเด็ด เพิ่มมูลค่าตัวเอง
        • Power BI เป็นที่ต้องการในตลาดงานมากขึ้นเรื่อยๆ เริ่มวันนี้ คุณอาจเป็น “เทพ Data” คนต่อไปก็ได้!

      ความรู้พื้นฐานที่ควรมีก่อนอบรม

      • สามารถใช้ Excel Pivot Table เป็น
      • ทำรายงาน Regular Report ต่างๆ เช่น รายเดือน รายสัปดาห์ รายวันใน Excel มาก่อน

      👨‍🏫 วิทยากร:

      ⏰ เลือกรูปแบบที่คุณสะดวก

      แบบ 1: ONSITE เต็มวัน (2วัน)

      • วันที่: 19-20 ตุลาคม 2024 (เสาร์-อาทิตย์)
      • เวลา: 9:00 – 17:00 น.
      • สถานที่: Sindhorn Midtown Hotel Bangkok (ใกล้ BTS ชิดลม) [ Location ]
      • ราคา:
        • ราคาปกติ 8,500 บาท/ท่าน (รวม Vat)
        • มา 2 ท่านขึ้นไป หรือ ลูกค้าเก่า Workshop : 7,500 บาท/ท่าน (รวม Vat)
        • ฟรี 2 Break และ 1 Lunch / วัน
      • จุดเด่น:
        • เจอกับวิทยากรแบบ face-2-face
        • เรียนกันเข้มข้น สามารถเก่งขึ้นได้ภายใน 2 วัน
        • โอกาสในการ Networking กับวิทยากรและผู้เข้าอบรมท่านอื่น

      แบบ 2: LIVE ONLINE วันละ 2 ชม. (6วัน)

      • วันที่: 8-10 ตุลาคม 2024 และ 15-17 ตุลาคม 2024 (อังคาร-พฤหัสบดี)
      • เวลา: 20:00 – 22:00 น. (เรียนสด)
      • ช่องทาง: Live Online ผ่าน Zoom (เรียนสด)
      • ราคา:
        • ราคาปกติ 5,500 บาท/ท่าน (รวม Vat)
        • มา 2 ท่านขึ้นไป หรือ ลูกค้าเก่า Workshop : 4,900 บาท/ท่าน (รวม Vat)
      • จุดเด่น:
        • เรียนผ่านระบบ Live Online จากที่ไหนก็ได้ ถามคำถามสดๆ ได้
        • แบ่งเรียน 6 คืน (ใน 2 สัปดาห์) ไม่เหนื่อยเกินไป
        • เหมาะสำหรับคนที่ไม่สะดวกมาอบรมในวันหยุด

      🎁 สิ่งที่ผู้เข้าอบรมจะได้รับ

      • ใบรับรองการอบรมแบบดิจิทัล (PDF)
      • โอกาสถามคำถามและแก้ไขปัญหาหลังการอบรม
      • เอกสารประกอบการอบรมแบบดิจิทัล (ไฟล์ Excel ประกอบการอบรม และ Slide PDF)
      • สิทธิ์เข้ากลุ่ม Facebook Group พิเศษ ที่จัดให้คนลง Workshop กับเทพเอ็กเซลเท่านั้น
      • สิทธิ์รับชมคลิป VDO ย้อนหลัง เอาไว้ทบทวนหลังการอบรม (ดูผ่าน Facebook Group พิเศษเท่านั้น)
      • สิทธิ์เข้าร่วม Live Online Q&A session ปรึกษาปัญหา Power BI ในงานของคุณ หลังจบคอร์ส ฟรี! (แจ้งวันภายหลัง)

      สิ่งที่ต้องเตรียม

      • Notebook ที่ติดตั้ง Power BI Desktop Version ล่าสุด
        (โหลดฟรี
        https://powerbi.microsoft.com/en-us/downloads/ )
      • สำหรับผู้เข้าอบรม Onsite : สามารถเช่า Notebook ได้ (เลือกในแบบฟอร์มใบสมัคร)
        • ในราคา 1,000 บาท/คน /2 วัน ( หากรวม vat = 1,070 บาท)

      Testimonial จากผู้อบรม Workshop ก่อนหน้า

      • อาจารย์สอนละเอียด ตอบคำถาม ชัดเจน
      • สอนดีมว๊ากกกกค่า
      • มีตัวอย่างเตรียมให้ ได้ลองทำไปพร้อมกับครูที่สอน ทำให้เข้าใจง่ายค่ะ ถ้าติดตรงไหนก็มาย้อนฟัง live อีกทีได้ก่อนเรียนรอบต่อไปค่ะ
      • ขอบคุณที่จัดคอร์ส online ค่ะ บางทีไม่รู้ข้อระวังเล็กๆน้อยๆ เวลาลอง search วิธีทำจาก google แล้วทำตามไม่ได้ก็ท้อใจ ตอนนี้เข้าใจขึ้นมากเลย
      • ได้ความรู้ในเชิงลึก พร้อมเทคนิคต่างๆ
      • เอาไปใช้ได้จริง สอนดีมากค่ะ
      • เนื้อหา กับเวลา เหมาะสมดี / ผู้สอนสามารถตอบคำถามต่างๆ ได้ และ update ข้อมูลที่สำคัญๆ ให้ทราบ
      • สอนละเอียด ดูง่าย อธิบายสิ่งที่จำเป็นต้องรู้
      • ชอบการอธิบายรายละเอียด ที่มาที่ไป
      • ชอบ Trick ต่างๆของ excelที่ช่วยให้ทำงานได้เร็วขึ้น
      • ทำพร้อมๆกับอาจารย์ทำให้เข้าใจมากขึ้น

      รายละเอียดการชำระเงิน

      ผู้เข้าอบรมทุกท่านจะได้รับใบประกาศนียบัตรและใบกำกับภาษีเต็มรูปแบบ สามารถออกใบกำกับภาษีในนามบริษัทเพื่อใช้เบิกค่าใช้จ่ายได้

      โดยทางเทพเอ็กเซลจะส่งใบเสร็จรับเงิน/ใบกำกับภาษีให้ทาง email ผ่านระบบ e-tax invoice by email ซึ่งเป็นวิธีที่ทางกรมสรรพากรอนุญาตให้ใช้ได้

      การฝึกอบรมของพนักงานในองค์กรกับ เทพเอ็กเซล มีสิทธิ์ขอลดหย่อนภาษีได้สูงสุด 250% จากกรมสรรพากร เพราะคอร์สอบรมของเราได้รับการรับรองจาก โครงการ Thailand Plus Package  ของ สอวช.

      https://www.nxpo.or.th/th/wp-content/uploads/2022/02/ประกาศ-สอวช.-1-2565-1.pdf

      คอร์สอบรม Excel / Power BI สำหรับองค์กร In House Training ปี 2567 4

      https://stemplus.or.th/search?keyword=เทพเอ็กเซล

      ราคาค่าอบรม

      กรณีชำระในนามบุคคล

      • ค่าอบรมแบบ 1 : Onsite เสาร์-อาทิตย์ เต็มวัน
        • มา 1 ท่าน : 8,500 บาท/ท่าน (รวม VAT แล้ว)
        • มา 2 ท่านขึ้นไป หรือลูกค้าเก่า Workshop : 7,500 บาท/ท่าน (รวม VAT แล้ว)
      • ค่าอบรมแบบ 2 : Live Online อังคาร-พฤหัส กลางคืน 6 วัน x วันละ 2 ชม.
        • มา 1 ท่าน : 5,500 บาท/ท่าน (รวม VAT แล้ว )
        • มา 2 ท่านขึ้นไป หรือลูกค้าเก่า Workshop : 4,900 บาท/ท่าน (รวม VAT แล้ว )

      กรณีชำระในนามนิติบุคคล (มี หัก ณ ที่จ่าย 3%)

      • ค่าอบรมแบบ 1 : Onsite เสาร์-อาทิตย์ เต็มวัน  
        • มา 1 ท่าน : 8,500 บาท/ท่าน (รวม VAT แล้ว)
          • หัก ณ ที่จ่าย 3% = 238.32 บาท
          • สรุปยอดโอน 8,261.68 บาท/ท่าน (รวม VAT และหัก ณ ที่จ่าย 3% แล้ว)
        • มา 2 ท่านขึ้นไป หรือลูกค้าเก่า Workshop : 7,500 บาท/ท่าน (รวม VAT แล้ว)
          • หัก ณ ที่จ่าย 3% = 210.28 บาท
          • สรุปยอดโอน 7,289.72 บาท/ท่าน (รวม VAT และหัก ณ ที่จ่าย 3% แล้ว)
      • ค่าอบรมแบบ 2 : Live Online อังคาร-พฤหัส กลางคืน 6 วัน x วันละ 2 ชม.
        • มา 1 ท่าน : 5,500 บาท/ท่าน (รวม VAT แล้ว )
          • หัก ณ ที่จ่าย 3% = 154.21 บาท
          • สรุปยอดโอน 5,345.79 บาท/ท่าน (รวม VAT และหัก ณ ที่จ่าย 3% แล้ว)
        • มา 2 ท่านขึ้นไป หรือลูกค้าเก่า Workshop : 4,900 บาท/ท่าน (รวม VAT แล้ว )
          • หัก ณ ที่จ่าย 3% = 137.38 บาท
          • สรุปยอดโอน 4,762.62 บาท/ท่าน (รวม VAT และหัก ณ ที่จ่าย 3% แล้ว)

      ช่องทางการชำระเงิน

      ชำระเงินโดยการโอนเงินค่าอบรมมาที่
      บัญชี ออมทรัพย์ : บริษัท เทพเอ็กเซล จำกัด
      ธนาคารไทยพาณิชย์ (SCB)

      สาขา บิ๊กซี สะพานควาย
      033-421749-2

      *** ถ้าชำระเงินเผื่อคนอื่นด้วย กรุณากรอกในหมายเหตุ ***

      วิธีการสมัคร

      1. คลิกที่ปุ่ม “สมัครเลย” หรือ link ด้านล่าง (สามารถสมัครและชำระเงินทีเดียวหลายคนได้)
        • ต้อง login google account ก่อนถึงจะแนบไฟล์ได้
        • ถ้าทำผ่าน computer จะไม่ค่อยมีปัญหา
        • ถ้าทำผ่าน มือถือ แนะนำ copy link https://forms.gle/5vAwYJxrhko6oe1j6 ไปเปิดใน browser เอง ที่ไม่ใช่กดจาก line หรือ facebook
      2. ชำระเงินตามวิธีที่ระบุในรายละเอียดการชำระเงิน (ส่วนลด Early Bird ได้ถึง 20 ก.ย. นี้)
      3. กรอกข้อมูลในแบบฟอร์มให้ครบถ้วน และแนบหลักฐานการชำระเงินในแบบฟอร์ม
      4. กดขอเข้ากลุ่ม Facebook Group (มี link ขึ้นหลังจากกดส่งใบสมัคร)

      https://forms.gle/5vAwYJxrhko6oe1j6

      สอบถามรายละเอียดเพิ่มเติมเกี่ยวกับ Workshop ได้ที่ LINE: @ThepExcelTraining

    • สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer

      คุณเคยรู้สึกผิดหวังกับภาพ AI ที่ Gen ออกมาแล้วบางส่วนดูไม่สมจริงหรือไม่? หรือเคยพยายามแก้ไขเฉพาะบางส่วนของภาพแต่กลับทำให้ทั้งภาพเสียหายหรือไม่? ถ้าคุณกำลังเจอปัญหาเหล่านี้ คุณไม่ได้อยู่คนเดียว!

      การ Gen รูป AI นั้นเป็นศิลปะที่ต้องอาศัยทั้งความคิดสร้างสรรค์และเทคนิค แม้ว่า ComfyUI จะเป็นเครื่องมือที่ทรงพลัง แต่ก็มีข้อจำกัดที่ทำให้หลายคนต้องพบกับความท้าทาย:

      1. ภาพที่ได้มักมีรายละเอียดไม่สมบูรณ์ในบางส่วน เช่น ใบหน้าที่ดูแปลก หรือมือที่ผิดสัดส่วน
      2. การ Upscale ทั้งภาพอาจทำให้เสียเวลาและทรัพยากรโดยไม่จำเป็น
      3. การ Inpaint ใน ComfyUI มีข้อจำกัดเรื่องความละเอียด ต่างจาก A1111 ที่หลายคนคุ้นเคย (Node ปกติมันดันไม่สามารถ Inpaint Resolution สูงกว่า Pixel จริงได้เหมือนกับของ A1111)
      4. การสร้าง Mask ด้วยมือนั้นใช้เวลามากและอาจไม่แม่นยำ

      แล้วจะทำอย่างไรให้ภาพ AI ของคุณสมบูรณ์แบบในทุกรายละเอียด? จะมีวิธีไหนที่ช่วยประหยัดเวลาและให้ผลลัพธ์ที่ดีกว่าเดิม?

      บทความนี้จะเปิดเผยเทคนิคลับที่จะช่วยยกระดับการ Gen รูป AI ของคุณไปอีกขั้น ด้วยการใช้ Detailers ใน ComfyUI คุณจะได้เรียนรู้:

      • วิธีเพิ่มรายละเอียดเฉพาะจุดโดยไม่กระทบส่วนอื่นของภาพ
      • เทคนิคการสร้าง Mask อัตโนมัติที่แม่นยำด้วย AI
      • การผสมผสาน ControlNet และ IP Adapter เพื่อควบคุมผลลัพธ์ได้อย่างเหนือชั้น

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

      เครื่องมือหลักที่ใช้

      1. ComfyUI Impact Pack (ใช้ทำ Detailer)
      2. ComfyUI Inspire Pack (ใช้เสริมกับ Impact Pack)
      3. ComfyUI-Florence2 (ใช้ Detect วัตถุในภาพ ได้ฉลาดมากๆ)
      4. ComfyUI-segment-anything-2 (ใช้ทำ Segmentation Mask ได้ฉลาดมาก)

      Tutorial ที่สอนเรื่องพวกนี้จริงๆ ใน net ก็หายากพอสมควร ดังนั้นผมเลยตั้งใจทำบทความนี้ออกมา โดยเอาสิ่งที่ผมเรียนรู้มา (อย่างยากลำบาก 55) มาแนะนำเพื่อนๆ ต่อ เผื่อจะได้เอาไปต่อยอดงานของตัวเองได้ครับ 🙂

      เรื่อง Install Custom Node ไปจัดการกันเองนะ ไม่มีอะไรซับซ้อน เรามาดูการใช้งานเลยดีกว่า

      เรียนรู้คำศัพท์ที่สำคัญ

      SEGS เป็นรูปแบบข้อมูลที่ครอบคลุมหลายอย่างเข้าด้วยกัน ซึ่งรวมข้อมูลที่จำเป็นสำหรับการทำงานของ Detailer ซึ่งเป็นตัว Gen เพื่อลงรายละเอียดภาพ โดยข้อมูลที่ถูกฝังอยู่ใน Segs เช่น

      • bbox = Bounding Box พื้นที่กรอบสี่เหลี่ยมหลังจาก Detect ที่ประกอบด้วยพิกัดซ้าย, บน, ขวา และล่าง
      • masks = แสดงรูปโครงร่างของวัตถุภายในกรอบ bbox เป็นมาสก์ สามารถบอกขอบเขตของพื้นที่วัตถุที่แม่นยำมากขึ้น ในกรณีเลือกตัวตรวจจับเป็น BBOX พื้นที่มาสก์ครอบคลุมทั้งบริเวณ bbox นั่นเอง

      อย่างไรก็ตาม มีหลายวิธีที่จะสามารถสร้าง SEGS ได้ โดยไม่จำเป็นต้องใช้เครื่องมือพวก Detector หรือ Model ตรวจจับวัตถุ เช่น การระบาย Maskไปเลย แล้วค่อยแปลงเป็น SEGS ก็ได้

      ซึ่งเบื้องต้นผมจะสอนการระบาย Mask แบบ Manual เพื่อใช้ SEGS Detailer ลงรายละเอียดภาพให้ครับ

      การใช้ Detailer (SEGS)

      สมมติว่าผมมีภาพต้นฉบับอันนี้ ซึ่งสมมติว่าขนาดภาพใหญ่ ok แล้ว แต่บางส่วนของภาพยังไม่ได้ละเอียดมากนัก เช่น ใบหน้า

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 259

      ใน Impact Pack เรามีทางเลือกหลายทางว่าจะเพิ่มรายละเอียดใบหน้าด้วยวิธีไหนดี

      เช่น ถ้าเอาแบบอัตโนมัติสุดๆ ก็คือใช้ Node ที่ชื่อ Face Detailer (ของ Impact Pack) ไปเลย แต่ข้อเสียคือมันแก้ได้แค่หน้าจริงๆ ไม่สามารถแก้ส่วนอื่นได้

      ดังนั้นในบทความนี้ผมอยากจะนำเสนอวิธีที่ยืดหยุ่นกว่า คือ ใช้ Detailer (SEGS) มาช่วย เพราะมันสามารถเก็บรายละเอียดส่วนไหนก็ได้นั่นเอง

      Workflow การสั่ง Detailers

      คร่าวๆ คือส่ง Segs พื้นที่ที่ต้องการ Inpaint ใหม่เข้าไป แล้วกำหนดจนาดในการ Gen เช่น 1024

      ดังนั้นผมจะลองทำการ Mask ที่หน้าใน Load Image แล้วส่งเข้า MASK to SEGS เพื่อแปลง Mask ให้เป็น SEGS แล้วส่งพื้นที่นั้นเข้า SEGS Detailers เพื่อลงรายละเอียดนะครับ

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 260

      การตั้งค่าที่ควรรู้

      สำหรับ Mask to SEGS มีรายละเอียดที่ควรรู้ดังนี้

      จะมีตัวสำคัญคือ Crop Factor ที่จะเป็นตัวที่ทำให้ขนาดของ SEGS ที่ออกไปใหญ่ขึ้นกว่า Mask แค่ไหน ผมแนะนำปรับแค่ 1.2 ก็พอ (ค่า Default 3 ผมว่าใหญ่ไป )

      สำหรับ Node Detailers (SEGS) มีรายละเอียดที่ควรรู้ดังนี้

      • guide_size: เป็นขนาดอ้างอิงสำหรับ Detailer
        • ภาพใน SEGS ที่เล็กกว่า guide_size จะถูกขยายให้เท่ากับ guide_size
        • ภาพที่ใหญ่กว่า guide_size อยู่แล้วจะถูกข้ามไป
        • ขยายด้านที่สั้นกว่าของภาพเป้าหมายให้เท่ากับ guide_size
      • max_size: จำกัดด้านที่ยาวกว่าของภาพเป้าหมายให้เล็กกว่า max_size
      • force_inpaint: ใช้การวาดภาพทับเสมอ ไม่สนใจ guide_size มีประโยชน์เมื่อต้องการ Inpaint มากกว่าการทำ Detailers
      • inpaint_model: เมื่อใช้ Inpaint Model ต้องเปิดใช้งานตัวเลือกนี้เพื่อให้แน่ใจว่าการวาดภาพทับทำงานถูกต้องที่ค่า denoise ต่ำกว่า 1.0
      • noise_mask : ปกติแล้วแนะนำให้เปิดไว้
      • noise_mask_feather: กำหนดขอบเขตว่าจะทำให้ขอบของ Mask ฟุ้งขึ้นหรือไม่ มากน้อยแค่ไหน ซึ่งมีไว้ดีแล้ว แต่เราลองปรับความฟุ้งเล่นได้

      จะเห็นว่าผลลัพธ์บริเวณใบหน้าดีขึ้นอย่างชัดเจน

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 261

      สร้าง Mask แบบอัตโนมัติขั้นเทพ ด้วย Florence2 + SAM2

      การจะมานั่งทำ Mask เอง เเหมาะกับงานที่ทำแค่ไม่กี่ชิ้น แต่ถ้าอยากทำงานแบบอัตโนมัติด้วยการ Run Workflow คลิ๊กเดียวจบ เราต้องมีวิธีการสร้าง Mask หรือ SEGS แบบอัตโนมัติด้วย จริงไหม?

      เดิมทีใน Impact Pack จะมี Node ประเภท Detector ที่อาไว้ Detect พวก ใบหน้า มือ คนทั้งตัว อะไรพวกนี้อยู่แล้ว ตัวหลักๆ คือ Ultralytics Detector Provider กับ SAM Loader ซึ่งก็ทำงานได้ดีในระดับนึงเลย

      แต่ว่าในยุคหลังๆ มี Model เจ๋งๆ ออกมามากมาย ซึ่งผมมองว่า เราสามารถสร้าง Mask ที่แม่นยำได้มากกว่าของ Impact Pack เอง หากใช้เครื่องมือ 2 ตัวนี้มาช่วย

      • Florence2 ซึ่งเป็นโมเดลตรวจจับวัตถุออกมาในลักษณะ BBOX หรือ Bounding Box คือตีกรอบสี่เหลี่ยมให้ พัฒนาโดย Microsoft ปล่อยออกมาเป็น Opensouce ให้เราใช้งาน ซึ่งเราสามารถเรียกใช้ผ่าน Custom Node ที่ชื่อว่า ComfyUI-Florence2
      • Segment Anything Model 2 (SAM2) เป็น Model ที่จะทำการ Segmentation หรือตรวจจับในรูปแบบของโครงพื้นที่ที่มีเส้นขอบตามรูปร่างวัตถุจริงโดยละเอียด พัฒนาโดย Meta ออกมาในแบบ Opensource ให้เราได้ใช้เช่นกัน ซึ่งเราสามารถเรียกใช้ผ่าน Custom Node ที่ชื่อว่า ComfyUI-segment-anything-2

      ให้เพื่อนๆ install custom node ทั้งสองอันให้เรียบร้อย แล้วเดี๋ยวเราจะมาลองใช้มันดูกันครับ

      Florence2

      Florence2 สามารถมองรูปแล้วบอกรายละเอียดในภาพได้ดีเลย แล้วสามารถทำงานหรือ Task ได้หลายอย่างด้วย

      Detailed caption

      ถ้าลองเลือก Task แบบ detailed caption แล้ว เราสามารถเอา Caption ออกมาดูด้วย pythongosssss/ComfyUI-Custom-Scripts ก็ได้ (ถ้าอยากเห็นข้อความ)

      ซึ่งถ้าจะประยุกต์เราเอา Caption ที่ว่านี่เป็น Prompt แล้วส่งเข้า Clip Text Encode เพื่อ Gen รูปได้เลยด้วยซ้ำ จริงไหม?

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 262

      OCR

      ตัว Florence2 สามารถทำ OCR ได้ด้วยนะ เช่น ถ้าเรามีข้อความอยู่ในรูป มันก็สามารถดึงออกมาได้เลย แต่ ณ ตอนนี้โมเดลมันใช้กับภาษาไทยไม่ได้นะ ไม่ work เลย

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 263

      Region caption

      แต่ถ้าเราลองรัน Florence 2 ด้วย Task แบบ Region Caption มันจะ Detect ทุกอย่างในรูปนั้นออกมาเลยว่ามีอะไรบ้าง? และตรง Caption จะได้ Location ออกมาด้วย

      ป.ล. ถ้าเราอยากดูมันว่า Mask ส่วนไหนบ้าง ก็ต่อเข้า Convert Mask to Image ออกมาดูได้ ซึ่งจะเห็นว่ามันระบาย BBOX เต็มไปหมดเลย

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 264

      Caption to Phase Grounding [ ตัวหลักที่จะใช้ ]

      ถ้าเราอยากจะได้แค่วัตถุบางอย่างในรูป เราสามารถระบุใน Text Input ได้ แต่ว่า ให้เปลี่ยน Task เป็น Caption to Phase Grounding ด้วย ไม่งั้นมันจะ Error

      ก่อนอื่น ลองใช้ Florence 2 สร้าง BBOX รอบถ้วยกาแฟกันก่อน ด้วยคำว่า Cup

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 265

      คราวนี้จะเห็นว่ามัน Detect เฉพาะ Cup ได้จริงๆ และ Mask ได้ถูกต้องด้วย

      ทีนี้เรามาดูกรณีที่มัน Detect เจอ Object หลายอัน เช่น ผมให้มัน detect โคมไฟด้วย Lamp มันเจอหลายอันเลย ซึ่งแต่ละอันจะมี Index ของตัวเอง (ุถ้าไม่อยากให้การ detect เปลี่ยนต้อง fix seed ตอน detect ไว้ด้วยนะ)

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 266
      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 267

      ก่อนจะส่งเข้า SAM2 ไปทำงานต่อ เราสามารถเลือกส่งแค่ Index ที่ต้องการได้ ด้วย Node ที่ชื่อ Florence2 Coordinate ครับ

      SAM2

      เราจะเอา SAM2 ต่อจาก Florence2 Coordinate อีกที เพื่อให้มันทำ Segmentation แบบละเอียดต่อนั่นเอง

      ซึ่งเราจะต่อผ่าน Node ที่ชื่อ Florence2 Coordinate เพื่อให้มันทำ Segmentation เฉพาะในพื้นที่ที่เราเลือกครับ เช่นในรูป ผมเลือก Index 3 ออกมา

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 268
      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 269

      ด้วยความรู้นี้ แปลว่า เราจะ Mask อะไรก็ได้แล่ว เช่น Mask แค่เสื้อ ก็แค่แก้ Text เป็น Shirt จบเลย (เพราะในรูปมีตัวเดียว)

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 270
      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 271

      ถ้าเรา Convert Mask to SEGS แล้ว ต่อเข้า Detailer (SEGS) เราก็จะทำการ Inpaint แค่เสื้อได้อย่างแม่นยำ

      กรณี Mask มีหลายชิ้น แล้วเราอยากให้มันมองรวมกัน ก็สามารถเลือกตรง Mask to SEGS ให้เป็น Combined ได้นะครับ ส่วนตอนใช้ Detailer (SEGS) ก็อาจต้อง Denoise เยอะนิดนึง ไม่งั้นภาพอาจไม่ค่อยเปลี่ยน

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 272

      อย่างไรก็ตาม แม้จะใส่ denoise ประมาณ 0.5 สีเสื้อมันก็ยังอาจจะดูไม่ค่อยม่วงนัก (อาจเพราะเดิมมีแต่สีขาว)

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 273

      การใช้งานขั้นสูง

      แนวทางจัดการเวลาที่เรา Inpaint แล้วไม่ค่อย Work หลายแนวทางดังนี้ คือ

      ปรับ Cycle ให้ทำซ้ำหลายๆ รอบ

      เราสามารถลองใช้ Feature ที่เรียกว่า Cycle เพื่อให้มันทำ Detailer หลายๆ รอบ โดยลองตั้งค่า Cycle เป็น 3 ดู

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 274

      จะพบว่าสีเสื้อเป็นสีม่วงมากขึ้น โดยที่ผมไม่ได้แก้ Prompt หรือ Seed อะไรเลยด้วยซ้ำ

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 275

      จะเห็นว่าการใช้ Cycle + Denoise ที่ไม่ต้องมากเกินไป จะสามารถให้เรา Gen ตาม Prompt ได้ดีขึ้น โดยไม่เสี่ยงกับการที่ภาพเพี้ยนไปจากเดิมเยอะ เพราะมันค่อยๆ เปลี่ยนภาพเดิมให้เป็นไปตาม Prompt ของเรานั่นเอง

      ปรับภาพในส่วน Mask ก่อนใช้ Detailer

      หากว่าภาพดั้งเดิม มันอาจจะมีสีน้อยมาก Denoise ยังไง สีใหม่ก็ไม่เข้าไป (จะใช้ Denoise 1 เพื่อให้มีสี ภาพก็เพี้ยนอีก) วิธีนึงที่ช่วยได้ ก็คือใส่สีทับเข้าไปบริเวณที่เรา Mask ซะเลย เช่น ใช้ ComfyUI-post-processing-nodes ในการปรับสี เช่น พวก HSV, Brightness Contrast จนพอใจ แล้วเอามาผสมกับรูปเดิม โดยใช้ Image Blend by Mask จาก WAS Node Suite ทำให้เสมือนว่ามี Effect แค่ส่วนที่ Mask ก็ได้

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 276

      รูปหลังปรับสีด้วยเครื่องมือ Post Processing ปกติ ก็ช่วยได้มาก

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 277

      พอรูปพื้นฐานมันม่วงแล้วในระดับนึง ไม่ใช่ขาวจั๊วะ คราวนี้ใน Detailer ก็จัดการต่อได้ง่ายแล้ว

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 278

      ลองใช้ Detailer คู่กับ ControlNet

      หากต้องการใช้ ControlNet ใน Detailer สามารถใช้ Node ControlNet Apply (SEGS) มาช่วยได้แบบนี้ ซึ่งจะมีประโยชน์ในกรณีที่เราใส่ Denoise เยอะหน่อย ภาพจะได้ไม่เพี้ยนจากรูปทรงเดิม

      วิธีการคือ ใช้ Node ControlNet Apply (SEGS) รับ SEGS ที่จะ Inpaint (เช่น จาก MASK to SEGS) ก่อนส่งต่อไปให้ Detailers (SEGS) อีกที

      จากนั้น Load ControlNet Model ให้เหมาะสมกับ Preprocessor ที่ต้องการ (ของผมใช้ โมเดล Xinsir ControlNet Union SDXL ซึ่งเป็นโมเดลอัจฉริยะใช้ได้กับทุก Preprocessor เลย)

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 279

      เทียบ setting เดียวกัน seed เดียวกัน
      กรณี denoise เยอะๆ เช่น 0.8 ระหว่างไม่มี ControlNet กับ มี ControlNet

      จะพบว่าถ้าไม่ใช้ ControlNet หน้าอาจจะเปลี่ยนไปเยอะ แต่ถ้าใช้ ControlNet มันก็จะถูกควบคุมไว้ตาม Preprocessor ที่เราเลือก

      ลองใช้ Detailer คู่กับ IP Adapter

      ถ้าเราต้องการใช้ Detailers คู่กับ IP Adapter สามารถต่อ Workflow โดยใช้ IPAdapterApply (SEGS) ประมาณนี้ได้ครับ

      หลักๆ คือ เอา IPAdapterApply (SEGS) รับ SEGS ที่จะ Inpaint (เช่น จาก MASK to SEGS) ก่อนส่งต่อไปให้ Detailers (SEGS) ซึ่ง IPAdapterApply (SEGS) นี้ ต้องรับ ipadapter_pipe จาก IP Adapter Model Helper ของ Inspire Pack ด้วย

      ผมระบาย Mask บริเวณเสื้อโดยใช้ Mask จาก SAM2 ที่ทำไว้เป็นรูปภาพ แล้ว Load ขึ้นมาด้วย Load Image as Mask เลือก Channel สีอะไรก็ได้ (เช่น Red) แล้วใช้ Prompt ดังนี้

      high quality, realistic photo,  pattern woman shirt

      ซึ่ง prompt ผมแค่นิดเดียว ไม่ได้ระบุเลยว่าจะเอาสีเขียว ลายนกยูง แต่ว่ามันก็ไปเอามาจากรูปต้นแบบที่ต่อกับ IP Adapter ได้จริงๆ

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 282

      จะเห็นว่าเสื้อกลายเป็นลายนกยูงได้เลย (พลังจาก IP Adapter แรงจนสามารถเปลี่ยนสีจากเสื้อสีขาวได้เลย!)

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 283

      หรือถ้าปรับ Cycle เพิ่มอีก (ผสมผสานหลายเทคนิค) ลายก็จะชัดขึ้นได้

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 284

      สรุป

      การใช้ Detailer ใน ComfyUI เป็นวิธีที่มีประสิทธิภาพในการเพิ่มคุณภาพของภาพ AI โดยเฉพาะในส่วนที่ต้องการรายละเอียดพิเศษ เทคนิคที่นำเสนอในบทความนี้สามารถนำไปประยุกต์ใช้ได้หลากหลาย ทั้งการสร้าง Mask อัตโนมัติ การใช้ Cycle เพื่อปรับปรุงผลลัพธ์ และการผสมผสานกับเทคโนโลยีอื่นๆ เช่น ControlNet และ IP Adapter

      การฝึกฝนและทดลองใช้เทคนิคเหล่านี้จะช่วยให้คุณสามารถสร้างภาพ AI ที่มีคุณภาพสูงและตรงตามความต้องการได้มากขึ้น

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

    • ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง

      ในโลกของ AI ที่กำลังเติบโตอย่างรวดเร็ว FLUX เป็นชุดโมเดลการสังเคราะห์ภาพล่าสุดที่น่าตื่นเต้น พัฒนาโดย Black Forest Labs ซึ่งเพิ่งเปิดตัวเมื่อวันที่ 1 สิงหาคม 2024

      FLUX นำเสนอความก้าวหน้าที่สำคัญในด้านคุณภาพของภาพ การตอบสนองต่อคำสั่ง และความหลากหลายของสไตล์ โดยเฉพาะเรื่องของตัวหนังสือกับสรีระร่างกายรวมถึงนิ้วและมือทำได้ดีขึ้นมากๆ กว่าโมเดล Stable Diffusion ปกติมาก

      ในบทความนี้ เราจะแนะนำวิธีการใช้งาน FLUX ใน ComfyUI ซึ่งเป็นเครื่องมือยอดนิยมสำหรับการสร้างภาพด้วย AI ซึ่งผมสอนมาหลายตอนแล้วเนอะ

      ปกติแล้ว จะใช้ FLUX ได้เครื่องต้องแรงพอสมควรเลย แต่คราวนี้ ผมจะใช้ในเครื่อง Laptop ตัวประจำของผม ซึ่งมีการ์ดจอ Nvidia RTX3060 ที่มี VRAM แค่ 6GB!! ลองดูว่าจะไหวหรือไม่ 555

      หมายเหตุ : เครื่องผมตอนแรกมี Ram ของเครื่อง 16 GB รันยังไงก็ไม่ผ่าน มันขึ้น restarting ตลอดเลย หลังจากลองค้นใน Net มีคนบอกว่า เหมือนว่า Ram เครื่องไม่พอ ผมก็เลยใส่ Ram เพิ่ม เป็น 32GB สุดท้ายก็รันได้ครับ

      ….จากคำแนะนำของคุณหนึ่ง HotFreshMilk และคุณ เจ Salmon RK…

      FLUX ใช้ความจำ Unet+Clip+VAE รวมประมาณ 20-30 GB
      ซึ่งของผม VRAM แค่ 6 GB แปลว่า ต้องมี Ram ช่วยอีก 14-24 GB
      ซึ่งถ้า RAM 16 GB ก็จะไม่พอ (เพราะว่า ตัว Windows และโปรแกรมอื่นก็จะกิน Ram ไปแล้วส่วนนึง เช่น ประมาณ 10 GB+)

      ดังนั้นถ้ามี Ram 32 GB ถึงจะรันในเครื่องผมได้ แต่ถ้า Ram หมดมันจะไปใช้ HDD ต่อ แล้วอาจจะอันตรายกับ HDD ได้ ถ้าใช้บ่อยๆ

      ดังนั้นเพื่อความปลอดภัยสุดๆ ตอนหลังผมเลยเพิ่ม Ram เป็น 64 GB ไปเลย (สั่ง Ram Notebook 64 GB เสียไป 6 พันกว่าบาท T_T) คราวนี้ก็สบายใจละ

      FLUX มีหลายรุ่นย่อย

      ตอนนี้ FLUX version 1 หรือ FLUX.1 มีด้วยกัน 3 รุ่น:

      1. FLUX.1 [pro]: รุ่นที่เก่งที่สุด เหมาะสำหรับการใช้งานระดับมืออาชีพ สามารถใช้งานผ่าน API แบบมีค่าใช้จ่าย หรือใช้ผ่าน Replicate หรือ fal.ai
      2. FLUX.1 [dev]: รุ่นที่สามารถ Gen ภาพได้สวยมาก เป็นแบบ open-weight สำหรับการใช้งานที่ไม่ใช่เชิงพาณิชย์ เหมาะกับนักวิจัยนักพัฒนาที่จะเอาไปพัฒนาต่อ
      3. FLUX.1 [schnell]: รุ่นที่เน้น Gen ภาพได้เร็วที่สุด ทำงานแค่ 4 Step ก็เพียงพอ เหมาะสำหรับการพัฒนาในเครื่องตัวเองและการใช้งานส่วนตัว ผ่าน Apache 2 Licensed (ตามหลักแล้ว แปลว่า สามารถใช้ได้ฟรี ปรับเปลี่ยนได้ และใช้เชิงพาณิชย์ได้)

      ในบทความนี้เราจะลอง 2 ตัวหลัง แต่ผมจะเน้นที่ตัวสุดท้ายนะ เพราะ Gen ไวดี

      การเตรียมพร้อมสำหรับการใช้งาน FLUX ใน ComfyUI

      ก่อนที่คุณจะเริ่มใช้งาน FLUX ใน ComfyUI คุณจำเป็นต้องดาวน์โหลดไฟล์ที่จำเป็นต่างๆ โปรดทราบว่าคุณจะต้องมีพื้นที่ว่างอย่างน้อยประมาณ 20-30 GB สำหรับไฟล์ทั้งหมด

      การดาวน์โหลดไฟล์ที่จำเป็น

      1. ดาวน์โหลดโมเดล FLUX
      2. ดาวน์โหลด CLIP
      3. ดาวน์โหลด VAE

      หลังจากดาวน์โหลดไฟล์ทั้งหมดแล้ว ให้วางไฟล์ในโฟลเดอร์ที่กำหนดภายในโครงสร้างโฟลเดอร์ของ ComfyUI ตามที่ผมได้อธิบายไป

      วิธีต่อ Node เพื่อใช้ FLUX ใน ComfyUI

      ก่อนอื่นให้กด Update All ใน ComfyUI Manager ให้เรียบร้อยนะ สำคัญมาก

      จากนั้นลาก Workflow ของรูปผู้หญิงทำมือรูปหัวใจที่ผมทำอันนี้เข้าไปได้เลย

      (หรือจากนี่ก็ได้ https://comfyanonymous.github.io/ComfyUI_examples/flux/ )

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 285

      ถ้าโหลดสำเร็จจะขึ้น Workflow แบบนี้

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 286

      แต่ตรง Load Diffusion Model ต้องระวังเรื่องชื่อ model นิดนึงนะ ซึ่งจะต้องตรงกับชื่อไฟล์ที่เราโหลดมา ของผมเลือก unet เป็น “flux1-schnell-fp8.safetensors”

      นอกนั้นก็แก้ prompt และระบุ size ตามขนาดของ SDXL ปกติ ได้เลย เช่น 1024×1024 หรือ 768×1152 หรือ ratio อื่นๆ เช่น 896×1152 ก็ได้ครับ

      การตั้งค่าที่แนะนำ

      Sampler และ Scheduler

      เท่าที่ลองดู การเปลี่ยน Sampler และ Scheduler ไม่ค่อยส่งผลมากนัก

      ผมแนะนำให้ใช้ตามค่ามาตรฐานได้เลย คือ

      • Sampler เป็น Euler
      • Scheduler เป็น Simple

      Steps

      สิ่งที่ต่างกันและสำคัญ คือ Steps

      • flux1-schnell ผมแนะนำ 4-8 Steps
      • flux1-dev ผมแนะนำ 20-30 Steps

      FluxGuidance (ตัวนี้ไม่ใช่ CFG นะ)

      • แบบ schnell จะปรับค่า Guidance ไม่ได้ (ปรับแล้วไม่ส่งผล)
      • แบบ flux1-dev จะปรับได้ ซึ่งถ้าอยากได้ภาพสมจริงมากขึ้นแนะนำ Guidance ประมาณ 1.8-3.5 ครับ

      ถ้าใครคิดว่าเครื่องน่าจะรันไม่ผ่าน…

      เครื่องผมตอนแรกมี Ram ของเครื่อง 16 GB รันยังไงก็ไม่ผ่าน มันขึ้น restarting ตลอดเลย หลังจากลองค้นใน Net มีคนบอกว่าเหมือนว่า Ram เครื่องไม่พอ

      ผมก็เลยใส่ Ram เพิ่ม เป็น 32GB สุดท้ายก็รันได้ครับ (สั่ง Ram Notebook 32 GB แบบส่งด่วนเลย อยากลองมาก เสียไป 3 พันกว่าบาท T_T)

      ถ้ายังรันไม่ได้ ลองใส้คำว่า –lowvram ใน run_nvidia_gpu.bat ของ ComfyUI ดูนะครับ

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

      1. ลองไปใช้ ComfyUI บน Google Colab ก็ได้ครับ มีของคุณ Prompt Alchemist ทำไว้ รองรับ FLUX แล้วด้วย (อย่าลืมติ๊กถูกในช่อง Flux ก่อนรันโปรแกรมนะครับ)

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 287

      2. ใช้จาก Service ที่มีบริการ เช่น ของคนไทยเราก็มีที่นี่ ดีมากๆ https://varoriya.com/en/service/flux/

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 288

      ความเร็วในการ Gen

      บอกก่อนว่า การ์ดจอผม 3060 vram 6gb เอง ดังนั้นมันอาจจะช้ากว่าคนที่ GPU แรงๆ นะ

      ถ้านับจากการกด Queue Prompt ครั้งแรกเลย โดยไม่ยังไม่ได้โหลด Model อะไรไว้ก่อน เครื่องของผมใช้เวลาเกือบ 300 วิ…

      แต่ถ้า Gen Prompt เดิมซ้ำกับภาพใหม่

      • ถแบบ dev 20 steps ผมใช้เวลา 90 วิ
      • แบบ schnell 4 steps ใช้เวลาเหลือแค่ 20 กว่าวิ!
      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 289

      แต่ถ้ามีการเปลี่ยน Prompt ผมใช้เวลา 140 วิได้… ซึ่ง Gen ซ้ำ 20 วิเช่นเคย

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 290

      ถ้าใคร Gen ในเครื่องตัวเองผ่าน แต่ใช้เวลานานจัดๆ จนหงุดหงิด ลองพิจารณาแนวทางอื่น เช่น ใช้ช่องทางที่ผมแนะนำไปก็ได้ครับ

      ผลลัพธ์ภาพที่ได้จาก FLUX

      ทุกภาพไม่ได้มีการ edit ใดๆ แต่มีการคัดเลือกภาพที่สวยหน่อยมาให้ดู (80% สวยอยู่)

      ภาพเขียนข้อความ

      realistic editorial photo of beautiful sexy white skin thai woman net idol 18 yrs old in white short sleeve shirt and black short fit mini skirt, writing text "Ai Angel Gallery" on blackboard in the classroom, soft light

      flux1-dev

      flux1-schnell

      ภาพนางฟ้าแสดงมือ hi-five

      realistic photo of A beautiful Asian woman cosplay as angel with glowing white wings, flowing black hair, and a radiant face. smile and showing hi-five hand. standing in a celestial heaven with soft clouds

      flux1-dev

      flux1-schnell

      ภาพสาวไหว้พระ

      A beautiful young Asian woman 20 yrs old with black hair, kneeling in prayer inside a serene Thai temple. her hands gently clasped, surrounded by golden Buddha statues, ornate temple decor, and soft, ambient light streaming through the windows, creating a peaceful and sacred atmosphere

      flux1-dev

      flux1-schnell

      ภาพสาวทำมือรูปหัวใจ

      A beautiful Thai girl 20 yrs, wearing a traditional Thai dress in in front of thai temple making heart shape hand

      flux1-dev

      flux1-schnell

      ภาพการ์ตูน

      An anime-style illustration beautiful Thai girl 20 yrs, wearing a traditional Thai dress in vibrant colors in front of thai temple

      flux1-dev

      flux1-schnell

      ภาพกลุ่ม

      A group of beautiful white skin sexy Thai korean women 20 yrs old in sexy shorts, happily taking a group photo together

      flux1-dev

      flux1-schnell

      ภาพสาววันตรุษจีน

      instagram profile picture of very very beautiful Thai girl, Chinese New Year style very deep spaghetti strap,
      
      analog film photo, faded film, desaturated, (35mm photo, grainy:1.3), vignette, vintage, Kodachrome, Lomography, stained, highly detailed, found footage. sharp background details. 8K, best quality, (very detailed face:1.15)

      flux1-dev

      flux1-schnell

      ภาพ sexy

      beautiful white skin sexy Thai korean women 20 yrs nude on the bed in bed room

      flux1-dev

      flux1-schnell

      ภาพอื่นๆ ที่ทำเล่น

      flux1-dev

      flux1-schnell

      ลองเล่นกับ Steps ที่เพิ่มขึ้น

      ผมลองใช้ FLUX.1 Dev เมื่อใช้ Steps น้อยๆ ในการ Gen ภาพ Prompt นี้

      A beautiful Thai girl 20 yrs, wearing a traditional Thai dress in in front of thai temple making heart shape hand

      ผลลัพธ์ที่ออกมากลับกลายเป็นเด็กน้อยหรือภาพการ์ตูนซะงั้น! แต่พอเพิ่ม Steps มากขึ้น ภาพก็เริ่มโตตาม Prompt ได้ดีขึ้นเรื่อยๆ เหมือนกำลังเติบโตขึ้นมาต่อหน้าต่อตาเลยล่ะ 🤣

      ผมเข้าใจเองว่า เหตุการณ์นี้เกิดขึ้นเพราะพอ Steps เยอะ AI มันมีเวลาลงรายละเอียดตาม Prompt ได้ดีกว่า มันก็เลยโตขึ้นตาม Prompt ที่บอกว่า ผู้หญิงอายุ 20 (มั๊ง…)

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 331

      นี่ครับ “A beautiful Thai grandma” ถ้า Prompt เราระบุให้แก่เลย Steps น้อยมันก็ดูแก่อยู่นะ
      หรือถ้า Prompt เราตั้งใจให้เด็ก “A beautiful Thai little girl” Step เยอะ ก็ยังเด็กนะครับ

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 332

      สรุปก็น่าจะเป็นเพราะมันทำตาม Prompt ดีขึ้นแหละ

      Image 2 Image

      นอกจากจะ Gen ภาพใหม่แล้ว เราเอามา FLUX ใช้ทำ Img2Img จากภาพเดิมที่มีอยู่แล้วก็ได้นะ แค่เปลี่ยน Empty Latent ออก แล้วแทนด้วย Load image + VAE Encode ตามปกติเลย แต่อย่าลืมเปลี่ยน Denoise ให้เหมาะสมล่ะ เช่น 0.4-0.5

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 333

      สรุปความเห็นจากการทดลองใช้ FLUX

      ส่วนตัวคิดว่า คุณภาพที่ได้นั้นดีกว่าสมัย SDXL เยอะมาก ขึ้นมาสูสีกับ MJ แล้ว (ถ้าใช้ Flux Pro หรือ Dev นะ) แต่ถ้าเป็นแบบ flux1-schnell ยังห่างชั้นจาก MJ มาก

      อย่างไรก็ตามผมคิดว่าตัว FLUX ทุก Model สามารถทำข้อความได้ดี ได้เป๊ะกว่า MJ นะครับ

      ส่วนพวกสรีระ สัดส่วน และมือดีขึ้นมาก มีผิดเพี้ยนบ้างนิดหน่อย น่าจะถูกต้องประมาณ 80%++ แล้วล่ะ

      และที่ดีมากๆ อีกอย่างคือทำตาม prompt ได้ดี เราระบุรายละเอียดเยอะๆ ยาวๆ ได้เลย และเหมือนว่า ยิ่งบรรยายบรรยากาศกับสไตล์ที่ต้องการเยอะๆ ภาพก็จะทำได้ตามนั้นยิ่งสวยด้วยครับ

      ป.ล. ตัว flux1-dev ถ้าเราใช้คำว่า girl มันจะออกเป็นเด็กผู้หญิงซะส่วนใหญ่ ถ้าอยากให้โตหน่อยใช้คำว่า woman ดีกว่าครับ (ตัว flux1-schnell ใช้ girl ก็ยังโตได้)

      ใช้ ControlNet ได้หรือยัง?

      เท่าที่ทดลองไป ControlNet ยังไม่ได้นะครับ มันขึ้น Error น่าจะยังต้องมีการปรับปรุงอีกทีในอนาคต

      สรุป = ยังใช้ไม่ได้นะ

      ใช้ LoRA ได้หรือยัง?

      ผมลองใช้ LoRA ของ SDXL ปรากฏว่าสามารถรันผ่าน ไม่มี Error!

      แต่ผลลัพธ์มันไม่ Work เหมือนว่าการเข้าใจ Weight มันไม่ตรงกัน มันก็เลยไม่สามารถส่งผลของ LoRA ออกมาได้ถูกต้องครับ

      สรุป = ยังใช้ไม่ได้นะ

      และถ้าใครสงสัยว่าเจ้า FLUX สามารถ Gen ภาพโป๊ได้ไหม?…

      คำตอบก็คือ ท่อนบนพอได้ครับ (ต้องระบุเจาะจงกว่าคำว่า Nude) แต่ยังไม่ค่อยสมจริง ส่วนท่อนล่างแทบ Gen ไม่ออกเลย เหมือนมีอะไรดำๆ มืดๆ บังตลอด (เหมือนตัว based นี้ไม่ได้เทรนมา)

      บางทีใส่คำว่า Nude ใน Prompt แท้ๆ แต่ก็ออกมาไม่โป๊ก็มี เช่น รูปที่ผมเอามาให้ดู มีคำว่า Nude แต่เค้าใส่ชุดชั้นในให้เฉยเลย

      แต่คิดว่า ถ้ามีคนอาไปพัฒนาเพิ่ม ก็จะเหมือน SD1.5 กับ SDXL ที่ Gen ได้ทุกแบบ แบบไร้ขีดจำกัดเช่นกันครับ 555

      สรุปของสรุป

      สรุปแล้ว การมี Based Model ที่เทพขนาดนี้เป็นจุดเริ่มต้นที่ดีครับ หากมีคนเอาพัฒนา LoRA / ControlNet และเครื่องมือเสริมอื่นๆ มาอีก น่าจะทำให้เจ้า FLUX นี่น่าจะกินส่วนแบ่งของการ Gen AI มาได้พอสมควรเลย อย่างไรก็ตามมันก็กิน Spec คอมพ์เยอะด้วย ตรงนี้คือจุดอ่อน (ณ ตอนนี้)

    • จัดการปัญหา หัวตารางหลายชั้น (Multi-row Headers) ด้วย Power Query

      จัดการปัญหา หัวตารางหลายชั้น (Multi-row Headers) ด้วย Power Query

      🔍 คุณเคยเจอปัญหาหัวตารางหลายชั้นที่ดูยุ่งเหยิงไม่เป็นระเบียบหรือไม่? ในคลิปนี้เราจะมาเรียนรู้วิธีจัดการกับปัญหานี้ด้วย Power Query กัน!

      📊เราจะใช้ตัวอย่างไฟล์ที่มีหัวตาราง 3 ชั้นที่ merge กันไปมาอย่างซับซ้อน และแปลงให้เป็นตารางที่สวยงามและใช้งานได้ง่าย

      โหลดไฟล์ประกอบได้ที่นี่ : https://github.com/…/YouTube/blob/main/multi-headers.xlsx

      Link VDO ที่นี่ : https://youtu.be/sDRMUqTGWPA

      🔧 คุณจะได้เรียนรู้เทคนิคขั้นสูงมากมาย เช่น:

      • การใช้ Transpose เพื่อจัดการโครงสร้างข้อมูล
      • การ Merge Columns อย่างชาญฉลาด
      • เทคนิคการ Trim อักขระพิเศษ ด้วยการระบุอักขระใน Text.Trim
      • วิธีการ Replace Value แบบพิเศษ
      • และอีกหลายเทคนิคที่จะช่วยให้คุณจัดการข้อมูลได้อย่างมีประสิทธิภาพ

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

      👨‍💻 อย่าลืมกดไลค์และซับสไครบ์เพื่อติดตามเทคนิคและทริคการใช้ Excel และ Power Query อีกมากมาย!

    • Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️

      สวัสดีครับวันนี้เราจะมาพูดถึงเครื่องมือสุดวิเศษที่หลายคนอาจจะเคยได้ยินชื่อ แต่ยังไม่กล้าลองใช้ นั่นก็คือ Power Query นั่นเอง! ซึ่งในบทความนี้ผมจะสอนคุณใช้งานแบบง่ายๆ Step-by-step แบบว่าทำตามได้แน่นอน 100% 🎉

      🪄 Power Query คืออะไร? ทำไมถึงวิเศษนัก?

      Power Query ไม่ใช่แค่เครื่องมือธรรมดาๆ ใน Excel แต่เป็นเหมือนคาถาวิเศษที่จะเสกให้งานของคุณสำเร็จราวกับใช้เวทมนตร์! มันช่วยให้คุณรวม จัดการ และแปลงข้อมูลจากหลายแหล่งได้อย่างง่ายดาย เหมือนกับการโบกไม้กายสิทธิ์!

      แต่ทำไมหลายคนถึงยังไม่กล้าลองใช้ล่ะ? 🤔 บางคนอาจจะคิดว่ามันยากเกินไป บางคนอาจจะกลัวว่าจะใช้ไม่เป็น แต่เชื่อเถอะครับว่า Power Query นั้นใช้งานง่ายกว่าที่คุณคิด และประโยชน์ที่ได้นั้นคุ้มค่ามากๆ!

      หลายคนที่ได้ลองใช้ Power Query แล้ว บอกเป็นเสียงเดียวกันว่า มันง่ายกว่าเขียนสูตร Excel เยอะเลย!

      🌟 ทำไมต้อง Power Query? เพราะมันวิเศษแบบนี้!

      1. รวมข้อมูลจากทุกที่ในพริบตา! 🌪️ ไม่ว่าข้อมูลของคุณจะกระจัดกระจายอยู่ที่ไหน เช่น Excel หลายๆ ไฟล์? ไฟล์ CSV? ฐานข้อมูล SQL? หรือแม้แต่ข้อมูลจากเว็บไซต์? Power Query ก็สามารถดึงมารวมกันได้อย่างเนียนๆ ไม่ต้องใช้การก็อปวางอีกต่อไป!
      2. ทำความสะอาดข้อมูลง่ายราวกับใช้ด้วยเวทมนตร์! 🧼✨ ลาก่อนข้อมูลสกปรก! Power Query จะช่วยคุณจัดการกับข้อมูลที่ดูยุ่งเหยิงให้เป็นระเบียบในพริบตา ไม่ว่าจะเป็นการแยกคอลัมน์ การเปลี่ยนชื่อ หรือแม้แต่การจัดรูปแบบข้อมูล ทำได้หมด ขอให้เป็นเรื่องการเตรียมจัดการข้อมูลให้เรียบร้อย!
      3. อัพเดตอัตโนมัติด้วยคาถาเดียว! 🔄 เมื่อคุณกำหนด Step การทำงานกับข้อมูลที่ต้องการเสร็จแล้ว ในครั้งต่อไป แค่กดปุ่ม “Refresh” ข้อมูลก็จะถูกอัพเดตเองตาม Step การทำงานที่บันทึกไว้ ซึ่งประหยัดเวลาได้มหาศาล! ไม่ต้องมานั่งทำซ้ำๆ ใหม่อีกต่อไป!
      4. รองรับข้อมูลใหญ่ๆ แบบไม่มีสะดุด! 💪 ข้อมูลเป็นล้านแถว? ไม่มีปัญหา! Power Query จัดการได้สบายมาก ไม่ต้องกลัว Excel จะค้างหรือช้าเหมือนตอนเขียนสูตรหนักๆ อีกต่อไป!
      5. ทำงานร่วมกับ Power BI ได้อย่างธรรมชาติ! 🔗 เชื่อมต่อกับ Power BI ได้ราวกับมีสายใยเวทมนตร์เชื่อมโยงกัน! ช่วยให้การเตรียมข้อมูลก่อนนำไปวิเคราะห์ใน Power BI เป็นเรื่องง่ายสุดๆ

      ข้อมูลที่เราต้องเอามาทำรายงานยังไม่เรียบร้อย

      สมมติว่าเรามีข้อมูลที่ต้องเอามาทำรายงานประจำ โดย Export ออกมาจากระบบเป็นไฟล์ Excel ชื่อ data.xlsx หน้าตาแบบนี้

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 334

      ซึ่งมีหลายเรื่องที่เราอยากจัดการให้เรียบร้อย เช่น

      • จัดการหัวตารางให้ถูกต้อง
      • ถมข้อมูลในคอลัมน์สินค้าให้เต็ม
      • คอลัมน์ลูกค้า มีการเคาะเว้นวรรคติดมา
      • เปลี่ยนชื่อคอลัมน์ จำนวนชิ้น เป็น Qty
      • อยากแก้วิธีการชำระเงิน เครดิตการ์ด ->Credit

      มาลองใช้ Power Query กันเถอะ! เริ่มต้นง่ายนิดเดียว!

      ถ้าคุณเคยได้ยินเกี่ยวกับ Power Query แต่ยังไม่เคยลองใช้ ถึงเวลาแล้วที่จะต้องลองดู! เริ่มต้นง่ายๆ แค่นี้:

      1.เปิด Excel ไฟล์เปล่าอันใหม่ แล้วไปที่แท็บ ‘Data’

      เหมือนกับการเปิดประตูสู่โลกแห่งเวทมนตร์! 🚪✨
      Tips : เวลาใช้ Power Query เราไม่ควรทำในไฟล์ดิบต้นฉบับ เพราะจะอัปเดทยาก และเราก็จะไม่เปิดไฟล์ต้นฉบับทิ้งไว้ด้วยนะ ใครเปิดอยู่ก็ปิดซะ

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 335

      2. คลิกที่ ‘Get Data’ ปุ่มวิเศษที่จะพาคุณเข้าสู่โลกของ Power Query

      แล้วเลือกแหล่งข้อมูลที่คุณต้องการ – จะเป็นไฟล์ Excel, CSV, ฐานข้อมูล SQL, Website, หรือแม้แต่ PDF ก็ได้!

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 336

      ซึ่งในที่นี้เราจะเลือก Get Data -> From File -> Excel Workbook นะ จากนั้นติ๊กเลือกเอา Sheet หรือ Table ที่ต้องการแล้วกด Transform

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 337

      3. ยินดีต้อนรับสู่ Power Query Editor!

      นี่แหละคือห้องทดลองเวทมนตร์ของคุณ! 🧪 ซึ่งมีเครื่องมือและคาถามากมายให้คุณเลือกใช้

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 338
      • เครื่องมือที่คุณใช้ตรงนี้จะถูกบันทึกเป็น Applied Steps ที่ด้านขวา เป็นคาถาภาษา M Code โดยอัตโนมัติ
      • การใช้ Power Query เบื้องต้นคุณไม่ต้องเขียน MCode เอง เพราะโปรแกรมทำให้ แต่ถ้าคุณอยากเจาะลึก คุณก็ศึกษาคาถา M Code เพื่อให้ทำเรื่องเจ๋งๆ มากขึ้นได้อีก
      • การที่มันบันทึก Step M Code ไว้ เพื่อให้คุณสามารถใช้คาถาพิเศษ ที่ชื่อว่า “Refresh” เสกสั่งทำงานซ้ำได้อีกครั้งในอนาคตได้แบบสบายๆ

      4. ตรวจสอบคาถาที่ถูกสั่งไว้เดิม

      อ๊ะๆ แต่ก่อนจะเสกคาถาเพิ่มเข้าไป เราควรตรวจสอบก่อนว่ามีคาถาอะไรถูกสั่งไว้แบบไม่จำเป็น หรือ สั่งไว้ผิดๆ หรือไม่?

      ซึ่งในที่นี้ คำสั่ง Promote Headers กับ Changed Type ถูกสั่งกับหัวตารางผิดตัว (ดันไปเอาข้อมูลการขายของเป็นหัวตาราง)

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 339

      ดังนั้นเราจะกดกากบาทเอา Step นั้นออกไปก่อน สุดท้ายจะเหลือแค่ Source กับ Navigation ที่ทำให้เหลือข้อมูลที่เห็นใน Sheet ตามปกติ โดยยังไม่ได้มีการจัดการหัวตาราง

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 340

      5. ใช้คาถาต่างๆ เพื่อแปลงข้อมูลตามต้องการ

      5.1 หลักการโดยทั่วไปใน Power Query เราจะพยายามจัดการหัวตารางให้มันถูกต้องก่อน ค่อยทำอย่างอื่นต่อ (ซึ่งตรงนี้จะจุกจิกนิดนึง แต่ถ้าผ่านไปได้ ต่อไปจะง่ายแล้ว)

      ซึ่งเราจะพบว่าข้อมูลในคอลัมน์แรกนั้นไม่จำเป็น เราจะเลือกคอลัมน์แรกแล้วกดปุ่ม Del บน Keyboard แล้วมันก็จะหายไปแบบง่ายๆ ซึ่งจะพบว่ามี Step Remove Columns โผล่มาที่ด้านขวา และมีคาถา M Code ถูกบันทึกไว้ด้วยว่าให้ลบคอลัมน์ที่ชื่อว่า Column1

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 341

      การจัดการหัวตารางมันจะมีคำสั่ง Use First Rows as Headers ซึ่งสามารถทำให้ข้อมูลบรรทัดแรกเป็นหัวตารางได้ แต่ สินค้า, Order Date,… ดันอยู่แถวที่ 3 ไม่ใช่แถวแรก

      ดังนั้นเราจะลบ 2 แถวบนออก โดยกดปุ่ม Remove Rows -> Remove Top Rows แล้วระบุว่าเอาออก 2 แถว

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 342

      จากนั้นกด Home -> Use First Rows as Headers

      เราจะได้ Step Promote Headers มา แล้วมันจะแถม Step Change Types ซึ่งคือการเปลี่ยนประเภทข้อมูลแต่ละคอลัมน์ให้เราด้วย (ซึ่งในที่นี้ดีแล้ว)

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 343

      5.2 เมื่อหัวตารางถูกต้อง เราจะจัดการเรื่องอื่นได้ง่ายแล้ว ได้เวลาลุย! 😆

      ต่อไปเราจะถมข้อมูลในคอลัมน์สินค้าให้เต็ม โดยคลิ๊กขวาที่คอลัมน์สินค้า แล้วเลือก Fill->Down ทำง่ายๆ แค่นี้เลย!

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 344
      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 345

      ที่คอลัมน์ลูกค้า เราจะจัดการเคาะเว้นวรรคติดมา ด้วยการคลิ๊กขวาที่คอลัมน์ลูกค้า -> Transform -> Trim

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 346

      หากต้องการเปลี่ยนชื่อคอลัมน์ จำนวนชิ้น เป็น Qty สามารถทำง่ายๆ ด้วยการดับเบิ้ลคลิ๊กที่ชื่อคอลัมน์จำนวนชิ้น แล้วแก้ได้เลย

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 347

      อยากแก้วิธีการชำระเงิน เครดิตการ์ด ->Credit สามารถทำได้ง่ายๆ โดยคลิ๊กขวาที่คอลัมน์ วิธีการชำระเงิน แล้วเลือก Replace Values…

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 348

      เปลี่ยนชื่อ Query ให้เรียบร้อยซักนิด

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 349

      6. ถ้าพอใจกับผลลัพธ์แล้วก็โหลดผลลัพธ์ไปใน Excel

      กด Home -> ‘Close & Load’ เพื่อโหลดข้อมูลออกไปใน Excel เป็น Table

      หรือสามารถกด Close & Load To… เพื่อเลือกว่าจะเอาผลลัพธ์ออกไปเป็นอย่างอื่นได้ (เช่น Pivot หรือ พวก Data Model)

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 350
      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 351

      แค่นี้ ข้อมูลของคุณพร้อมใช้งานแล้ว! 🎩✨

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 352

      การอัปเดทข้อมูลในอนาคต

      หากมีการแก้ข้อมูลต้นฉบับ เราสามารถกดคลิ๊กขวา Refresh ที่ตารางผลลัพธ์นี้ หรือ Data -> Refresh All ได้เลย แล้ว Query ก็จะทำงานอีกครั้งแบบสบายๆ

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 353

      ถ้าข้อมูลต้นฉบับมีการเปลี่ยนชื่อไฟล์ หรือ เปลี่ยนตำแหน่งที่วางไฟล์

      ให้เราไปแก้ไปที่ Data -> Get Data -> Data Source Setting

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 354

      แล้วเลือก Source ข้อมูลที่ต้องการแก้ไข แล้วกด Change Source ได้เลย ก็จะ Refresh ได้แล้ว

      ทำไมคุณถึงควรเริ่มใช้ Power Query ตั้งแต่วันนี้?

      1. ประหยัดเวลามหาศาล ⏰ – งานที่เคยใช้เวลาเป็นชั่วโมงจะเสร็จในพริบตา!
      2. ลดความผิดพลาดเหมือนมีตาทิพย์ 🎯 – ไม่มีความผิดพลาดจากการทำงานด้วยมืออีกต่อไป!
      3. เพิ่มประสิทธิภาพการทำงานราวกับมีพลังวิเศษ 📈 – มีเวลาวิเคราะห์ข้อมูลได้ลึกซึ้งยิ่งขึ้น!
      4. สร้างความประทับใจให้ทีมและหัวหน้าราวกับเป็นจอมเวทแห่ง Excel 🌟
      5. เตรียมพร้อมสำหรับอนาคตด้วยพลังแห่งการทำนาย 🔮 – ทักษะ Power Query เป็นที่ต้องการมากขึ้นเรื่อยๆ! และยังต่อยอดไป Power BI ได้สบายๆ

      สรุป: Power Query = เวทมนตร์ที่คุณสามารถใช้ได้แล้ว แค่ต้องลอง!

      อย่าปล่อยให้โอกาสในการเรียนรู้เวทมนตร์ Power Query หลุดลอยไป! มันจะทำให้การทำงานกับ Excel ของคุณกลายเป็นเรื่องสนุกและง่ายดายราวกับการมีเวทมนตร์! 🎩✨

      เริ่มต้นใช้งาน Power Query วันนี้ และกลายเป็นจอมเวทแห่ง Excel! 🧙‍♀️🧙‍♂️

      เริ่มต้นใช้งาน Power Query วันนี้!

      ถ้าติดขัดตรงไหน อย่าเพิ่งท้อ! ดูคลิป YouTube สอนการใช้งาน Power Query แบบละเอียดของผมได้ที่ลิงก์ด้านล่างนี้

      ลองใช้ Power Query ดูสิ แล้วคุณจะรู้ว่าทำไมเราถึงบอกว่ามันเทพ! ใครใช้แล้วชีวิตดี อย่าลืมบอกต่อเพื่อนๆ ด้วยนะ

    • EXCEL LEVEL UP WORKSHOP 2024 โดย เทพเอ็กเซล

      EXCEL LEVEL UP WORKSHOP 2024 โดย เทพเอ็กเซล

      ยกระดับทักษะ Excel ของคุณกับ Workshop ที่ออกแบบมาเพื่อตอบโจทย์ทุกความต้องการ!

      • เรียนรู้ Excel ตั้งแต่พื้นฐานแบบความรู้แน่นๆ
      • แนวทางการใช้ AI Chatbot เพื่อแก้ปัญหา Excel ในชีวิตจริง
      • แนวทางการเตรียมข้อมูลอัตโนมัติ Intro to Power Query

      เลือกรูปแบบที่เหมาะกับคุณ พิเศษ มา 2 ท่าน 🧑‍🤝‍🧑 ราคาถูกลง!!

      สอบถามรายละเอียดเพิ่มเติมเกี่ยวกับ Workshop ได้ที่ LINE: @ThepExcelTraining

      📚 เนื้อหาการอบรม

      1. หลักการทำงานของ Excel และเทคนิคการใช้งาน
        • ความต่างของค่าที่แท้จริง vs สิ่งที่เห็น
        • คีย์ลัดที่ใช้บ่อยเพื่อทำงานเร็วขึ้น
        • การจัดการวันที่และเวลาอย่างถูกต้อง
        • เทคนิคการจัดการข้อความให้เรียบร้อย
      2. ฟังก์ชันสำคัญใน Excel ที่จำเป็นต้องใช้ให้เป็น
        • ฟังก์ชันเกี่ยวกับวันที่
        • ฟังก์ชันเกี่ยวกับข้อความ
        • การเขียนเงื่อนไข IF ผสม AND / OR
        • การใช้ VLOOKUP / XLOOKUP อย่างมีประสิทธิภาพ
      3. การวิเคราะห์สรุปข้อมูลแบบลึกซึ้ง
        • การคำนวณสรุปด้วยสูตร SUMIFS และเพื่อนๆ
        • การใช้งาน PivotTable เพื่อสรุปข้อมูล
        • การใช้ Conditional Format เพื่อเน้นข้อมูลสำคัญ
      4. ฺBonus เพื่อยกระดับความเจ๋งขึ้นไปอีก
        • แนวทางในการใช้ AI Chatbot แก้ปัญหาต่างๆ ใน Excel
        • วิธีเตรียมฐานข้อมูลที่ถูกต้อง
        • การใช้ Power Query เบื้องต้น เพื่อเตรียมข้อมูลก่อนส่งให้ Pivot Table ต่อไป

      และคุณจะได้เรียนรู้ 10 เทคนิคสำคัญใน Excel ยุคใหม่เหล่านี้ด้วย!!

      🚀 10 เทคนิคใหม่ใน Excel ที่น่าลอง: เพิ่มประสิทธิภาพการทำงานของคุณ

      Excel เป็นโปรแกรมที่พัฒนาอย่างต่อเนื่อง มีฟีเจอร์ใหม่ๆ เพิ่มเข้ามาเสมอ วันนี้เรามาดู 10 เทคนิคที่น่าสนใจ ซึ่งอาจช่วยให้งานของคุณง่ายขึ้นได้

      1. 🧙‍♂️ Flash Fill และ TEXTSPLIT: ทางเลือกใหม่ในการแยกข้อมูล

      • Flash Fill ใช้ AI เรียนรู้รูปแบบการแยกข้อมูลอัตโนมัติ
      • TEXTSPLIT แยกข้อความตามตัวคั่นที่กำหนดได้อย่างยืดหยุ่น

      2. 🔍 XLOOKUP: ฟังก์ชันค้นหาที่ทำได้มากกว่า

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

      3. 🔄 Power Query: จัดการข้อมูลขั้นสูงและ Automate งาน

      • เชื่อมต่อและรวมข้อมูลจากหลายแหล่ง
      • ทำความสะอาดและแปลงข้อมูลได้อย่างมีประสิทธิภาพ
      • Refresh ข้อมูลอัตโนมัติ ช่วย automate งานประจำได้สบายๆ
      • เกิดมาทำงานคู่กับ Pivot Table และ Power Pivot

      4. 📊 Power Pivot: วิเคราะห์ข้อมูลขนาดใหญ่ ทำลายขีดจำกัด Pivot ปกติ

      • ทำ Pivot ได้จากหลายตารางที่มีความสัมพันธ์กันได้
      • เพิ่มคอลัมน์ในตารางของ Data Model ได้ ด้วยภาษา DAX
      • สร้าง Measures สำหรับการวิเคราะห์ขั้นสูง โดยเขียนสูตรใน Pivot ได้อย่างยืดหยุ่น โดยใช้ภาษา DAX

      5. 🌳 IFS และ SWITCH: ทางเลือกสำหรับเงื่อนไขซับซ้อน

      • IFS รองรับหลายเงื่อนไขได้อย่างเป็นระเบียบ
      • SWITCH เหมาะสำหรับการเปรียบเทียบค่าเดียวกับหลายกรณี

      6. 🧵 TEXTJOIN: รวมข้อความอย่างชาญฉลาด

      • รวมข้อความจากหลายเซลล์พร้อมกำหนดตัวคั่น
      • สามารถเลือกข้ามเซลล์ว่างได้

      7. 🔀 Dynamic Array Functions: ฟังก์ชันที่ปรับขนาดอัตโนมัติ

      • FILTER, SORT, UNIQUE ช่วยจัดการข้อมูลได้อย่างยืดหยุ่น
      • ผลลัพธ์ปรับขนาดตามข้อมูลโดยอัตโนมัติ

      8. 📊 Structured References: อ้างอิงข้อมูลใน Table อย่างชาญฉลาด

      • ใช้กับโครงสร้างแบบ Table ใน Excel
      • ใช้ชื่อคอลัมน์แทนตำแหน่งเซลล์ ทำให้สูตรอ่านง่ายขึ้น
      • สูตรปรับตัวอัตโนมัติเมื่อขนาดของ Table เปลี่ยนแปลง

      9. 🏷️ LET Function: สร้างตัวแปรในสูตร

      • ใช้ตั้งชื่อให้กับค่าหรือการคำนวณย่อยในสูตร
      • ช่วยให้สูตรซับซ้อนอ่านง่ายขึ้น
      • ลดการคำนวณซ้ำ เพิ่มประสิทธิภาพ

      10. 🛠️ LAMBDA Function: สร้างฟังก์ชันของคุณเอง

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

      เทคนิคเหล่านี้อาจช่วยให้งาน Excel ของคุณมีประสิทธิภาพมากขึ้น แต่จำไว้ว่าวิธีที่ดีที่สุดคือวิธีที่เหมาะกับงานและสไตล์การทำงานของคุณ ลองศึกษาและทดลองใช้ดู คุณอาจพบวิธีใหม่ๆ ที่ช่วยให้งานของคุณง่ายขึ้นก็ได้! 🎉

      👨‍🏫 วิทยากร:

      ⏰ เลือกรูปแบบที่คุณสะดวก

      แบบ 1: ONSITE เต็มวัน (2วัน)

      • วันที่: 17-18 ส.ค. 2024 (เสาร์-อาทิตย์)
      • เวลา: 9:00 – 17:00 น.
      • สถานที่: True Digital Park (TDPK)[เชื่อมกับ BTS ปุณณวิถี] [Location]
      • ราคา:
        • ราคาปกติ 8,000 บาท/ท่าน (รวม Vat)
        • มาตั้งแต่ 2 ท่านขึ้นไป : 7,500 บาท/ท่าน (รวม Vat)
        • 2 Break เช้าและบ่าย
          (**ไม่รวมอาหารกลางวัน ซึ่งใน True Digital Park (TDPK) มีร้านอาหารมากมายให้ท่านสามารถเลือกสรรได้ตามต้องการ**)
      • จุดเด่น:
        • เจอกับวิทยากรแบบ face-2-face
        • เรียนกันเข้มข้น สามารถเก่งขึ้นได้ภายใน 2 วัน
        • โอกาสในการ Networking กับวิทยากรและผู้เข้าอบรมท่านอื่น

      แบบ 2: LIVE ONLINE วันละ 2 ชม. (6วัน)

      • วันที่: 13-15 ส.ค. 2024 และ 20-22 ส.ค. 2024 (อังคาร-พฤหัสบดี)
      • เวลา: 20:00 – 22:00 น. (เรียนสด)
      • ช่องทาง: Live Online ผ่าน Zoom (เรียนสด)
      • ราคา:
        • ราคาปกติ 5,500 บาท/ท่าน (รวม Vat)
        • มาตั้งแต่ 2 ท่านขึ้นไป : 5,000 บาท/ท่าน (รวม Vat)
      • จุดเด่น:
        • เรียนผ่านระบบ Live Online จากที่ไหนก็ได้ ถามคำถามสดๆ ได้
        • แบ่งเรียน 6 คืน (ใน 2 สัปดาห์) ไม่เหนื่อยเกินไป
        • เหมาะสำหรับคนที่ไม่สะดวกมาอบรมในวันหยุด

      🎁 สิ่งที่ผู้เข้าอบรมจะได้รับ

      • ใบรับรองการอบรมแบบดิจิทัล (PDF)
      • โอกาสถามคำถามและแก้ไขปัญหาหลังการอบรม
      • เอกสารประกอบการอบรมแบบดิจิทัล (ไฟล์ Excel ประกอบการอบรม และ Slide PDF)
      • สิทธิ์เข้ากลุ่ม Facebook Group พิเศษ ที่จัดให้คนลง Workshop กับเทพเอ็กเซลเท่านั้น
      • สิทธิ์รับชมคลิป VDO ย้อนหลัง เอาไว้ทบทวนหลังการอบรม (ดูผ่าน Facebook Group พิเศษเท่านั้น)
      • สิทธิ์เข้าร่วม Live Online Q&A session ปรึกษาปัญหา Excel ในงานของคุณ หลังจบคอร์ส ฟรี! (แจ้งวันภายหลัง)

      สิ่งที่ต้องเตรียม

      • Notebook ที่ติดตั้ง Excel (เวอร์ชัน 2016 ขึ้นไป แนะนำ Excel 365)
      • สำหรับผู้เข้าอบรม Onsite: สามารถเช่า Notebook ได้ (เลือกในแบบฟอร์มใบสมัคร)
        • ในราคา 1,000 บาท/คน /2 วัน ( หากรวม vat = 1,070 บาท)

      รายละเอียดการชำระเงิน

      ผู้เข้าอบรมทุกท่านจะได้รับใบประกาศนียบัตรและใบกำกับภาษีเต็มรูปแบบ สามารถออกใบกำกับภาษีในนามบริษัทเพื่อใช้เบิกค่าใช้จ่ายได้

      โดยทางเทพเอ็กเซลจะส่งใบเสร็จรับเงิน/ใบกำกับภาษีให้ทาง email ผ่านระบบ e-tax invoice by email ซึ่งเป็นวิธีที่ทางกรมสรรพากรอนุญาตให้ใช้ได้

      ราคาค่าอบรม (มา 2 คนได้รับส่วนลด!)

      กรณีชำระในนามบุคคล

      • ค่าอบรมแบบ 1 : Onsite เสาร์-อาทิตย์ เต็มวัน
        • มา 1 ท่าน : 8,000 บาท/ท่าน  (รวม VAT แล้ว)
        • มา 2 ท่านขึ้นไป : 7,500 บาท/ท่าน  (รวม VAT แล้ว)
      • ค่าอบรมแบบ 2 : Live Online อังคาร-พฤหัส กลางคืน 6 วัน x วันละ 2 ชม.
        • มา 1 ท่าน : 5,500 บาท/ท่าน (รวม VAT แล้ว )
        • มา 2 ท่านขึ้นไป : 5,000 บาท/ท่าน  (รวม VAT แล้ว)

      กรณีชำระในนามนิติบุคคล (มี หัก ณ ที่จ่าย 3%)

      • ค่าอบรมแบบ 1 : Onsite เสาร์-อาทิตย์ เต็มวัน  
        • มา 1 ท่าน : 8,000 บาท/ท่าน  (รวม VAT แล้ว)
          • หัก ณ ที่จ่าย 3% = 224.30 บาท
          • 7,775.70 บาท/ท่าน (รวม VAT และหัก ณ ที่จ่าย 3% แล้ว)
        • มา 2 ท่านขึ้นไป : 7,500 บาท/ท่าน  (รวม VAT แล้ว)
          • หัก ณ ที่จ่าย 3% = 210.28 บาท
          • 7,289.72 บาท/ท่าน (รวม VAT และหัก ณ ที่จ่าย 3% แล้ว)
      • ค่าอบรมแบบ 2 : Live Online อังคาร-พฤหัส กลางคืน 6 วัน x วันละ 2 ชม.
        • มา 1 ท่าน : 5,500 บาท/ท่าน (รวม VAT แล้ว )
          • หัก ณ ที่จ่าย 3% = 154.21 บาท
          • 5,345.79 บาท/ท่าน (รวม VAT และหัก ณ ที่จ่าย 3% แล้ว)
        • มา 2 ท่านขึ้นไป : 5,000 บาท/ท่าน (รวม VAT แล้ว )
          • หัก ณ ที่จ่าย 3% = 140.19 บาท
          • 4,859.81 บาท/ท่าน (รวม VAT และหัก ณ ที่จ่าย 3% แล้ว)

      ช่องทางการชำระเงิน

      ชำระเงินโดยการโอนเงินค่าอบรมมาที่
      บัญชี ออมทรัพย์ : บริษัท เทพเอ็กเซล จำกัด
      ธนาคารไทยพาณิชย์ (SCB)

      สาขา บิ๊กซี สะพานควาย
      033-421749-2

      *** ถ้าชำระเงินเผื่อคนอื่นด้วย กรุณากรอกในหมายเหตุ ***

      วิธีการสมัคร

      1. คลิกที่ปุ่ม “สมัครเลย” หรือ link ด้านล่าง (สามารถสมัครและชำระเงินทีเดียวหลายคนได้)
      2. ชำระเงินตามวิธีที่ระบุในรายละเอียดการชำระเงิน (ส่วนลด Early Bird ได้ถึง 25 ก.ค. นี้)
      3. กรอกข้อมูลในแบบฟอร์มให้ครบถ้วน และแนบหลักฐานการชำระเงินในแบบฟอร์ม
      4. รอรับการยืนยันทาง email ภายใน 24 ชั่วโมง

      https://forms.gle/V8KmSAagUYQfoZY96

      สอบถามรายละเอียดเพิ่มเติมเกี่ยวกับ Workshop ได้ที่ LINE: @ThepExcelTraining

    • แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3

      บอกตามตรงว่าหนึ่งในสิ่งที่ผมชอบที่สุดในเกม Baldur’s Gate 3 คือการที่ Level Up แล้วเราสามารถเปลี่ยนอาชีพโดยการเพิ่ม Subclass ได้ รวมถึงการยอมให้เราสามารถ Respec Class ตัวละครได้ทุกตัว เพื่อเปลี่ยน Ability รวมถึงอาชีพและการอัป Skill ใหม่ตั้งแต่ต้น

      ดังนั้น ในบทความนี้เราจะลองมาสำรวจกันว่า ถ้าเราจะ Respec เพื่อสร้าง Build ตัวละครใหม่ มีแนวทางไหนน่าสนใจ และถ้าเราต้องการ Optimize ค่าบางอย่างในการ Level Up จนเต็ม Level 12 มีแนวทางคำนวณยังไงใน Excel

      ซึ่งขอออกตัวก่อนว่า การ Build ตัวละครใน BG3 นั้น ไม่มีสิ่งที่เรียกว่าดีที่สุด เพราะมันขึ้นกับความชอบส่วนตัวของเราเองด้วย ดังนั้นอ่านบทความนี้แล้ว ถ้าใครเห็นต่างจากแนวทางที่ผมบอก ก็สามารถ Comment แชร์ไอเดียกันได้เต็มที่นะครับ ^^

      วิธีการ Respec Class ตัวละคร

      เพียงแค่จ่ายตัง 100 ให้กับ Withers (ลุงกระดูก) ที่อยู่ใน Camp ของเรา ซึ่งเค้าจะโผล่มาหลังผ่านเควส Explore the Ruins (Dank Crypt) ในช่วงแรกๆ

      ซึ่งเราจะ Respec ตัวละครเราได้เสมอ เมื่อไหร่ก็ได้ ตัวไหนก็ได้ (ทุกตัว Level พอๆ กัน แม้ไม่ได้เอามาสู้)

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 355

      Tips

      เราสามารถขโมยตังจาก Wither คืนเมื่อไหร่ก็ได้ (มันไม่โกรธ ไม่สนใจด้วยซ้ำ) ดังนั้นมันคือตู้ ATM เคลื่อนที่ชัดๆ 555 (ตอนที่ผมเพิ่งรู้ว่าขโมยคืนได้นี่ได้คืนที 3000 เลย สะสมมานานจัด 555)

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

      เรื่องของ Level Up

      เรื่องสำคัญที่ควรรู้คือ

      • Level สูงสุดของตัวละครแต่ละตัว คือ Level 12 เท่านั้น
      • ในแต่ละการ Level Up เราจะเปลี่ยน Class (อาชีพ) เป็นอะไรก็ได้เลย ต่างกันในแต่ละ Level ได้ (เรียกว่า Multi-Class) ไม่ได้มีเกณฑ์ Attribute ขั้นต่ำของแต่ละอาชีพ (แต่จะเหมาะป่าวอีกเรื่อง)
        • สมมติเป็น Monk 6 Level + Rogue 3 Level + Fighter 3 Level แบบนี้ได้ เพราะรวมกันไม่เกิน 12 เป็นต้น (ตอนอัปสลับลำดับไปมาได้)
        • หรือจะบ้าบอทั้ง 12 Level เป็นคนละ Class กันหมดเลยก็ได้ (มี 12 Class พอดี)
      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 358
      เพิ่ม Class (Multi-class กดตรงนี้)
      • แต่ละ Class จะมี Proficiency ที่ต่างกันไป เช่น ใส่เกราะ หรืออาวุธที่ถนัดต่างกัน
      • แต่ละ Class เมื่อถึงจุดหนึ่งจะเลือก Subclass (อาชีพย่อย) ได้อีก ซึ่งจะมี Skill แตกต่างกัน และมีความสามารถเฉพาะทาง นั่นคือแตกแขนงความเป็นไปได้ออกไปอีก
      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 359
      อัปยังไงก็ได้ ให้ Level แต่ละ Class รวมกันไม่เกิน 12
      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 360
      Multiclass แบบบ้าบอ คือเป็นทุกอาชีพ แต่ Level 1 หมดเลย 555

      เป้าหมายในบทความนี้

      เวลาเราจะ Optimize อะไรก็ตาม เราจะต้องมีเป้าหมายที่อยากได้ ซึ่งในบทความนี้ สมมติว่าการ Build ตัวละครผมมีเป้าหมายหลักๆ ที่จะได้ 4 เรื่อง คือ

      • Feat
      • Extra Attack
      • Action Surge
      • Bonus Attack

      Feat

      แต่ละ Class เมื่อ Level Up ถึงจุดหนึ่ง จะสามารถเลือก Feat ได้ (ขึ้นกับ Class Level ไม่ใช่ Character Level) เพื่อกำหนดแนวทางพัฒนาความสามารถของตัวละครได้หลายแบบ (ทุก Class มี Feat. ให้เลือกแบบเดียวกัน)

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 361

      โดยที่แต่ละ Class จะมีจุดที่เลือก Feat. ได้หลายรอบ

      • ทุก Class สามารถเลือก Feats ได้ตอน Level 4, 8 และ 12
      • Fighter : ได้เลือกเพิ่มที่ Level 6
      • Rogue : ได้เลือกเพิ่มที่ Level 10

      ดังนั้นสรุปได้ดังนี้

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 367

      การที่เกมออกแบบมาแบบนี้ แปลว่า ถ้าเราอยากได้ Feat 4 รอบ มีอยู่ 2 แนวทาง (ซึ่งอันนี้ไม่ต้อง Optimize ใน Excel ก็พอคิดได้ ถ้าเราเห็นภาพแบบนี้) คือ

      • ต้องเป็น Fighter หรือ Rogue ล้วนทั้ง 12 Level
      • เป็น Fighter 8 Level แล้ว Multiclass เป็นอาชีพอื่นอีก 4 Level

      อย่างไรก็ตาม ยังมีอีกปัจจัยที่สำคัญมาก ก็คือ หลายๆ Class จะมีความสามารถพิเศษที่ดีมากๆ ในบาง Level ทำให้การตัดสินใจ Multiclass ยากขึ้นไปอีก!!

      ตัวอย่างความสามารถพิเศษที่ส่งผลมากๆ เลยอันหนึ่งคือเรื่องของ Extra Attack รวมถึงพวก Bonus Action เพิ่มเติม

      เพิ่ม Extra Attack

      คือความสามารถที่ถ้าเราใช้ Action ทำการ Attack ศัตรูแล้ว เราจะใช้ Extra Attack เพื่อโจมตีเพิ่มเติมได้! ซึ่งดีมากๆ

      ซึ่ง Extra Attack นั้นสามารถได้มาจากหลากหลายวิธีการ เช่น

      • Barbarian : level 5
      • Bard (College of Valour หรือ College of Swords) : level 6
      • Fighter : level 5 (Extra 1 รอบ) และ level 11 (Extra 2 รอบ)
      • Monk : level 5
      • Paladin : level 5
      • Ranger : level 5
      • Warlock (Pact of the Blade) : level 5 *

      *หมายเหตุ : ปกติแล้ว Extra Attack จะมีผลแค่จากอาชีพเดียวเท่านั้น (ไม่ Stack กัน) ยกเว้น Deepened Pact ของ Warlock (Pact of the Blade) ที่ดัน Stack กับ Extra Attack ของ Class อื่นได้ (ยกเว้นความยากระดับสูงสุดคือ Honour mode จะไม่ Stack)

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 368

      ที่บอกว่า Extra Attack ของ Warlock มัน Stack กับ Extra Attack ของ Class อื่นได้คือ ต้องทำการ Pack Weapon ใน Main Hand ก่อนนะ นั่นคือมันน่าจะ Stack กับ Unarmed Strike (มือเปล่า) ของ Monk ไม่ได้ [ใครทำได้บอกด้วย]

      ส่วนการตี Extra Attack จะตีด้วยอะไรก็ได้ เข่น ใช้ธนู (ที่ไม่ได้ Pact) ยังได้เลย

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 369

      เพิ่ม Action ด้วย Action Surge

      นอกจาก Extra Attack แล้ว เรายังมีวิธีเพิ่ม Action ได้อีกรอบ ด้วย Action Surge ได้ ด้วยการเป็น Fighter Level 2 นะครับ (แต่ใช้ได้แค่ 1 ครั้งต่อ Short Rest เท่านั้น)

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 370

      เพิ่ม Bonus Action

      นอกจาก Extra Attack กับ Action Surge แล้ว ยังมีอีกความสามารถหนึ่งที่เจ๋งมาก ก็คือ Fast Hand ซึ่งเป็นความสามารถของ Thief (ที่เป็น Subclass ของ Rogue) ซึ่งเลือกได้ตอน Level 3 ซึ่งถ้าเป็น Thief แล้ว เราจะมี Bonus Action 2 อันไปเลย

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 371

      ได้ Bonus Action 2 อันเลย แบบนี้

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 372

      ดังนั้นถ้าสรุปเป็นตารางให้เห็นภาพ ตอนนี้จะเป็นแบบนี้

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 373

      พอเห็นแบบนี้แล้ว จะพบว่านี่คือสาเหตุสำคัญที่ Fighter กับ Rogue นั้นเป็นหนึ่งใน Class ยอดนิยมในการ Multiclass สำหรับการต่อสู้สายกายภาพ เลย เพราะมันให้ของดีมากๆ ตลอดทาง

      แนวทางการ Optimize ใน Excel

      ผมลองผู้สูตรแล้วใช้ Solver เพื่อเลือกว่าจะ Up Class อะไรดี เพื่อให้ได้หลายๆ อย่างตามที่ต้องการ

      ซึ่งสูตรที่เขียนไม่ใช่ Linear จึงใช้ Simplex LP ไม่ได้ ก็เลยต้องใช้ Solver แบบ GRG Non-Linear ซึ่งจะทำงานช้ากว่า และ จะอาจจะไม่ได้จุด Global Optimize ที่แท้จริง

      ดังนั้นผมจะทำการ Group อาชีพที่มีลักษณะการ Attack คล้ายๆ กันเข้าด้วยกัน จะได้คำนวณเร็วขึ้น ได้แบบนี้

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 374
      ภาพรวม
      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 375
      ให้ดูแนวทางการเขียนสูตร
      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 376
      เงื่อนไข Solver

      ผลการแนะนำหลายแบบจาก Solver

      แล้วผมมีการกำหนด Weight ให้แต่ละเรื่อง สุดท้ายลอง Optimize หลายๆ แบบได้ดังนี้

      เน้นที่ภาพรวม

      Weight เป้าหมาย

      Feats : 35%, Action Surge : 15%, Extra Attack : 30%, Bonus Attack : 20%

      สิ่งแรกที่มัน Optimize ตาม Criteria ที่ผมตั้งไว้เลย คือ

      การเป็น Fight12 ทั้ง 12 Level = เป็นแนวทางที่ดีมากอยู่แล้ว

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 377

      zoom ชัดๆ

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 378

      เน้นที่ จำนวน Attack+Extra+Bonus

      Weight เป้าหมาย

      Feats : 10%, Action Surge : 10%, Extra Attack : 45%, Bonus Attack : 35%

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 379

      Fighter 6 + Rogue 6 ก็ได้ Action เยอะสะใจ แถม Feats ก็เยอะ

      ถ้ามีความต้องการเจาะจง

      สมมติว่าเรามีความต้องการเจาะจงบางอย่าง เราก็ระบุลงไปได้ เช่น

      อยากให้ Warlock ขั้นต่ำต้องถึง Level 3 ก็ระบุได้เลย

      Weight เป้าหมาย

      Feats : 25%, Action Surge : 15%, Extra Attack : 40%, Bonus Attack : 20%

      ผลที่ได้บอกว่า Fighter 6 + Warlock 6 ก็จะได้ Feats เยอะด้วย Extra เยอะด้วย

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 380

      สมมติกำหนดว่าจะเป็น Monk + Rogue แบบนี้ก็ให้มันช่วยคิดได้ ว่าจะกี่ Level ดี

      Feats : 30%, Action Surge : 10%, Extra Attack : 40%, Bonus Attack : 20%

      มันแนะนำว่า Monk 8 + Rogue 4 ได้ Feats เยอะดี

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 381

      เปลี่ยน Objective เป็น Damage/Turn

      ถ้าเราเปลี่ยนวิธีคิด Objective ไปเลย ไปใช้การประมาณการ Damage/Turn แทน ก็เป็นแนวทางที่น่าสนใจครับ ซึ่งมีการ Assume Base Damage พื้นฐานเอาไว้ และมีการคิด Factor ตัวคูณสำหรับแต่ละปัจจัย

      เช่น Feat 1 อันจะทำให้ Damage แรงขึ้น 10% (สมมติ) ถ้า 4 อันก็ base *(1+factor)^4 เป็นต้น

      อันนี้โปรแกรมแนะนำเป็น Fighter 12 (มันเก่งแบบง่ายจริงๆ)

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 382

      ซึ่งแบบนี้จะ มี 4 Feats (แต่ละ feat ช่วยให้ Damage พื้นฐานแรงขึ้น) และยังได้ Extra Attack ตีได้หลายที 2 รอบ จากนั้นมี Action Surge ที่ทำให้ทั้ง Attack และ Extra Attack ได้อีกที ซึ่งถ้าทำตามนี้ก็จะมี Bonus Attack ตามปกติแค่นั้นรอบเดียว

      แต่ถ้าอยากให้มี Multiclass มีการ Cap ไว้ไม่ให้ใช้ Class Level 12

      อันนี้แนะนำเป็น Fighter 6 + Warlock 6 (มีการ Cap ไว้ไม่ให้ใช้ Fighter 12)

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 383

      ซึ่งแบบนี้จะ มี 3 Feats และยังได้ Extra Attack จากนั้นมี Action Surge และยังคงมี Bonus Attack รอบเดียวเช่นกัน

      แต่ถ้าลองคิด Build ที่ Action Surge หมด (ไม่มีผล) ดูสิว่ามันจะแนะนำอะไร?

      อันนี้แนะนำเป็น Warlock 5 + Barbarian,Monk,Paladin,Ranger 7
      (หรือจะสลับกันเป็น Warlock 7 ก็ได้)

      แนวทาง Optimize การ Level Up ใน Baldur’s Gate 3 384

      แต่การ Optimize อาจไม่ Make Sense ก็ได้

      โปรแกรมพยายาม Optimize ตามปัจจัยที่ผมเขียนเท่านั้น เช่น Attack, Extra, Bonus, Feats แต่ยังมีอีกหลายปัจจัย ที่จริงๆ แล้วมีผลมากในเกม เช่น

      • Ability Score แต่ละอาชีพเข้ากันหรือไม่?
      • บางทีการอยู่ใน Class อันใดอันหนึ่งเยอะๆ จะยิ่งได้ Damage แรงกว่า เช่น Rogue จะได้ Sneak Attack ที่แรงขึ้นเรื่อยๆ หรือ Warlock จะได้ Eldritch Blast ที่ยิงได้หลายเส้นมากขึ้น (ที่ Level 5 กับ 10) เป็นต้น ตรงนี้ก็ยังไม่ได้เอามาคิด
      • Proficiency ใน equipment item ต่างๆ ได้อย่างที่ต้องการมั๊ย?
      • Skill หรือ Spell มัน combo กัน หรือเสริมกับเพื่อนในทีมได้รึเปล่า? (ในบทความนี้ผมไม่ได้พูดเรื่อง Spell เลยแม้แต่น้อย)
      • เรามี Item ใส่ตัวละครที่เหมาะกับ Class นั้นหรือไม่?
      • อีกเยอะแยะไปหมดดดด

      ถ้าผมอยากจะได้การ Build ตัวละคร ที่ Optimize สุดๆ ผมต้องใส่ปัจจัยพวกนี้มาในสูตรให้หมด ซึ่งก็จะซับซ้อนขึ้นไปอีกมากกกๆๆๆๆๆๆ ซึ่งอาจไม่ Practical แล้ว (ถ้าผมใส่หมดทุกปัจจัย ผมคงไปช่วยเค้าทำเกมดีกว่า 555)

      สรุป

      การจะ Optimize อะไรได้ เราต้องมีความรู้เรื่องนั้นเป็นอย่างดีก่อน จึงจะกำหนดเงื่อนไขได้ถูกต้องและครบถ้วย ยิ่งเงื่อนไขซับซ้อนยิ่งเขียนยาก และอาจจะใช้เวลา Optimize นาน

      ถ้าเราลดทอนความซับซ้อนได้ โดยผลลัพธ์ไม่เพี้ยนจากเดิมมาก ก็จะให้ผลดีมากในชีวิตจริง

      อย่างไรก็ตาม สำหรับเกม BG3 นั้น เงื่อนไขมันซับซ้อนมากๆ (อาจมากกว่าเรื่องการทำในงานจริงๆ ก็ได้ 555) ดังนั้นการ Optimize ใน Excel นี้เราสามารถใช้เป็นแนวทางเบื้องต้น หรือใช้เป็นตัวทดลองเปลี่ยนค่าเล่นดูได้ ก่อนจะไปกด Respec ใหม่จริงๆ กับ Wither อีกทีก็ได้ครับ

      ว่าแล้วผมขอตัวไป Respec ตัวละครเล่นก่อนล่ะครับ บายๆ ขอบคุณที่อ่านจนจบครับ ^^

      ใครยังไม่ได้อ่าน 2 ตอนแรก ลองไปอ่านดูได้นะครับ

    • การคำนวณความน่าจะเป็นใน Baldur’s Gate 3

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3

      จากในตอนแรก ผมได้อธิบายถึงพื้นฐาน Mechanic ต่างๆ ของระบบต่อสู้ในเกม Baldur’s Gate 3 ไปแล้ว ในตอนนี้เราจะเริ่มมาคำนวณเรื่องความน่าจะเป็นกันครับ ซึ่งผมจะทำให้เห็นภาพชัดขึ้นด้วยการทำใน Excel ให้ดู

      มาดูเรื่องความน่าจะเป็นเรื่อง Attack Roll vs Armor Class ของ ศัตรูกันดีกว่า เพราะเป็นสิ่งที่พบได้ปกติและบ่อยที่สุดเลย

      จุดประสงค์ของบทความนี้เดี๋ยวสุดท้ายจะมาวิเคราะห์เรื่อง Feat. Great Weapon Master All-in กับ Sharpshooter กัน ว่าตกลงเปิดใช้ Passive หรือไม่เปิด Passive ตอนไหนดี??

      กรณีตีธรรมดา ไม่มี Advantage/Disadvantage

      สมมติผมเอา Lae’zel มาตีตัวละครผม (Sira) ที่มี AC17

      กรณีนี้จริงๆ คิดในใจก็ได้แหละ มันไม่ยาก แต่ว่าผมจะเขียนออกมาชัดๆ ใน Excel ให้เห็นภาพก่อน เวลาไปดูเรื่อง Advantage จะได้เข้าใจมากขึ้น

      ตอนแรกยังไม่เปิด Passive มันขึ้นว่าโอกาสโจมตีโดนคือ 65 % ดังนี้

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 385

      ซึ่ง รายละเอียดของ Attack Roll ใน Log หลังจากลองโจมตีดูคือแบบนี้

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 386

      คำถามคือ ความน่าจะเป็น 65% คำนวณมายังไง? มาดูกันครับ

      หลักการคือ จะตีโดนหรือไม่? มี 3 กรณี ดังนี้

      • ลูกเต๋า 1d20 ได้ 1 = Critical Miss เสมอ
      • ลูกเต๋า 1d20 ได้ระดับ Critical Hits (ในที่นี้คือ 20) = โดนเสมอ
      • ลูกเต๋า 1d20 ที่ระดับอื่นๆ เมื่อ + ค่า Bonus/Penalty ทุกอย่าง ต้อง >= AC ศัตรูถึงโดน
        หรือในกรณีนี้
        • ลูกเต๋า 1d20 + 9 >= AC 17 ถึงโดน
        • ลูกเต๋า 1d20 >=8 ถึงโดน

      เรียกว่า “ค่าส่วนต่างของลูกเต๋าที่เราต้องการทอยให้ได้” ในกรณีนี้ คือเลข 8

      ถ้าสรุปเป็นภาพให้ดูชัดๆ คือแบบนี้

      โอกาสโดน คือ
      = กรณีได้เลข 8 ถึง 20 / ทั้งหมด
      =13/20 = 65%

      หรือจะเขียนสูตร Excel ไปเลยเพื่อใช้รองรับกรณีอื่นๆ ไปด้วยเลยก็ได้ แบบนี้

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 387

      ช่อง C9 เขียนสูตรนี้ แล้ว Copy ลงไป

      =IF($B9=1,"N (Critical Miss)",
      IF($B9>=$B$6,"Y (Critical Hits)",
      IF($B9>=C$8,"Y","N")))

      แล้วใส่ Conditional Formatting ให้เรียบร้อย

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 388

      ช่อง C29 เขียนสูตรนี้ เพื่อคำนวณความน่าจะเป็น

      =COUNTIFS(C9:C28,"Y*")/COUNTA(C9:C28)
      • “Y*” ใน COUNTIFS แปลว่า สนใจที่ขึ้นด้วยด้วย Y
      • COUNTA คือ นับทุกอย่างที่ไม่ใช่ค่าว่าง

      ลองทำให้ค่าส่วนต่างเปลี่ยนไป

      ทีนี้ถ้าเราเปิด Great Weapon Master All-in จะทำให้เราต้องการส่วนต่างมากขึ้นอีก 5 หน่วย คือ 13 ก็จะได้ผลแบบนี้ ว่าโอกาสตีโดนคือ 40%

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 389

      ซึ่งก็ตรงกับที่โปรแกรมบอกมาครับ

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 390

      ทีนี้ถ้าเราลองเปลี่ยนค่าส่วนต่างที่ต้องการไปเรื่อยๆ (ไล่ตั้งแต่ไม่ต้องการส่วนต่างเลย ไปถึงต้องการมากกว่า20) แล้วดูผลลัพธ์ จะได้แบบนี้ จะเห็นว่าโอกาสโดนคือ 5%-95% ดังรูป

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 391

      ถ้าระดับคริที่ต้องการเปลี่ยนไป

      ถ้าระดับคริที่ต้องการเปลี่ยนไปอาจจะไม่ส่งผลต่อโอกาสโดนในกรณีปกติทั่วไป

      เช่น ใส่ของคริแล้วโอกาสตีโดนยังคงเท่าเดิม กรณนี้ คือ 65%

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 392
      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 393

      นั่นคือ ถ้าค่าส่วนต่างปกติทั่วไป อาจไม่เห็นผลแต่จะส่งผลต่อโอกาสโดนขั้นต่ำซะมากกว่า เช่นแบบนี้ คือ ยังไงโอกาสโดนจะไม่มีทางต่ำกว่า 20% (ถ้าเกณฑ์คริเหลือ 17)

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 394

      กรณีมี Advantage/Disadvantage

      กรณี Advantage

      ทีนี้มาดูกรณีที่มีเรื่องของการมี Advantage กันบ้างครับ ซึ่งจะมีการโยนเต๋า 2 ลูก เอาค่ามากกว่า ดังนั้นจะโอกาสตีโดนจะเยอะขึ้นเป็นแบบนี้

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 395

      ถ้าใช้ Math ปกติเลย

      วิธีคิดง่ายสุดคือ หาโอกาสตีไม่โดนก่อน ซึ่งแปลว่า ทั้ง 2 ลูก ต้องโยนได้ไม่เกิน 7 ดังนั้นมีทั้งหมด =7*7 = 49 แบบ จากทั้งหมด 20*20 = 400 แบบ

      พบว่าโอกาสที่ตีไม่โดน คือ 49/400 = 12% (จริงๆ คือ 12.25%)
      ดังนั้นที่ตีโดนคือ 100%-12% = 88% (จริงๆ คือ 87.75%)

      แต่ถ้าจะเขียนด้วย Excel ให้เห็นภาพก็จะเป็นแบบนี้

      ซึ่งใน Excel ผมจะทำเป็นตาราง Matrix Crosstab ระหว่างลูกเต๋า 2 ลูก แล้วเอาค่าที่มากกว่ามาใช้ โดยคงค่าส่วนต่างเป็น 8 ไว้ก่อน แบบนี้

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 396

      สูตรของ C12 (แล้ว Copy ไปทั้งตาราง)

      =IF(MAX($B12,C$11)=1,"N (Critical Miss)",
      IF(MAX($B12,C$11)>=$B$6,"Y (Critical Hits)",
      IF(MAX($B12,C$11)>=$C$8,"Y","N")))

      สูตรของ C32

      =COUNTIFS(C12:V31,"Y*")/COUNTA(C12:V31)

      กรณี Disadvantage

      ถ้ากรณี Disadvantage ก็จะใช้ค่า Min ระหว่าง 2 ลูกเต๋า

      ดังนั้นโอกาสตีโดนคือ ต้องโยนได้ตั้งแต่ 8 ขึ้นไปทั้ง 2 ลูก = 13*13 = 169 แบบ

      จากทั้งหมด 400 แบบ ดังนั้นโอกาสโดนคือ = 169/400 = 42% (จริงๆ คือ 42.25%)

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 397

      สรุปความน่าจะเป็นทั้ง 3 กรณี

      ทีนี้ถ้าจะเปลี่ยนค่าส่วนต่างไปเรื่อยๆ แล้วดูเลขความน่าจะเป็นที่ตีโดนในแต่ละกรณีไปเลย โดยผมใช้ Excel Data Table เพื่อทำ Sensitivity Analysis แบบนี้

      กรณี Critical เกณฑ์ปกติที่ 20

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 398

      ถ้าทำเป็นกราฟจะได้แบบนี้

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 399

      กรณี Critical เกณฑ์เลขอื่นๆ

      ตัวอย่างการตัดสินใจ

      สมมติเราจะคิดว่า เราควรเปิด Passive : Great Weapon Master All in (GWM) หรือ Sharpshooter หรือไม่?

      ซึ่งจะทำให้เกิด Penalty คือ -5 Attack Roll แต่จะได้ +10 Damage

      ซึ่งจะทำให้โอกาสตีโดนต่ำลงเป็นแบบนี้

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 406

      ทีนี้จะคิดยังไงว่าคุ้มหรือไม่คุ้ม?

      Assumption แรกคือ ศัตรูมี HP เยอะต้องสู้นาน (เราเลยจะคิดแบบ Dmg เฉลี่ยในระยะยาว)

      Damage เฉลี่ยต่อ Hit = %ความน่าจะเป็นที่ตีโดน * Damage ที่ได้

      ดังนั้น เราจะสามารถคิด % ความคุ้มค่าของ Damage ที่เพิ่มขึ้นจากการเปิด Passive ดังนี้

      สมมติ Damage เฉลี่ยเดิมเป็น 8

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 407

      ลองใช้ Data Table ทำ Sensitivity Analysis โดยคงส่วนต่างที่ต้องการไว้ เป็น 5,10,15 แล้วลองเปลี่ยน Damage เฉลี่ยเดิม (สีเขียว = คุ้ม เลขมากคุ้มมาก)

      จะเห็นว่าจะเปิดแล้วคุ้ม เมื่อเกิดเหตุการณ์ต่อไปนี้

      • เมื่อ Advantage (แล้วศัตรูไม่โหดเกินไป)
      • เมื่อ Damage พื้นฐานเราค่อนข้างห่วย
      • เมื่อ ค่าส่วนต่างที่ต้องการต่ำ (โอกาสโจมตีโดนสูงอยู่แล้ว)

      เช่น ถ้าค่าส่วนต่างที่ต้องการต่ำ ประมาณ 5 ถ้าเปิดแล้ว Passive จะคุ้มทั้งสถานการณ์ปกติ, Advantage (และ Disadvantage บางกรณี) เลย

      แล้ว Damage เฉลี่ยคิดยังไง?

      อย่างที่บอกไปในบทความก่อนหน้านี้ ว่าการคิด Damage นั้นขึ้นอยู่กับ

      Weapon Damage Dice + ค่า Damage อื่นๆ 

      ดังนั้น Range ของ Damage ที่จะเกิดขึ้นนั้นจึงขึ้นกับ Weapon Damage Dice ว่าจะ Roll ได้เท่าไหร่ด้วย เช่น

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 412

      สมมติอาวุธเป็น 1d6 แล้ว+ค่าอื่นๆ อีก 5
      ค่า Damage ที่เป็นไปได้คือ (1ถึง6) +5 หรือ 6 ถึง11 Damage

      เวลาโจมตีจริง จะได้ Damage เท่าไหร่ไม่รู้ แต่อยู่ระหว่าง 6-11 ซึ่งสมมติได้ 9 ดังนี้ (ถ้าเป้าหมายมี Vulnerable ก็โดน 2 เท่า ซึ่งนั่นอีกเรื่องนึง)

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 413

      ถ้าตีอีกที ก็อาจจะไม่เท่าเดิมใช่มะ?
      แล้วโดยเฉลี่ยแล้วมันได้ Damage เท่าไหร่? เราสามารถรู้ได้ เพราะ การ Random เต๋า มันคือ Discrete Uniform Distribution ระหว่างค่า 1- หน้าเต๋า นั่นเอง

      การหาค่า Expected Value

      E(X) = μ = ∑ x * P(x)

      แต่ละค่ามีโอกาส P(x) = 1/หน้าเต๋า เช่น ถ้าเต๋า 6 หน้า โอกาสแต่ละอันคือ 1/6 หรือ 16.67% ทำให้คำนวณได้ดังนี้

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 414

      หรือเอาสูตรง่ายๆ กรณีเลขต่อเนื่องกันแบบโยนเต๋า คือ ใช้สูตรนี้ไปเลย

      Expected Value = (1+หน้าเต๋า)/2 + ค่าบวก
      Expected Value = (a+b)/2  :  a = min damage, b=max damage

      เช่น

      • 1d6 ก็มี Expected Value = (1+6)/2 = 3.5
      • 1d6 + 5 มี Expected Value = 3.5+5=8.5
      • หรือ (6+11)/2 = 8.5 เช่นกัน

      เช่น อาวุธที่เขียนว่ามี Damage ดังนี้ จะมี Damage เฉลี่ย ตามนี้ ง่ายๆ เลย

      • 5-12 = 8.5
      • 6-11 = 8.5 (แต่ค่าไม่แกว่งเท่าตัวบน)
      • 6-18 = 12
      • 8-21 = 14.5
      • 9-22 = 15.5

      แนวทางการตัดสินใจ

      ดังนั้นถ้าผมใช้อาวุธ SoulBreaker ที่เขียนว่ามีดาเมจ 8-21 ก็จะมีดาเมจเฉลี่ย 14.5 ซึ่ง

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 415

      ถ้า Focus ที่ Damage เฉลี่ยประมาณ 15 ไปเลย เพื่อให้ดูง่าย จะเป็นแบบนี้

      • ถ้า Disadvantage : อย่าเปิด Passive ถ้าดาเมจเฉลี่ยระดับนี้แล้ว
      • ถ้าค่าส่วนต่างที่ต้องการประมาณ 5-8 : ก็คุ้มที่จะเปิด Passive GWM ได้ไม่ว่าจะ Advantage หรือไม่
      • แต่ถ้าค่าส่วนต่างประมาณ 9-10 ขึ้นไป : นี่จะคุ้มก็ต่อเมื่อได้ Advantage เท่านั้น (แต่ก็เกือบไม่คุ้มแล้ว)

      สรุปการใช้งานจริงแบบง่ายๆ

      เวลาใช้งานจริง ก็ดูที่ %โอกาสโดนที่เกมคำนวณให้ไปเลย

      ถ้าดาเมจเฉลี่ยประมาณ 15 ผมทำตารางสรุปให้แล้ว ว่าดาเมจเฉลี่ยคุ้มหรือไม่?
      (TRUE = เปิดแล้วคุ้ม)

      การคำนวณความน่าจะเป็นใน Baldur’s Gate 3 416
      • ถ้ากรณีปกติ ไม่มี Advantage :
        • ถ้าก่อนเปิด Passive โอกาสโดน 65% Up ก็เปิดใช้ Passive เลยครับ
      • ถ้ากรณี Advantage :
        • ถ้าก่อนเปิด Passive โอกาสโดน 80% Up ก็เปิดใช้ Passive ได้เลย

      ตอนต่อไป

      ในตอนต่อไป เราจะมาดูแนวทางในการ Up Level รวมถึงการ Change Class เลือก Feat ต่างๆ กัน ว่าเลือกแบบไหนน่าจะคุ้มกับสิ่งที่ต้องการครับ

    • วิธีคำนวณค่าการโจมตีในเกม Baldur’s Gate 3

      วิธีคำนวณค่าการโจมตีในเกม Baldur’s Gate 3

      ในช่วงสิ้นปีที่ผ่านมา ผมอินกับการเล่นเกม Baldur’s Gate 3 มากๆ (เหมือนได้เปิดประตูเข้าสู่จักรวาล Dungeons & Dragons) ซึ่งผมสนใจ Mechanic การคำนวณต่างๆ ในเกมนี้มาก โดยเฉพาะการคำนวณโอกาสและดาเมจการโจมตี รวมถึงการ Optimize เรื่องของการเปลี่ยน Class และ Stats ต่างๆ

      จึงขอถือโอกาสเอามาเขียนสรุปเอาไว้ในบทความนี้ เพื่อที่จะปูพื้นฐานการคำนวณทั้งหมดก่อนที่จะไปพูดถึงวิธีการ Optimize อีกที (เพราะเราต้องคำนวณเป็นก่อน จึงจะ Optimize ได้เนอะ)

      ปูพื้นฐานระบบของเกม

      เนื่องจากเกม Baldur’s Gate 3 (ขอย่อว่า BG3) เอาหลักการวิธีคิดต่างๆ มาจากบอร์ดเกมชื่อดังอย่าง Dungeons & Dragons (ย่อว่า D&D) ดังนั้นหลักที่ผมอธิบายในบทความนี้จึงสามารถนำไปใช้กับ D&D ได้ด้วยเช่นกัน (แม้จะไม่ 100% แต่ก็เหมือนมากๆ)

      ระบบของ D&D นั้นใช้การทอยลูกเต๋าเป็นตัวกำหนดว่าจะทำสิ่งต่างๆ ได้หรือไม่? เช่น โจมตีโดนไหม? ถ้าโดน จะรุนแรงมากน้อยแค่ไหน? ดังนั้นเกม BG3 นี้จึงมีเรื่อง “ความน่าจะเป็น” มาเกี่ยวข้องด้วยแน่นอน แค่ว่าเราไม่ได้เป็นคนมาโยนเต๋าเองจริงๆ โปรแกรมเป็นคนโยนให้ และคำนวณความน่าจะเป็นให้ด้วย (ซึ่งดีมาก)

      สัญลักษณ์ของการทอยลูกเต๋า

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 417

      ในเกม จะมีการใช้คำว่า 1d8 หรือ 2d6 อะไรพวกนี้ ซึ่งมีความหมายคือ

      จำนวนลูกเต๋า d จำนวนหน้าของแต่ละเต๋า

      เช่น

      • 1d20 = ทอยลูกเต๋า จำนวน 1 ลูก แต่ละลูกมี 20 หน้า (มีโอกาสได้เลข 1-20)
      • 3d6 = ทอยลูกเต๋า จำนวน 3 ลูก แต่ละลูกมี 6 หน้า เอาค่ามารวมกัน (มีโอกาสได้เลขรวม 3-18 เพราะมาจาก 1-6 จำนวน 3 อันรวมกัน )

      ค่า Ability Score

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 418

      ตอนที่เราสร้างตัวละคร (หรือ Level Up จนได้เลือก Feat) เราจะสามารถกำหนด/เพิ่ม ค่า Ability Score ให้กับตัวละครของเราได้ ซึ่งมี Ability หลายด้านดังนี้

      • Strength (STR) ความแข็งแกร่ง : พลังกายภาพของตัวละคร มีผลต่อความสามารถในการยกของ, น้ำหนักการพกพาไอเท็ม, ระยะการกระโดด รวมถึงการจัดการปัญหาด้วยพละกำลัง ค่านี้สำคัญสำหรับผู้ที่ใช้อาวุธโจมตีระยะใกล้
      • Dexterity (DEX) ความคล่องแคล่ว : แทนความว่องไว ของตัวละคร มีผลต่อความสามารถในการหลบหลีกการโจมตี, การใช้อาวุธระยะไกลได้อย่างมีประสิทธิภาพ ค่านี้สำคัญมากสำหรับ Rogue, Ranger และมีผลต่อค่า Initiative ว่าใครจะได้เริ่มเล่นก่อน
      • Constitution (CON) ความทนทาน : ความทนทานของตัวละคร เป็นสิ่งที่กำหนดจำนวนคะแนนชีวิต (HP) ของตัวละครนั้นๆ และค่านี้ยังจำเป็นสำหรับตัวละครที่ใช้เวทย์ที่ต้องการสมาธิสูง (Concentration Spell) อีกด้วย
      • Intelligence (INT) ความฉลาด : มีผลต่อความสามารถในการเรียนรู้และใช้เวทย์มนตร์, ค่านี้สำคัญสำหรับการร่ายเวทของ Wizard รวมถึงเวทของ Arcane Trickster (Rogue) และ Eldritch Knight (Knight)
      • Wisdom (WIS) ปัญญา : มีผลต่อความสามารถในการต้านทานอิทธิพลทางจิตใจ ค่านี้สำคัญสำหรับการร่ายเวทของ Cleric และ Druid และเวทของ Ranger
      • Charisma (CHA) เสน่ห์ : วัดความมีเสน่ห์, และความสามารถในการชักจูงของตัวละคร ค่านี้สำคัญสำหรับการร่ายเวทของ Bard , Paladin, Sorcerer, Warlock, และตัวละครที่พึ่งพาทักษะทางสังคม (เช่นตัวละครหลัก)

      เรื่องของเรื่องก็คือ ค่า Ability Score เหล่านี้ จะส่งผลไปยังค่า Ability Modifier ของค่านั้นๆ ด้วย

      • ยิ่งมี Ability Score เยอะ จะได้ Modifier เป็น Bonus เพิ่มเยอะ ถ้าน้อยก็จะมี Modifier ติดลบเลย
      • ค่ามาตรฐานของ Ability Score vs ค่า Modifier สรุปได้ดังนี้ (ค่า Modifier เปลี่ยนไปเมื่อค่า Ability Score เป็นเลขคู่เท่านั้น)
      Ability ScoreModifierAbility ScoreModifier
      1-516-17+3
      2-3-418-19+4
      4-5-320-21+5
      6-7-222-23+6
      8-9-124-25+7
      10-11026-27+8
      12-13+128-29+9
      14-15+230+10

      ค่า Proficiency Bonus

      นอกจากนี้ ก็เวลาเรา Level Up ตัวละครเพิ่มไปเรื่อยๆ ก็จะมีค่า Proficiency Bonus เพิ่มขึ้นด้วยเช่นกัน ตาม Level ของตัวละครนั้นๆ ดังนี้

      • Level 1-4: +2
      • Level 5-8: +3
      • Level 9-12: +4

      ระบบการต่อสู้

      เอาล่ะ เรามาดูกันว่าถ้ามีการเริ่มต่อสู้ มันจะเป็นยังไง? ใครได้เริ่มก่อนหลัง

      ลำดับในการเล่นในตอนต่อสู้

      เกมจะมีลำดับในการเล่นดังนี้

      1. ประเมินว่ามีการ Surprise หรือไม่?
        • เราจะ Surprise ศัตรูได้ คือต้องโจมตีโดยศัตรูไม่เห็นเราก่อน และศัตรูไม่ได้อยู่ในการต่อสู้อยู่แล้ว
        • คนที่ถูก Surprise จะทำอะไรไม่ได้เลยใน Turn นั้นๆ
      2. กำหนดลำดับการเล่นว่าตัวละครไหนได้เล่นก่อนหลัง
        • ด้วยค่าที่เรียกว่า Initiative ซึ่งใครมีค่า Initiative สูงก็ได้เล่นก่อน ซึ่งมันขึ้นอยู่กับปัจจัยหลายอย่างรวมกัน แต่ที่สำคัญๆ คือ
          • Initiative Roll : คือการโยนเต๋า
            • ใน D&D ใช้ 1d20
            • แต่ใน BG3 ใช้ 1d4 (แปลว่า ถ้ามี Bonus อื่นๆ มาบวกเพิ่มให้ค่า Initiative สำหรับใน BG3 จะมีผลมากกว่า D&D มากเลย)
          • DEX Modifier : ยิ่ง DEX สูงยิ่งมีค่าบวกเยอะ
          • ค่า Bonus อื่นๆ :
            • เช่น Feat ที่ชื่อว่า Alert ที่ +5 initiative
            • ความสามารถจาก Item บางตัว เช่น Soulbreaker Greatsword +2 initiative
      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 419
      ตัวอย่างที่โปรแกรมทำการคำนวณ Initiative แต่ละตัวให้ ( ณ Patch ปัจจุบัน ยังไม่มีรายละเอียดให้ดูใน Log)
      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 420
      อันนี้เรียงตามค่า Initiative ตอนเริ่ม Combat

      ตัวอย่าง จาก Initiative ที่ได้ : ตัวละครของผมมีคิวเรียงติดกัน 3 ตัว

      ถ้าตัวละครฝ่ายเราได้มี Initiative ต่อกัน (แบบไม่มีตัวศัตรูคั่น) เราสามารถสลับลำดับการเล่นได้ว่าจะเอาตัวไหน Take Action ก่อนได้

      • ผมจะกดรูปตัวละครเอาตัวที่ 2 (ตัวละครผมเอง) หรือ 3 (Lae’zel) ให้เริ่มก่อนตัวแรก (Astarion) ก็ได้
      • แต่จะเอาตัวที่ 4 (ตัวลูกชายผม) ขึ้นมาก่อนไม่ได้ เพราะมีศัตรูคั่นอยู่
      • แต่ทั้งหมดก็ต้องเกิดหลังคิวของ Steel Watcher ทั้ง 3 ตัวแรกสุดนั้นอ่ะนะ
      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 421
      ผมก็สามารถเลือกที่ Lae’zel แล้ว Take Action ก่อน Astarion ได้เลย

      กลไกเกี่ยวกับการโจมตี

      การโจมตีในเกมมี 2 ลักษณะใหญ่ๆ คือ การโจมตีที่ใช้ Attack Roll กับการโจมตีที่ใช้ Saving Throw

      • การโจมตีที่ใช้ Attack Roll : การโจมตีทางกายภาพทั้งหมด ทั้งระยะใกล้และไกล และเวทบางตัว
      • การโจมตีที่ใช้ Saving Throw : การโจมตีด้วยเวทบางตัว รวมถึงพวกทำให้สถานะผิดปกติ
      • ทั้งสองเรื่องนี้ มีการคำนวณให้ดูใน Combat Log ของ BG3 อย่างละเอียด เดี๋ยวเรามาศึกษาเพิ่มเติมกัน

      การโจมตีกายภาพ

      การโจมตีกายภาพ ส่วนใหญ่จะเป็นการโจมตีที่ใช้ Attack Roll ซึ่งมีสิ่งสำคัญมากที่สุด 2 เรื่องที่ต้องเข้าใจก่อน คือ Attack Roll และ Damage Roll

      • Attack Roll : คือการคิดว่าจะโจมตีโดนหรือไม่?
      • Damage Roll : เป็นการคิดว่าถ้าโจมตีโดน จะทำ Damage เท่าไหร่? (ถ้าโจมตีไม่โดน ก็ไม่ต้องคิดอันนี้เลย)

      กลไกของ Attack Roll

      Attack Roll คำนวณมากจากค่าเหล่านี้บวกกัน

      • การโยน 1d20 : ขึ้นกับโชคของคุณล้วนๆ
      • Weapon Enchantment : ค่าจากอาวุธที่ใส่อยู่
      • Ability Modifier : สำหรับการโจมตีนั้นๆ (มาจาก Stats ตัวละคร)
        • ถ้าเป็นอาวุธระยะประชิด (Melee) ทั่วไป = STR
        • อาวุธระยะไกล (Range) = DEX
        • อาวุธพลิกแพลง (Finesse) = เอาค่ามากระหว่าง STR กับ DEX = MAX(STR,DEX)
        • มือเปล่าของ Monk หรือ อาวุธ Monk = เอาค่ามากระหว่าง STR กับ DEX = MAX(STR,DEX)
        • เวท = แล้วแต่เวท
      • Proficiency Bonus : เพิ่มตาม Level ตัวละคร
      • Bonus อื่นๆ : เช่น
        • สถานะ Happy ของ Astarion ที่ช่วย +1
        • ผลจาก Bless/Bane : ที่อาจส่งผลเท่ากับ 1d4
        • พลังหนอน Favorable Beginning ที่ช่วยบวกค่าเท่ากับ Proficiency bonus สำหรับการโจมตีแรก
        • ผล Penalty (ลดค่า) จาก Passive ของ Feat. Great Weapon Master All in : -5 Attack roll
        • การโจมตีระยะไกล ถ้าโจมตีจากที่สูงก็จะได้ + ถ้าโจมตีจากที่ต่ำก็จะติด –

      ตัวอย่างว่า Ability Modifier ขึ้นอยู่กับอาวุธที่ใช้

      สมมติผมใช้ Melee Weapon โจมตี ก็จะใช้ STR Modifier

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 422

      ถ้าใช้ธนู Range Weapon ก็จะใช้ DEX Modifier

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 423

      หลักการคิดว่าจะโจมตีโดนหรือไม่?

      การตีโดนหรือไม่? ขึ้นกับส่วนของ การโยน 1d20 (โชค) ก่อน

      • ถ้าโยนได้ 1 คือ Miss เสมอ (เรียกว่า Critical Miss) ไม่เกี่ยวค่าบวกเพิ่มใดๆ
      • ถ้าโยนได้ถึงระดับ Critical Hit (ปกติ คือ 20 แต่เกณฑ์สามารถง่ายขึ้นได้ถ้ามีความสามารถหรือ item พิเศษ) จะโดนเสมอ ไม่เกี่ยวค่าบวกเพิ่มหรือ AC (Armor Class) ใดๆ
      • ถ้าโยนได้เลขอื่นๆ ค่อยเอาไปบวกกับ Weapon Enhancement, Ability Modifier, Proficiency Bonus ทั้งหมด แล้วเทียบกับค่า AC (Armor Class) ของศัตรู
      • ถ้าค่า >=AC ก็จะโจมตีโดน
      • ถ้าค่า < AC ก็ Miss

      อย่างไรก็ตาม มีอีกปัจจัยที่มีผลต่อการโยน 1d20 ของ Attack Roll ซึ่งก็คือสถาณการณ์ Advantage และ Disadvantage

      • Advantage : โยน 1d20 จำนวน 2 ลูก แล้วเลือกลูกที่ค่ามากกว่า (ถ้าได้ 1 ทั้งสองลูกก็ยัง Critical Miss เสมอนะ 555)
      • Disadvantage : โยน 1d20 จำนวน 2 ลูก แล้วเลือกลูกที่ค่าน้อยกว่า

      มาลองดูตัวอย่างของการคิด Attack Roll กัน

      ผมลองใช้ Lae’zel เล็งโจมตีแบบไม่เปิด Passive ของ Feat. Great Weapon Master: All in (ถ้าเปิด Passive = ตีแรงขึ้น แลกกับโอกาสโดนลดลง) จะเห็นว่าโอกาสโดนคือ 80%

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 424

      แต่พอเปิด Passive เพื่อจะให้ตีแรงขึ้น โอกาสโดนเหลือแค่ 55% เท่านั้น

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 425

      ทั้งนี้เพราะมี Penalty -5 ไปที่ Attack Roll นั่นเอง
      (5/20 คือ 25% นั่นคือทำให้ ลดจาก 80%-25% = 55%)

      เดี๋ยวลองตีจริงๆ เมื่อเปิด Passive ดูว่าจะเป็นไง…

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 426
      • ปรากฎว่าผม Roll 1d20 ได้ : 9
      • มีผล จาก Weapon Enchantment : +1
      • Proficiency : +4 (ตัวนี้ Level 11)
      • Great Weapon Master All in : -5
      • STR Modifier : +4 (ตัวนี้ STR 18)
      • สรุปได้แค่ 13 ซึ่งไม่พอกับศัตรูที่ AC14 ก็เลย Miss (ถ้าไม่เปิด Great Weapon Master All in ก็ตีโดนไปแล้ว 555)

      คราวนี้ผมลองให้ Astarion ใช้ Shadow Step ไปหลังศัตรูแล้วโจมตี ซึ่งจะขึ้นว่าได้ Advantage (หลัง Shadow Step จะได้ Advantage) โปรแกรมคำนวณให้ว่าโอกาสตีโดน 99%

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 427

      จากนั้นลองตีดู มันคิดดังนี้

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 428
      • ปรากฎว่าผม Advantage ทำให้ได้ Roll 1d20 2 ลูกเอาค่ามาก ได้ : 16
      • มีผล จาก Weapon Enchantment : +2
      • Proficiency : +4 (ตัวนี้ Level 11)
      • Favorable Beginning : +4
      • DEX Modifier : +5 (ตัวนี้ DEX 20)
      • สรุปได้ 31 เยอะเกินพอกับศัตรูที่ AC16 ก็โดนไป

      เพิ่มโอกาส Critical ได้นะ

      ทีนี้มาดูตัวอย่างของการที่โอกาส Critical นั้นเพิ่มขึ้นจากทั้งการมีความสามารถหรือ item พิเศษ รวมถึงสถานการณ์ที่ Advantage กัน

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 429

      ผมเอา Astarion ไปโจมตี Steel Watcher ซึ่งผม Roll ได้ 17 (จากสถานการณ์ Advantage ทำให้โอกาสได้เลขสูง) แต่ว่า 17 สามารถติด Critical Hits ได้ (ปกติต้อง 20)

      ทั้งนี้เป็นเพราะว่าตัว Astarion ผมได้ใส่ item หลายตัวที่ช่วยลดเกณฑ์เจ้า Critical นี้ให้ติดง่ายขึ้น เช่น

      ทำให้เกณฑ์ค่า Critical ที่ต้องใช้นั้นลดลง นอกจากนี้ยังเพิ่มโอกาส Critical ได้อีกเยอะ เช่น

      แต่ถึงจะเพิ่มโอกาส Critical เยอะยังไง ถ้าเกิดดวงซวย Roll ได้ 1 ก็ได้ Critical Miss (ไม่มีการบวกอะไรให้เลย) อยู่ดีนะ 555

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 430

      ok หลังจากคำนวณแล้วว่าตีโดน ต่อไปก็มาคำนวณดาเมจความเสียหายกัน

      กลไกของ Damage Roll

      การคำนวณค่าความเสียหาย ขึ้นอยู่กับปัจจัยเหล่านี้

      • Weapon Damage Dice : ค่าสุ่มของอาวุธที่ใช้ (แต่ละอันมีค่าเต๋าไม่เท่ากัน)
        • ถ้าได้ Critical Hits จะถือว่าได้โยน Weapon Damage Dice 2 ลูกแล้วเอาค่าบวกกัน
        • ถ้ามี Feat. Savage Attacker จะได้โยน Weapon Damage Dice 2 รอบ แล้วเอาค่าที่มากที่สุด (มันจะขึ้นว่า Reroll) ซึ่งคนละประเด็นกับ Critical นะ
      • Weapon Enchantment : เช่นเดียวกับตอนคิด Attack Roll
      • Ability Modifier : เช่นเดียวกับตอนคิด Attack Roll
        (สังเกตว่า Damage Roll ไม่เกี่ยวกับ Proficiency Bonus)
      • Bonus อื่นๆ : ถ้ามี
      • จากนั้นค่อยมาดูว่าศัตรูมีความต้านทานหรือแพ้ทางเป็นพิเศษรึเปล่า
        • Immune = ตีไม่เข้าเลย
        • Resistant = ทำดาเมจแค่ครึ่งเดียวจากปกติ
        • Vulnerable = ทำดาเมจ 2 เท่าจากปกติ+

      ลองดูตัวอย่างดาเมจแบบปกติก่อน

      ถ้าได้ Critical Hits ก็จะทำให้ Damage Roll มีการบวกกัน 2 ลูก

      เช่น ปกติอาวุธที่ใช้นี้คือแค่ 1d8 แต่พอติด Critical ทำให้กลายเป็น 2d8 ได้

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 431
      Damage Roll ปกติ (ไม่ติด Critical จาก Attack Roll) คือ 1d8
      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 432
      Damage Roll ที่ติด Critical จาก Attack Roll กลายเป็น 2d8

      และถ้ามี Savage Attacker ก็จะมีการ Reroll เอาค่ามาก
      (ในปกติอาวุธที่ใช้นี้คือแค่ 1d6
      ก็จะมีการroll 1d6 2 รอบแล้วเอาค่ามากระหว่าง 4 กับ 5 จึงได้ 5)

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 433

      ถ้ามี Savage Attacker แล้วติด Critical ด้วยก็กลายเป็นว่ามันจะ Reroll Damage Roll ที่มีการบวกกัน 2 ลูกได้อีกทีนะ (ในที่นี้ได้ค่ามากคือ 5 กับค่ามาก 6 รวมเป็น 11)

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 434

      เรื่องของการโจมตีด้วยเวท

      การโจมตีด้วยเวทนั้น มีประเด็นสำคัญที่ต้องทำความเข้าใจก่อน นั่นก็คือเรื่องของ Spellcasting Modifier ซึ่งขึ้นอยู่กับอาชีพของตัวละครที่ร่ายเวท (ถ้ามีการ Multiclass ก็อาจจะซับซ้อนขึ้นนิดนึง)

      • INT : Intelligence
        • Arcane Trickster (Rogue)
        • Eldritch Knight (Knight)
        • Wizard
      • CHA : Charisma
        • Bard
        • Paladin
        • Sorcerer
        • Warlock
      • WIS : Wisdom
        • Cleric
        • Druid
        • Ranger

      เช่น สมมติว่าตัวละคร Warlock ที่มี Bone Chill ซึ่งอันนี้แน่นอนว่าใช้ CHA (เพราะเป็นท่าจากที่ผมได้มาจากการเป็น Warlock)

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 435
      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 436

      ถ้าผมมีการ Multiclass เป็น Wizard แล้วเลือก Ray of Frost

      คราวนี้มันเป็นเวทนี้เป็นของ Wizard มันก็จะใช้ INT เป็น Modifier

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 437
      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 438
      ตัวละครนี้ INT8 เลยโดนลบ INT Modifier ไป 1

      ความซับซ้อนจะเกิดขึ้นเมื่อมีการ Multiclass แล้วดันเลือกเวทซ้ำกัน (ซึ่งไม่ควรทำอ่ะนะ 555)

      เช่นถ้า เลือก Bone Chill มาอีก คราวนี้โปรแกรมจะขึ้นอย่างชัดเจนเลยว่า Bone Chill นี้ใช้ CHA เป็น Modifier (เพื่อกันความสับสน)

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 439

      เวทที่ใช้ Attack Roll

      ส่วนการโจมตีเวทบางตัวก็ใช้ Attack Roll (มันจะมีเขียนไว้ที่เวทนั้นๆ)

      • วิธีคิด Attack Roll ก็แบบเดียวกับที่โจมตีกายภาพเลย แต่สิ่งที่เปลี่ยนไปคือ Ability Modifier ที่เอามาบวก จะใช้ Spellcasting Modifier มาแทน
      • ส่วน Damage Roll ก็แล้วแต่เวทนั้นๆ

      เช่น ผมใช้ Eldritch Blast ซึ่งต้องใช้ Attack Roll

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 440

      มันก็จะต้องคิด Attack Roll ว่าโดนหรือไม่ เทียบกับ AC ศัตรูตามปกติเลย ถ้าโดนถึงจะคิด Damage Roll ต่อไป

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 441

      การโจมตีที่ใช้ Saving Throw

      เวทอีกหลายตัวก็จะใช้ Saving Throw (แล้วแต่ว่าจะต้องใช้ Ability อะไรในการ Save) เช่น

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 442
      อันนี้ต้องใช้ CON Save (ซึ่งเขียนไว้อย่างชัดเจน)

      ซึ่งหลักการว่าศัตรูจะ Save ได้หรือไม่ จะเป็นแบบนี้

      เป้าหมายที่ถูกโจมตี จะต้องคำนวณ Saving Throw ขึ้นมา
      ซึ่งก็คำนวณจากค่าต่อไปนี้รวมกัน

      • การโยน 1d20 : ขึ้นกับโชคของคุณล้วนๆ (ถ้าโยนได้ 1 คือโดนแน่ๆ ไม่ต้องคิดอะไรต่อ ถ้าโยนได้ 20 คือรอดแน่ๆ ไม่ต้องคิดอะไรต่อ)
      • Ability Modifier ที่ใช้ Save : เช่นในตัวอย่างต้องใช้ CON
      • Bonus อื่นๆ ถ้ามี :

      ส่วนผู้โจมตี จะต้องคำนวณ Spell Save DC (Spell Save Difficulty Class) ก่อนว่าเวทของเรามีความยากขนาดไหนในการ Save

      Spell Save DC คำนวณจากค่าต่อไปนี้รวมกัน

      • Base DC (ปกติจะเป็นเลข 8 มาให้เลย)
      • Spellcasting Modifier (ในที่นี้คือ CHA)
      • Proficiency Bonus
      • Bonus อื่นๆ (เช่น Arcane Enchantment (+1) ที่มาจาก item บางอันที่ใช้)
      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 443

      ผลคือศัตรูได้ Saving Throw แค่ 3 ซึ่งไม่ผ่านเกณฑ์ Spell Save DC 19 ที่ผมเป็นคนโจมตีไป ทำให้ศัตรูล้มเหลวในการ Save นั่นเอง

      ทีนี้ Damage เท่าไหร่ก็ขึ้นกับเงื่อนไขของเวทอีก เช่น บางเวทถึงแม้จะ Save ได้ก็ยังโดนครึ่งนึงอยู่ดี เป็นต้น

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 444
      Roll 3d8 แล้วต้องหาร 2 เพราะศัตรู Save ได้
      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 445
      ถ้า Sav ไม่ได้ก็โดนไปเต็มๆ ในที่นี้คือ Roll 3d8

      บางท่าเป็นการทำให้สถานะผิดปกติอย่างเดียว ไม่มีดาเมจ ก็ใช้หลักการของ Saving Throw เช่นกัน

      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 446
      วิธีคำนวณค่าการโจมตีในเกม Baldur's Gate 3 447

      ตอนต่อไป

      ในตอนแรกนี้เป็นพื้นฐาน Mechanic ของเกม (ยังไม่มี Math มากมายนัก) แต่ในตอนต่อไปเราจะเริ่มมาคำนวณความน่าจะเป็นกันจริงๆ แล้ว ใครอยากรู้ติดตามต่อได้เลย เร็วๆนี้

    • แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT

      เพื่อนๆ เคยเจอปัญหานี้ไหมครับ? เวลาที่ต้องพบกับสูตร Excel ที่ซับซ้อนจนแทบจะหลงทาง ไม่รู้ว่ามันทำงานยังไง และที่สำคัญคือจะแก้ไขยังไง? เอาล่ะ วันนี้ผมมีตัวช่วยเจ๋งๆ ที่เพื่อนๆ ต้องลอง นั่นก็คือใช้ AI Chatbot ที่ชื่อว่า ThepExcel GPT เข้ามาช่วยในการแกะสูตรพวกนี้ ตอนนี้ก็มีให้ใช้ได้ฟรีด้วยนะครับ!

      เจ้า AI นี้เขามีชื่อว่า “ThepExcel GPT” แค่ส่งสูตรไปหรือจะส่งรูปสูตรไป มันก็สามารถอธิบายให้เราเข้าใจได้อย่างง่ายดาย เหมือนได้คุยกับผู้เชี่ยวชาญกันเลย 555

      แนะนำ ThepExcel GPT

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 448

      ThepExcel GPT นี้ ผมตั้งใจพัฒนาขึ้นมาเพื่อตอบปัญหาเกี่ยวกับ Excel ให้การแก้ไขสูตรคลุมเครือเป็นเรื่องกล้วยๆ สำหรับทุกคน

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

      หากเพื่อนๆ ลองใช้ ThepExcel GPT AI Chatbot แล้วรู้สึกอย่างไร อย่าลืมบอกผมด้วยที่นี่ https://forms.gle/Ku7xn9jrkwhjBWBRA

      Feedback การใช้งาน

      เล่าสักนิดว่าทำไมผมถึงคิดทำ AI Chatbot ขึ้นมา เนื่องจากผมเจอปัญหาในการตอบคำถามจากแฟนเพจอยู่บ่อยๆ เพราะไม่มีเวลาแหม ก็เลยคิดว่าคงดีถ้ามี AI Chatbot ช่วยเราตอบคำถาม Excel แทน จนในปลายปี 2023 ผมก็สร้างเจ้า ThepExcel GPT ขึ้นมา แต่ประสบปัญหาสำคัญคือ ตอนนั้นต้องเสียเงินสมัคร ChatGPT Plus ถึงจะใช้ได้ หลายคนเลยไม่ได้ลองใช้เจ้า AI นี้ T_T

      ที่มาที่ไป

      แต่ข่าวดีคือ เมื่อต้นเดือนพฤษภาคม 2567 OpenAI ได้ปล่อยตัว GPT-4o และเปิดให้ใช้ GPTs ได้ฟรี!

      ล่าสุด วันที่ 30 พฤษภาคม 2567 นี้เอง คนที่ใช้ ChatGPT ฟรีก็ใช้ GPTs ได้แล้วครับ ผมก็เลยแจก Link ให้ใช้กันฟรีๆ (แต่ก็แน่นอนแหละ คนใช้เยอะ limit ก็เต็มไว 555)

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 449

      ปล. ถ้าเจ้า ThepExcel GPT เจอคำถามยากสุดๆ อย่าง DAX หรือ Python มันจะบอกให้ไปถาม Bot ตัวเฉพาะทางที่ผมทำขึ้นมา อีกด้วย

      ทีนี้มาทดสอบกันดูนะ ว่า AI จะช่วยเราไขความลับของสูตร Excel ยากๆ อย่างไร?

      ตัวอย่างโจทย์ เช่น เราต้องการแสดงค่าที่ไม่ซ้ำจากคอลัมน์ B2:B10

      ทดสอบการแกะสูตร Case 1

      ถ้าเพื่อนๆ มี Excel เวอร์ชั่นใหม่ (หรือ Google Sheets) ที่รองรับ Dynamic Array ก็สามารถเขียนสูตรลงที่เซลล์ C2 ได้ง่ายๆ เลย

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 450

      ผลลัพธ์ก็จะมีโชว์ในเซลล์ C2:C5 โดยอัตโนมัติ

      =UNIQUE(B2:B10)

      แต่ถ้าเพื่อนๆ ใช้ Excel รุ่นเก่าที่ไม่มีฟังก์ชัน UNIQUE ก็อาจจะเศร้าเล็กน้อย 😭

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 451

      ถ้าเราลองไปหาสูตรในอินเทอร์เน็ต เราอาจเจอสูตรหนึ่งที่ต้องเขียนในเซลล์ C2 โดยก่อนอื่นต้องกด Ctrl+Shift+Enter เพราะมันเป็นสูตรแบบ Array Formula ก่อนที่จะทำการ Copy ลงมาในเซลล์ล่างๆ

      วิธีแกะสูตรนี้ถ้าเรายังใช้ Excel เก่า ก็อาจต้องใช้เครื่องมือ Formula -> Evaluate Formula ซึ่งจะแสดงขั้นตอนการทำงานทีละขั้นตอน ซึ่งอาจไม่สะดวกนักเพราะเราไม่สามารถตรวจเช็คแต่ละส่วนได้ตามใจ

      =IFERROR(INDEX($B$2:$B$10, MATCH(0, COUNTIFS($C$1:C1, $B$2:$B$10), 0)), "")
      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 452

      วิธีแกะสูตรดูทีละ Steps

      แต่ถ้าเรามี Excel เวอร์ชั่น 2016 ขึ้นไป เราจะมี Add-ins ชื่อว่า Excel Labs ที่เจ๋งมาก มีเครื่องมือ Advanced Formula Environment ที่ทรงพลังกว่า

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 453

      มันสามารถอธิบายสูตรทีละขั้นได้อย่างดี ให้เราเห็นภาพได้ง่ายๆ เพราะแค่เอา Mouse ไป Hover ที่สูตรก็เห็นผลเป็น Array ได้เลย

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 454

      ไม่ว่าจะใช้วิธีไหนก็ตาม ถ้าเราไม่เข้าใจฟังก์ชันในสูตร เราก็จะแตกสูตรต่อไม่ได้ ในยุคนี้การถาม AI Chatbot ถือเป็นวิธีช่วยแก้ปัญหาที่ดีมาก

      ลองถาม ThepExcel GPT (พร้อมแนบรูป) มันสามารถจะอธิบายได้อย่างดี

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 455

      ได้รับคำอธิบายประมาณนี้ ผมจะขออธิบายการทำงานของสูตรในเซลล์ C3 นะครับ:

      วิธีแกะสูตรโดยถาม AI Chatbot

      สรุป: สูตรนี้ช่วยสร้างรายการไม่ซ้ำจากคอลัมน์ B ในคอลัมน์ C ด้วยการใช้ฟังก์ชัน INDEX และ MATCH ร่วมกับ COUNTIFS แค่นี้เพื่อนๆ ก็ได้ผลลัพธ์แล้วครับ

      AI Prompt:
      
      ผมมีข้อมูลแบบนี้
      
      ได้สูตรเพื่อ List รายการจาก B2:B10 ออกมาแบบไม่ซ้ำกัน แต่ไม่เข้าใจสูตร ช่วยอธิบายการทำงานที
      สูตรที่เขียนใน C3 คือ
      =IFERROR(INDEX($B$2:$B$10, MATCH(0, COUNTIFS($C$1:C2, $B$2:$B$10), 0)), "")
      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 456

      Confidence: 100%

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 457

      เอาล่ะ มาดูกันถี่ถ้วนกับสิ่งที่ AI อธิบายนะ เรื่องของเหตุผลในการเลือกใช้ฟังก์ชันนี้เพื่อทำให้ได้ค่าที่ไม่ซ้ำจากคอลัมน์ B ไปยังคอลัมน์ C ครับ

      =IFERROR(INDEX($B$2:$B$10, MATCH(0, COUNTIFS($C$1:C2, $B$2:$B$10), 0)), "")

      1. COUNTIFS

      1. COUNTIFS($C$1:C2, $B$2:$B$10):
        • ฟังก์ชัน COUNTIFS ใช้เพื่อทำการนับจำนวนครั้งที่เงื่อนไขหลายๆ ข้อเป็นจริงพร้อมกัน โดยในที่นี้ COUNTIFS($C$1:C2, $B$2:$B$10) จะนับจำนวนครั้งที่ค่าในช่วง $B$2:$B$10 ปรากฏในช่วง $C$1:C2 (คือค่าที่อยู่ในคอลัมน์ C ด้านบนของเซลล์ปัจจุบัน)
        • ค่าที่ได้จะเป็นอาร์เรย์ เช่น {0, 1, 0, 0, 1, 0, 0, 0, 0} โดยแต่ละค่าบ่งบอกถึงจำนวนครั้งที่ค่าจากคอลัมน์ B ปรากฏในช่วง $C$1:C2
      2. MATCH(0, COUNTIFS($C$1:C2, $B$2:$B$10), 0):
        • ฟังก์ชัน MATCH ใช้เพื่อหาตำแหน่งของค่า 0 ในอาร์เรย์ที่ได้จาก COUNTIFS ซึ่งหมายถึงตำแหน่งที่ค่าจากคอลัมน์ B ยังไม่ปรากฏในคอลัมน์ C ด้านบนของเซลล์ปัจจุบัน
        • ผลลัพธ์จะเป็นตำแหน่งในช่วง $B$2:$B$10 ที่มีค่าเป็น 0 ในอาร์เรย์จาก COUNTIFS
      3. INDEX($B$2:$B$10, MATCH(0, COUNTIFS($C$1:C2, $B$2:$B$10), 0)):
        • ฟังก์ชัน INDEX จะใช้ตำแหน่งที่ได้จาก MATCH เพื่อดึงค่าจากช่วง $B$2:$B$10
        • ค่าที่ได้จะเป็นค่าจากคอลัมน์ B ที่ยังไม่ปรากฏในคอลัมน์ C
      4. IFERROR(INDEX($B$2:$B$10, MATCH(0, COUNTIFS($C$1:C2, $B$2:$B$10), 0)), “”):
        • ฟังก์ชัน IFERROR ใช้เพื่อจัดการกับข้อผิดพลาดที่อาจเกิดขึ้นจากการใช้ MATCH ซึ่งหากไม่มีค่าที่ตรงกับเงื่อนไขเลย (เช่น ทุกค่าจากคอลัมน์ B ปรากฏในคอลัมน์ C แล้ว) ฟังก์ชัน MATCH จะคืนค่า #N/A ซึ่งจะทำให้ INDEX เกิดข้อผิดพลาด
        • หากเกิดข้อผิดพลาด IFERROR จะคืนค่าเป็นข้อความว่าง (“”)

      ฟังก์ชัน COUNTIFS ใช้เพื่อตรวจสอบการปรากฏของค่าจาก $B$2:$B$10 ในช่วง $C$1:C2 ว่ามีการปรากฏกี่ครั้ง ซึ่งช่วยให้เรารู้ว่าค่าใดยังไม่ถูกดึงไปแสดงที่คอลัมน์ C

      2. MATCH

      ถาม AI เพิ่มเติม เพื่อให้ได้สิ่งที่อยากรู้

      ฟังก์ชัน MATCH ใช้เพื่อตรวจสอบตำแหน่งแรกที่ค่าตรงกับ 0 ในอาร์เรย์จาก COUNTIFS ที่แปลว่าค่าในคอลัมน์ B ที่ยังไม่ถูกใช้งาน

      3. INDEX

      AI Prompt:
      อยากเข้าใจหลักการคิด ทำไมถึงเลือกใช้ฟังก์ชันเหล่านี้ 

      ฟังก์ชัน INDEX ดึงค่าจากตำแหน่งที่ได้จาก MATCH ในช่วง $B$2:$B$10 ซึ่งเป็นแหล่งข้อมูลหลัก

      4. IFERROR

      ฟังก์ชัน IFERROR ป้องกันข้อผิดพลาดซึ่งจะเกิดจาก MATCH ถ้าไม่พบค่า 0 โดยจะคืนค่าเป็นข้อความว่างแทนที่จะโชว์ Error

      กระบวนการทำงานเบื้องหลัง:

      ตัวอย่างนี้จะสร้างรายการไม่ซ้ำในคอลัมน์ C โดยหาราคาจากคอลัมน์ B อย่างมีประสิทธิภาพ

      Confidence: 100%

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

      แล้วเลขลำดับพวกนี้จะหาได้จากไหนหล่ะ??

      มันอาจหาได้หลายทาง แต่ในสูตรนี้สร้างลำดับ 0,1 ด้วย COUNTIFS ซึ่งใช้ MATCH หาลำดับแรกที่ตรงกับเลข 0

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

      ใน Excel รุ่นเก่า ฟังก์ชันยังไม่ค่อยเก่งมาก ทำให้เราต้องใช้สูตรที่ยาวซับซ้อนราวกับใช้มีดไม่ใช่เลื่อยไฟฟ้าตัดต้นไม้ แต่ในเวอร์ชั่นใหม่ๆ มีฟังก์ชันช่วยเยอะทำให้ง่ายขึ้น

      1. ตรวจสอบการมีอยู่ของค่าในช่วงที่ต้องการ:
        • ใช้ COUNTIFS เพื่อตรวจสอบว่าแต่ละค่าในคอลัมน์ B ปรากฏในคอลัมน์ C ด้านบนของเซลล์ปัจจุบันกี่ครั้ง โดยมองหาค่าที่นับได้เป็น 0 (แสดงว่ายังไม่ปรากฏ)
      2. ค้นหาตำแหน่งของค่าที่ไม่ซ้ำกัน:
        • ใช้ MATCH เพื่อหาตำแหน่งแรกที่มีค่า 0 ในอาร์เรย์จาก COUNTIFS ซึ่งบอกเราว่าค่าที่ไม่ซ้ำกันอยู่ที่ตำแหน่งใด
      3. ดึงค่าที่ไม่ซ้ำกันมาแสดง:
        • ใช้ INDEX เพื่อดึงค่าจากคอลัมน์ B ตามตำแหน่งที่ได้จาก MATCH
      4. จัดการกับข้อผิดพลาด:
        • ใช้ IFERROR เพื่อคืนค่าเป็นข้อความว่างในกรณีที่ไม่พบค่าที่ตรงกับเงื่อนไข

      เช่น การทำ VLOOKUP ที่ต้องการทุกคำตอบที่เจอ ใน Excel เก่าจะมีสูตรยาวๆ แต่ในรุ่นใหม่ๆ แค่ฟังก์ชัน FILTER ก็สำเร็จเลย

      แต่ถ้าใครยังใช้ Excel เก่าที่ไม่มีฟังก์ชันแบบ UNIQUE/FILTER ก็มีทางเลือกที่ดีคือ ใช้ Power Query ซึ่งใช้ง่ายมากแต่ต้องมี Excel 2016 เป็นอย่างน้อย

      ขออธิบายเพิ่มเติมโดยผมเอง

      ในกลุ่มExcel Super Fan แฟนพันธุ์แท้เอ็กเซลใน Facebook เป็นที่ที่มีคนเก่งๆ มาตอบคำถาม เช่น Excel Wizard, เมษ พงษ์อำไพ และอีกหลายท่าน

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 458

      อย่างโจทย์นี้

      ดาวน์โหลดไฟล์ตัวอย่าง – https://lnkd.in/gcn62ByP

      ดูคำตอบแล้วอาจจะช๊อคกับสูตรของหลายคน…

      ปล. ตัวอย่างนี้คือย่อแล้ว จริงๆ ยังมีที่ซับซ้อนกว่านี้ และคำตอบอาจต่างกันไปตามการคิดของแต่ละคน

      =IFERROR(INDEX($B$2:$B$10, MATCH(0, COUNTIFS($C$1:C2, $B$2:$B$10), 0)), "")

      แม้ว่าคำตอบมาจากการใช้สูตรใน Excel เวอร์ชันล่าสุด แต่ก็ยังซับซ้อนเพราะเป็นการใช้สูตร Array แบบเขียนทีเดียวได้ผลลัพธ์ออกมาทั้งตาราง

      COUNTIFS(
      
      {0;"แอปเปิ้ล"}, 
      
      {"แอปเปิ้ล";"แอปเปิ้ล";"มะละกอ";"กล้วย";"กล้วย";"แอปเปิ้ล";"กล้วย";"ส้ม";"ส้ม"}
      
      )

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

      และบอกเลยว่าในเวอร์ชั่นใหม่ๆ เราสามารถประกาศตัวแปรในสูตรได้ด้วย LET และสร้างฟังก์ชันเองด้วย LAMBDA

      {1;1;0;0;0;1;0;0;0}

      ฟังก์ชันเหล่านี้มีประสิทธิภาพมาก เชื่อว่าหลายคนอาจไม่ค่อยรู้จัก แต่เราขอแนะนำให้ลองศึกษาต่อดูครับ

      ลองแกะสูตรที่คุณโบ Excel Wizard ตอบแบบนี้ดูสามารถทำง่ายๆ

      ทำไมสูตรยุ่งยากจัง?

      ใช้แป๊ะที่ตารางแล้วเห็นผลเลย

      ถ้าแกะสูตรแบบละเอียดเอง ผมแนะนำให้ใช้ Excel Labs: Advanced Formula Environment ช่วยจัดระเบียบสูตรให้อ่านง่ายขึ้น

      การจัดแบบนี้เห็นชัดว่า c, d คือการประกาศตัวแปร และใช้ HSTACK ตั้ง List วันที่โปรแกรมไว้เรียบร้อย แล้วตามด้วยการใช้ INDEX ดึงข้อมูลที่เหมาะสมออกจาก C2:D7

      ทดสอบการแกะสูตร Case 2

      ที่ต้องพิจารณาให้ชัดเจนคือ ส่วนที่ดึงค่าจาก C2:D7

      ซึ่งในนี้ใช้ XMATCH(c, d) หาแบบ Exact Match ถ้าเจอใช้ได้เลย ไม่เจอก็ใช้ IFNA ใส่เป็นค่าอื่นแทนคือ (XMATCH(c, TOCOL(d + {-1, 1})) + 1) / 2

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 459

      ลองถาม AI ดูว่า ThepExcel GPT ว่ามันจะช่วยเราได้ไหม?

      มาเลยเพื่อนๆ ดูที่สูตรนี้ AI บอกว่าฟังก์ชัน LET มีขั้นตอนในการจัดการข้อมูลในตาราง

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 460

      มาดูแต่ละส่วนในสูตรทีละหน่อย

      ทำไมมันถึงซับซ้อน?

      หลังจากทำงานเสร็จ สูตรนี้จะคืนค่าสำหรับตารางที่มีวันที่ในคอลัมน์ A และวันที่ใกล้เคียงใน C2 ร่วมกับ Vendor

      บางที AI เจอบางส่วนที่เข้าใจยาก ให้ AI ลองอธิบายเพิ่มดูดีไหม?

      ได้ครับ มาดูอย่างละเอียด:

      ส่วนนี้เหมาะสำหรับหาวันที่ใกล้เคียงที่สุดในช่วง d (Delivery Date) และหาค่าเฉลี่ยจากตำแหน่งสองตำแหน่งที่ใกล้เคียงที่สุด:

      สรุป:

      ส่วนนี้ของสูตรทำให้หาตำแหน่งที่ใกล้ที่สุดในวันที่จากช่วง d โดยดูค่าเฉลี่ยตำแหน่งสองจุดที่ใกล้เคียงที่สุด ลดความเบี่ยงเบนและหาได้อย่างง่ายดายตามวันที่จัดส่ง

      • HSTACK = เอา Array มาต่อกันในแนวนอน (ข้างๆ)
      • VSTACK = เอา Array มาต่อกันในแนวตั้ง (บนล่าง)
      • TAKE = คัดเลือก Array มาบางส่วน
      • DROP = ทิ้ง Array ไปบางส่วน
      • TOCOL = เปลี่ยนโครงสร้างให้กลายเป็น Array 1 คอลัมน์
      • TOROW = เปลี่ยนโครงสร้างให้กลายเป็น Array 1 แถว
      • LET = ประกาศตัวแปรภายในสูตร (คล้ายๆ VAR ใน DAX หรือ let…in.. ของ MCode)
      • LAMBDA = สร้างฟังก์ชันขึ้นมาใช้เอง มักใช้ร่วมกับ LAMBDA Helper Function เช่น
        • MAP = โยนค่าจาก Range เข้าไปให้ LAMBDA ทีละค่า
        • SCAN = ส่ง Array เข้าไปคำนวณสะสม แสดงผลสะสมระหว่างทางออกมาเป็น Array
        • REDUCE = ส่ง Array เข้าไปคำนวณสะสม แสดงผลสะสมสุดท้ายออกมาอันเดียว

      วิธีแกะสูตร

      [Confidence 95%]

      =LET(c,A2:A30,d,C2:C7,IFNA(HSTACK(c,INDEX(C2:D7,
      IFNA(XMATCH(c,d),(XMATCH(c,TOCOL(d+{-1,1}))+1)/2),{1,2})),""))

      บางครั้งอาจจะต้องเข้าใจให้ลึกซึ้งกว่าที่ AI อธิบาย โดยเฉพาะเรื่องของวัตถุประสงค์ที่มี (…+1) /2 เรามาคุยกันต่อให้เข้าใจ

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 461

      ถ้าลองเขียนสูตรตรง d + {-1, 1} จะได้ผลแบบนี้

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 462

      แล้วพอแปลงเป็น TOCOL จะเทียบเป็นคอลัมน์เดียว

      ซึ่งไอเดียนี้คือวันที่จะเพิ่มมากขึ้นและหาเจอตามเกณฑ์แต่สิ่งที่ต้องทำคือหาตำแหน่งอ้างอิงมาจาก Delivery Date เก่าและ Vendor เดิม เพราะจากตั้งต้นมี 6 วัน ทำงานออกมาเป็น 12 วัน

      ถ้าพบลำดับ 3 หรือ 4 ที่แท้จริงจะถือว่าเป็นลำดับ 2

      ดังนั้นต้องคำนวณด้วยการหาร 2 ซึ่งเป็นเคล็ดไม่ลับ โดยรู้ว่า INDEX จะใช้ค่านับเต็มแบบ +1 แล้วหาร 2 ให้ได้ลำดับที่กลมกลืน

      AI Prompt:
      
      อธิบายสูตร excel นี้ได้ไหม
      
      =LET(c,A2:A30,d,C2:C7,IFNA(HSTACK(c,INDEX(C2:D7,IFNA(XMATCH(c,d),(XMATCH(c,TOCOL(d+{-1,1}))+1)/2),{1,2})),""))
      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 463

      พอได้ลำดับที่เหมาะสม ใช้ INDEX ดึงค่ามา ซึ่งจะใส่ {1,2} เพื่อดึงข้อมูลทั้งคอลัมน์ 1 และ 2

      สุดท้ายได้ผลลัพธ์สมบูรณ์จากสูตรนี้

      1. LET(c, A2, d, C2, …):
        • ฟังก์ชัน LET จะช่วยให้เราประกาศตัวแปรภายในสูตรได้ ในที่นี้ c คือช่วงของวันที่ในคอลัมน์ A (A2:A30) และ d คือช่วงของวันที่ในคอลัมน์ C (C2:C7).
      2. IFNA(HSTACK(c, …), “”):
        • ฟังก์ชัน IFNA ใช้เพื่อคืนค่าที่กำหนดหากฟังก์ชันที่อยู่ใน IFNA เกิดข้อผิดพลาด ในที่นี้จะคืนค่าเป็นช่องว่างถ้ามีข้อผิดพลาด
        • HSTACK ใช้เพื่อรวมข้อมูลในแนวนอน ในที่นี้คือการรวมช่วงของวันที่ใน c กับผลลัพธ์จาก INDEX.
      3. INDEX(C2, IFNA(XMATCH(c, d), (XMATCH(c, TOCOL(d + {-1, 1})) + 1) / 2), {1, 2}):
        • XMATCH(c, d) จะค้นหาค่าจาก c ในช่วง d และคืนค่าเป็นตำแหน่ง
        • IFNA ใช้เพื่อจัดการกับข้อผิดพลาด ถ้า XMATCH ไม่พบค่าใน d จะใช้การคำนวณเพิ่มเติมเพื่อค้นหาวันที่ใกล้เคียงในช่วง d โดยใช้ XMATCH กับ TOCOL(d + {-1, 1})
        • INDEX ใช้เพื่อดึงข้อมูลจากช่วง C2โดยใช้ตำแหน่งที่ได้จาก XMATCH, ในที่นี้ {1, 2} จะดึงค่าจากทั้งคอลัมน์ C และ D

      แม้ AI Chatbot อย่าง ThepExcel GPT จะช่วยอธิบายสูตร Excel ที่ซับซ้อนได้ดี แต่ในบางครั้งสำหรับสูตรที่ซับซ้อนมาก ก็อาจต้องค่อยๆ ทำความเข้าใจหรือถาม AI เพิ่มก็ได้ครับ

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

      การใช้ AI Chatbot อย่าง ThepExcel GPT ช่วยให้การทำความเข้าใจสูตร Excel ซับซ้อนง่ายขึ้น แค่ส่งสูตรหรือรูปไป AI ก็อธิบายให้เข้าใจได้และยังค่อยๆ ตอบคำถามให้เราได้

      AI Prompt:
      
      เน้นอธิบายส่วนนี้ (XMATCH(c, TOCOL(d + {-1, 1})) + 1) / 2

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

      (XMATCH(c, TOCOL(d + {-1, 1})) + 1) / 2

      เพื่อนๆ ที่สนใจลองใช้ ThepExcel GPT ในการแกะสูตร Excel ไปที่ลิงก์นี้ได้เลยครับ: https://chatgpt.com/g/g-GQjMXWNEy-thepexcel-gpt

      1. TOCOL(d + {-1, 1}):
        • ฟังก์ชัน TOCOL จะเปลี่ยนช่วง d ให้เป็นคอลัมน์
        • การบวก {-1, 1} เป็นการสร้างช่วงของวันที่ที่เพิ่มและลดหนึ่งวันจากวันที่ในช่วง d
        • ผลลัพธ์จะเป็นคอลัมน์ของวันที่ที่ขยายออกมาจากช่วง d
        ตัวอย่าง:
        • ถ้า d คือ C2:C7 (มีวันที่ 01/05/2024 ถึง 26/05/2024)
        • TOCOL(d + {-1, 1}) จะเป็นคอลัมน์ที่มีวันที่ก่อนและหลังช่วงนี้ เช่น 30/04/2024, 02/05/2024, 07/05/2024, เป็นต้น
      2. XMATCH(c, TOCOL(d + {-1, 1})):
        • ฟังก์ชัน XMATCH ค้นหาค่าจากช่วง c (Calendar Date) ในช่วงของวันที่ที่ปรับเปลี่ยน (เพิ่มหรือลดหนึ่งวัน) ซึ่งได้จาก TOCOL(d + {-1, 1})
        • คืนค่าตำแหน่งของวันที่ในช่วงที่ขยายนี้ซึ่งใกล้เคียงกับค่าจากช่วง c
      3. (XMATCH(c, TOCOL(d + {-1, 1})) + 1) / 2:
        • เมื่อได้ตำแหน่งของวันที่ใกล้เคียงจาก XMATCH แล้ว จะทำการคำนวณค่าเฉลี่ยของตำแหน่งนี้
        • + 1 และ / 2 ใช้เพื่อปรับตำแหน่งให้ได้ค่ากลางระหว่างตำแหน่งสองตำแหน่งที่ใกล้เคียงที่สุด
        ตัวอย่าง:
        • ถ้า XMATCH คืนค่าตำแหน่งเป็น 4
        • (4 + 1) / 2 จะเท่ากับ 2.5
        • ค่านี้จะใช้เป็นตำแหน่งเฉลี่ยระหว่างสองตำแหน่งเพื่อหาแถวที่ใกล้เคียงที่สุด

      หวังว่าบทความนี้จะมีประโยชน์กับทุกท่านนะครับ เอาล่ะ สู้ๆ ไปด้วยกันในการเรียนรู้ครับ!

      ส่วนนี้ของสูตรจะค้นหาค่าตำแหน่งที่ใกล้เคียงที่สุดในช่วงวันที่ที่ขยายออกมาจากช่วง d โดยใช้ฟังก์ชัน XMATCH แล้วคำนวณค่าเฉลี่ยของตำแหน่งสองตำแหน่งที่ใกล้เคียงที่สุด ด้วยการบวกหนึ่งและหารสองเพื่อลดความเบี่ยงเบนและหาค่าที่ใกล้เคียงที่สุดในวันที่จัดส่ง.

      [Confidence 95%]

      อธิบายเพิ่มเติม

      จากที่ AI อธิบายมา มีบางส่วนที่อาจยังไม่ถูกต้องนัก โดยเฉพาะเรื่องขอววัตถุประสงค์ในการเขียนสูตรแล้วมี (…+1) /2 ในช่วงท้าย เดี๋ยวเรามาทำความเข้าใจกัน

      ถ้าลองเขียนสูตรแค่ ตรง d + {-1, 1} มันจะได้ผลแบบนี้

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 464

      พอทำเป็น TOCOL ก็จะได้เป็นคอลัมน์เดียวแบบนี้

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 465

      ซึ่ง OK แหละ แบบนี้ช่วงวันที่มันก็จะเยอะึ้นมา ทำให้สามารถหาเจอได้ตามเกณฑ์ที่กำหนด อย่างไรก็ตาม อย่าลืมว่าสิ่งที่ต้องการคือตำแหน่งที่จะเอาไปใช้อ้างอิงใน Delivery Date + Vendor อันเดิม ดังนั้น เนื่องจากสมมติเดิม มี 6 วัน พอแตกแบบใหม่ ก็จะเป็น 6*2 = 12 วัน

      ดังนั้นสมมติว่าใน List เจอเป็นตัวที่ 3 หรือ 4 ของจริงก็ถือว่าเป็นลำดับ 2

      แบบนี้เราก็เลยต้องคำนวณย้อนกลับ โดยเอาไปหาร 2 แต่ทีนี้มันมี Trick พิเศษนิดหน่อย คือ คุณ Excel Wizard เค้ารู้อยู่แล้วว่า INDEX มันเอาลำดับที่เป็นจำนวนเต็มเท่านั้น ถ้าใส่ลำดับ 2.5 ก็จะเทียบเท่ากับ 2 ได้เลย

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 466

      ดังนั้นเค้าเลยใช้วิธี +1 เข้าไปก่อนที่จะหาร 2 เพื่อให้ลำดับ Perfect นั่นเอง (ซึ่งจริงๆ ไม่เกี่ยวกับการหาค่าเฉลี่ยตามที่ AI อธิบาย แต่ว่าอย่างน้อยมันก็ทำให้เราพอคลำทางถูก)

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 467

      แล้วพอได้ลำดับที่ถูกต้อง ก็ใช้ INDEX ดึงค่าออกมา ซึ่ง Excel Wizard มีการใส่ {1,2} แปลว่าให้ดึงผลทั้งคอลัมน์ 1 และ 2 ออกมาทั้งคู่เลย

      สุดท้ายก็ได้แบบนี้ ซึ่งได้ผลลัพธ์ทั้งหมดออกมาจากสูตรเดียว

      แกะสูตร Excel สุดซับซ้อน ให้เข้าใจง่ายขึ้นด้วย AI Chatbot : ThepExcel GPT 468

      ข้อจำกัดของ AI ในการอธิบายสูตรและการแก้ไข

      แม้ว่า AI Chatbot อย่าง ThepExcel GPT จะสามารถช่วยอธิบายสูตร Excel ที่ซับซ้อนได้ดี แต่สำหรับสูตรที่ซับซ้อนมากๆ หรือใช้ฟังก์ชันที่ค่อนข้างใหม่ บางครั้ง AI ก็อาจจะอธิบายได้ไม่ครบถ้วนทั้งหมด หรือไม่เข้าใจวัตถุประสงค์ของสูตรได้อย่างถ่องแท้ ดังนั้นเราจึงควรใช้วิจารณญาณในการพิจารณาคำอธิบายจาก AI ควบคู่ไปกับการทำความเข้าใจด้วยตัวเองด้วย และหากสงสัยเราก็สามารถซักถาม AI เพิ่มเติมได้เรื่อยๆ จนกว่าจะเข้าใจครับ

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

      สรุป

      การใช้ AI Chatbot อย่าง ThepExcel GPT สามารถช่วยให้เราเข้าใจสูตร Excel ที่ซับซ้อนได้ง่ายขึ้นอย่างมาก เพียงแค่ส่งสูตรหรือรูปภาพไป มันก็จะช่วยแกะและอธิบายให้เราเข้าใจได้อย่างเป็นขั้นตอน และยังสามารถตอบคำถามข้อสงสัยเพิ่มเติมได้อีกด้วย

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

      หากสนใจลองใช้ ThepExcel GPT ในการแกะสูตร Excel สามารถเข้าไปที่ลิงก์นี้ได้เลยครับ: https://chatgpt.com/g/g-GQjMXWNEy-thepexcel-gpt

      หวังว่าบทความนี้จะเป็นประโยชน์กับทุกท่านนะครับ สู้ๆ กับการเรียนรู้ไปด้วยกันครับ!