Author: Sira Ekabut

  • เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก

    ช่วงหลังๆ นี้ ผมเพิ่งลองเล่น Remix ใน Sora 2 แบบจริงจัง แล้วมันมีโมเมนต์ที่แบบ… เฮ้ย นี่มันโคตรสนุกไปเลยย!! จนต้องเอามาเล่าให้เพื่อนๆ ลองใช้บ้างนี่แหละ

    เพราะสิ่งที่ทำให้ Sora 2 น่าสนใจกว่า Platform สร้างวีดีโอทั่วไปคือ
    แอป Sora ที่เป็น social feed เต็มตัว

    • ฟีดแบบ vertical คล้าย TikTok / Reels แต่ทุกคลิปถูกสร้างด้วย Sora 2 ทั้งหมด และเราก็สร้างเองได้เลยง่ายๆ
    • มีฟีเจอร์ Cameo / Characters ให้ใส่ตัวเองหรือเพื่อนเข้าไปในคลิปได้ (ภายใต้ระบบ consent และสิทธิ์ที่ควบคุมได้) ซึ่งผมพูดถึงไปในบทความก่อนหน้าแล้ว
    • และประเด็นสำคัญในบทความนี้ คือ เราสามารถ Remix คลิปของคนอื่น (หรือคลิปตัวเอง) ได้ทันที

    Remix = เอาคลิปเดิมมาปั้น… แบบดินน้ำมันดิจิทัล

    ถ้าให้อธิบายแบบบ้านๆ เลย
    Remix คือการเอาคลิปเดิมมาเป็นโครง แล้วให้เราเขียน Prompt บอกว่าต้องการให้มัน “เปลี่ยนอะไรบ้าง”??
    โดยที่โครงหลักยังอยู่ครบ เช่น มุมกล้อง การเคลื่อนกล้อง โทนจังหวะ

    มันคือแนวคิดที่เรียกว่า Semantic Editing
    คล้ายกับเราเป็นผู้กำกับ มีความต้องการปรับผลลัพธ์ที่อยากได้ว่า
    “ซีนเดิมแหละ แต่ขอทำใหม่ให้เป็นกลางคืน + ฝนตก + อารมณ์เหงานิดๆ” แบบนี้

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

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

    วิธีการ Remix

    เวลาผมทำคลิปอะไรที่ “เกือบได้ดั่งใจแล้วเชียว” เราไม่จำเป็นต้องเริ่มใหม่
    แต่จะใช้คลิปจากตัวที่ฐานดีแล้ว เช่น motion ดี มุมกล้องสวย แล้วค่อยใช้ Remix เปลี่ยนเฉพาะที่อยากเปลี่ยน

    โดยกดปุ่มที่เป็นรุปวงกลมหมุนๆ อันนี้ (ในคอมพ์=อยู่ใต้รูป หรือ ในมือถือ=ข้างขวาของรูป) นะ ซึ่งกดได้จากคลิปไหนก็ได้ คลิปตัวเองก็ได้ คลิปคนอื่นก็ได้ คลิปที่มี cameo/character ก็ได้ (ขอแค่ เป็นคลิปที่ publish แล้ว และไม่ได้ปิดสิทธิ์การ Remix ก็พอ)

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 1

    กดเข้าไปแล้ว เราก็จะสามารถ Prompt ได้ว่าอยากจะแก้คลิปให้เป็นยังไง เทคนิคที่ผมใช้บ่อยคือการเขียน Prompt จะบอกประมาณนี้

    “ให้ xxxx เหมือนเดิม แต่ … แต่เพิ่ม yyyy”
    “ให้ xxxx เหมือนเดิม แต่ … แต่เปลี่ยน yyyy เป็น zzzz ”

    เช่น ผมไปกด Remix คลิปนี้ ที่เป็นแมวถือหอกอยู่หน้าประตู แล้วมีผู้หญิงเจ้าของแมวออกมาห้าม

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 2
    https://sora.chatgpt.com/p/s_68f9d3624e148191aa7c51fed51ea38e

    แล้วผมไปเขียน prompt ว่า ให้ไปถือ light saber แทน

    เปลี่ยนเป็นแมวถือ light saber รำดาบแบบปรมาจารย์ jedi

    ก็จะได้คลิปนี้มาเลยโดยที่เราไม่ต้องไปสั่ง prompt อะไรใหม่หมดแต่แรก
    สังเกตว่า แสงของ light saber สมจริงสุดๆ เหมือนมันคิดใหม่ตามสิ่งที่ควรเป็นจริงๆพอสมควรเลย ไม่ได้จำสีของภาพเดิมอะไรทั้งสิ้น

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 3
    https://sora.chatgpt.com/p/s_690c498b8cac8191b7313eae39bfe6f6

    ใช้ Remix ให้ได้ผล: ค่อยๆ เปลี่ยนทีละเรื่อง

    ทริกที่ผมใช้บ่อยมาก ในการ Remix ให้ Work คือ ค่อยๆ เปลี่ยนทีละเรื่อง เช่น

    • รอบนี้เปลี่ยนสภาพแสง
    • รอบถัดไปเปลี่ยนตัวละคร
    • รอบต่อไปค่อยปรับ motion

    แยกทีละชั้น แม่นกว่า และควบคุมง่ายกว่าแบบยำรวมทีเดียว (ถ้าลองเปลี่ยนทีเดียวแล้วไม่ work)

    การกด Remix จากคลิปที่มี Cameo/Character ของต้นฉบับ

    เท่าที่ผมลองดู การกด Remix จะติด Cameo/Character ของต้นฉบับมาด้วย ถ้าใส่ Character ใหม่เข้าไปอีก มันจะเป็นยังไง?

    เช่น สมมติ ผม Remix คลิปที่มี Character น้องฟ้า @AiAngel.03 พาเที่ยวที่กระบี่ อยู่แล้ว แต่ดันสั่งให้เปลี่ยนเป็น @AiAngel.06 (เวย์) ดูสิว่าจะเป็นยังไง?

    เปลี่ยนเป็น @aiangel.06 (เวย์)
    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 4
    https://sora.chatgpt.com/p/s_691829960b3c8191a26e645dbd716285

    จะได้แบบนี้ คือมุมกล้องเดิม แต่เปลี่ยนคน เปลี่ยนชุด ได้ผลออกมาดีเลย! แถมฟิสิกส์ทุกอย่างสมจริง คิดใหม่ ไม่ได้เป็นการจำภาพเดิม

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 5
    https://sora.chatgpt.com/p/s_691dfd6accfc8191bb0a51260b574f98

    ส่วนอีกอัน ลองสั่งจากคลิปแรก ให้เพิ่มตัวละครเข้าไปเลย ไม่ได้เปลี่ยนตัวเดิมออก

    เพิ่มตัวละคร @aiangel.06 (เวย์) เข้าไปเป็นพิธีกรคู่กัน

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

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 6
    https://sora.chatgpt.com/p/s_691e0282a6a88191bdd57fb45f2c0b7a

    สิ่งที่ Prompt เปลี่ยนได้ vs สิ่งที่ต้องปรับใน Setting/API

    ตรงนี้บางคนอาจเข้าใจผิดว่า “เราเปลี่ยนอะไรก็ได้ด้วย Prompt เลยไหม?” แต่ไม่จริงนะครับ

    ตัวอย่างของสิ่งที่ Prompt เปลี่ยนได้

    • แสง / บรรยากาศ / Mood
    • สไตล์ภาพ / มุมกล้อง
    • สี วัสดุ พื้นผิว
    • การกระทำของตัวละคร

    ส่วนสิ่งที่แก้ด้วย Prompt ไม่ได้ แต่แก้ได้ใน Setting/API ตอน Gen ก็มีประมาณนี้

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 7
    • Orientation : ขนาดภาพ (เลือกเอาว่า แนวตั้ง หรือ แนวนอน)
    • Duration : ความยาวคลิป (เลือกว่าเอา 10 วิ หรือ 15 วิ )

    ให้นึกง่ายๆ ว่า

    • Prompt = เนื้อหาข้างในเฟรม
    • Setting / API = ขนาด/กติกาของคลิป

    เรามาดูกันว่า ถ้าจะเปลี่ยนจากคลิปแนวตั้งเป็นแนวนอน เราต้องปรับที่ Setting แบบนี้ โดยเลือก Orientation เป็น Landscape ครับ

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 8

    จะพบว่ามันก็สามารถทำคลิปเป็นกล้องแนวนอนได้เลย สุดยอดมะ!

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 9
    https://sora.chatgpt.com/p/s_691e025a40208191af256e047f8d8b79

    Remixes Lineage : สายธารแห่งความสนุก

    สิ่งที่ผมรู้สึกว่ามัน “ว้าวมาก” ที่สุดเลย ของ Remix คือเวลาเปิดดู Lineage (เส้นทางที่มาที่ไปของคลิป Remix นั้นๆ)

    ในมือถือ Mobile

    แทนที่เราจะเลื่อนขึ้นลงอย่างเดียวเพื่อดูคลิปใหม่ๆ

    • เลื่อนขึ้นลง (swipe up) = เปลี่ยนหัวข้อ/คลิปใหม่ อันนี้ปกติ

    [ แต่ถ้ามี …. ขึ้นมาใต้คลิป = มีสายธารแห่งการ Remix ]

    • เลื่อนไปด้านซ้าย/ขวา (swipe left/right) = ดำดิ่งเข้าไปใน “จักรวาลของ Remix” ของคลิปเดียวกัน ไล่ดูว่าไอเดียเดียวกันถูกบิดไปในมุมต่างๆ ยังไงบ้าง
    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 10

    ในคอมพิวเตอร์ Desktop

    • ใช้วิธีคลิ๊กเลือกเอาที่คลิปแล้วดูโซนขวาบน ถ้ามีรูปขึ้นหลายๆ อันแสดงว่า มีสายธารแห่งการ Remix ซึ่งรูปด้านซ้ายสุด คือ ต้นทาง Original จริงๆ
    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 11

    คือเราจะเห็นเลยว่า มันคือการเห็นวิวัฒนาการของไอเดียแบบมีหลักฐานภาพจริงๆ ไม่ใช่แค่ความรู้สึก อย่างคลิปแมวหน้าประตู จริงๆ ต้นทางสุดๆ เลยคือคลิปนี้ เป็นหมาถือปืน 555 (ตัวเลขการถูกนำไป remix 18K!! )

    มันมีระบบ Track ว่าเราไป Remix ใครมา ใครเป็นต้นทางของ idea กันแน่ แต่ใน UI มันยังดูชัดๆ ไม่ได้ว่าใครเอามาจากใครตรงๆ นะ (ไม่ได้ทำเป็น Tree ให้) แต่ข้อมูลมันเก็บไว้อยู่แล้วว่าใครเอา Video ไหนมา Remix ในอนาคตอาจมีวิธี Explore ที่เจ๋งกว่านี้

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 12
    https://sora.chatgpt.com/p/s_68f45d441c608191af33337a4828cfee

    ถ้าเราไล่ไปด้านขวา ก็อาจเจอคลิปที่ถูกเปลี่ยนเป็นอะไรไม่รู้เต็มไปหมด พัฒนาต่อยอดกันไปเรื่อยๆ บ้าบอมากๆ 555

    ผมชอบตรงนี้มาก
    เพราะมันเปลี่ยนมุมมองจาก “เอางานคนอื่นมาดัดแปลง = ขโมย”
    กลายเป็น “เข้าร่วมการสร้างสรรค์!” ซึ่งสนุกกว่ากันเยอะเลย 🔥

    Sora 2 ทำ Remix ยังไงในทางเทคนิค? (น่าจะ)

    Sora ไม่ได้มองวิดีโอเป็นเฟรม แต่มองเป็น “patches” ของกาลอวกาศ

    OpenAI บอกชัดเจนว่า Sora ใช้สถาปัตยกรรม Diffusion Transformer (DiT)
    นั่นคือ วิดีโอจะถูก encode แล้วถูกหั่นเป็น Spacetime Patches (คล้าย token ของ GPT) แล้วโมเดลจะดูความสัมพันธ์ของ patch เหล่านี้ทั้งหมดพร้อมกัน ไม่ได้ดูเป็นภาพนิ่งๆ

    ผลลัพธ์จริงคือ มัน work มาก! พอเข้าใจเรื่องนี้ จะรู้เลยว่าทำไม Sora คุมจังหวะกล้องเก่งกว่าระบบ text-to-video เจ้าอื่นครับ

    Remix อ้างอิงแค่คลิปล่าสุดมาทำงานต่อ

    เราจะใช้แค่ “คลิปเดียว” ในการเป็นต้นแบบของ Remix ในคลิปที่กำลังจะ Gen

    ดังนั้น logic ของ Sora เวลาปั้นคลิปจะเป็นแบบนี้เสมอ:

    คลิปใหม่ = คลิปล่าสุด (รวม cameo/character) + prompt ใหม่

    เช่นแบบนี้

    1. คนแรกสร้าง คลิป A มีตัวละครหนึ่งตัว
    2. คนที่สอง Remix เป็น คลิป B remix ลบตัวละครนั้นออก
    3. คนที่สาม Remix B เป็น คลิป C

    เชิงเทคนิค:

    • โมเดลตอนที่คนที่สามสร้าง คลิป C จะดูแค่ คลิป B + prompt ใหม่ โดย ตัวละครใน คลิป A นั้น “ไม่มีวันกลับมา” (เว้นแต่เราสั่งเพิ่มใหม่ด้วย prompt)
    • แต่เนื้อหาใน คลิป B = เกิดจาก คลิป A
      เลยอาจรู้สึกว่า “DNA/วิญญาณ ของ คลิป A” เหมือนจะไหลมาถึง C ด้วย แต่ในความเป็นจริง มันก็แค่ถูกดัดแปลงซ้ำๆ แค่นั้นเอง

    ถ้าโมเดลดึงบรรพบุรุษมาจริงๆ:

    • บางครั้งต้องมี “เงาของข้อมูลเก่า”
    • หรือ element ที่ “เคยอยู่แต่ถูกลบ” ควรจะติดกลับมาในรุ่นลูก
    • หรือมีการกลับไปใช้โทน/กล้องของ ancestor แบบสุ่มๆ

    แต่ ไม่มีเหตุการณ์แบบนั้นเลย (ถ้าดึงบรรพบุรุษ ทุกรุ่น มาใช้พร้อมกัน มันจะเกิด conflict อย่างรุนแรงแน่นอน 55)

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

    ถ้าไม่อยากให้ตัวละครเพี้ยน ก็ต้องใช้ Cameos / Characters มาช่วยซึ่งผมได้อธิบายไปในบทความก่อนหน้าแล้ว ใครยังไม่ได้อ่านไปอ่านกันได้

    Remix = กับการท้าทายระบบ Content Violations

    อีกเรื่องที่ผมเจอบ่อยขึ้นเรื่อยๆ จากการเล่น Sora 2 คือ…
    Remix ดันกลายเป็นพื้นที่ที่คนเอาไว้ “ท้าทายระบบกรอง” มากที่สุดแบบไม่ตั้งใจ 😅

    ตอนแรกผมก็แค่เอาไว้ปั้นคลิปต่อให้ดีขึ้น
    แต่พอเข้าไปดูใน community จริงๆ มันมีอีกโลกหนึ่งเลยครับ

    ความจริงคือ…

    ตอนเราสร้างคลิปใหม่ ระบบกรอง (content moderation) จะทำงาน 2-4 รอบ ครับ

    1. คัดกรอง media ที่อัปโหลดแนบขึ้นไป
    2. คัดกรองที่ prompt เลย ถ้ามี Keyword บางอย่างมันจะไม่ยอม Gen แต่แรก
    3. คัดกรองหลังจะ Video ถูกสร้างขึ้นมาแล้ว แต่ยังไม่เกิดออกมาให้เราดูจริงๆ
    4. คัดกรองย้อนหลังจากมี post ไปแล้ว (ผมเองก็ถูกลบ มีเมลมาเตือนด้วย 55)

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

    เวลาเราทำ Remix ความรู้สึกเหมือนโมเดลอาจกำลังคิดว่า

    “คลิปนี้เคยผ่านมาตรฐานมาแล้วนะ… งั้นเราปรับต่อก็ได้มั้ง”

    ซึ่งแน่นอนครับว่า บางทีเข้มขึ้น บางทีหลวมลง แล้วแต่โชคจริงๆ
    ขึ้นกับคลิปต้นทาง + prompt ใหม่ + พฤติกรรมที่เราปั้นมันต่อ

    สรุปคือ…มันเดายากจริงๆ 😅
    และนี่แหละที่ทำให้ Remix กลายเป็นพื้นที่ทดลองของคนจำนวนมาก

    แม้กระทั่ง Account Sora Official เอง ก็มา Remix กวนๆ เหมือนกัน (เล่นมุก Content Violations เฉยเลย 555 )

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 22

    เทคนิคที่ผู้ใช้บางคนเอาไว้ “เล่นเกม” กับระบบกรอง

    สิ่งที่เห็นบ่อยๆ คือ:

    • เปลี่ยนชื่อสิ่งของ/ตัวละคร
      เช่น ไม่ใช้ชื่อแบรนด์ตรงๆ แต่ใช้คำบรรยายแบบอ้อมๆ เช่น
      “yellow electric mouse” แทนตัวที่เรารู้ว่าใคร
    • เขียน prompt แบบกำกวมหรือเล่นคำ
      ใช้คำที่มีความหมายหลายแบบ ทำให้ระบบตรวจความเสี่ยงตีความไม่ตรง
    • ใช้เสียงมาช่วย ให้รู้สึกว่ามัน NSFW เช่น มีเสียงตบมือ เอาขากระทบพื้นเป็นจังหวะ…
    • ใช้การออกกำลังกาย... การเคลื่อนไหวเป็นจังหวะ เหมาะที่สุดแล้ว
    • ใช้เกมส์โชว์… เมื่อเป็นเกมส์โชว์ กติกาจะแปลกแค่ไหน ทำอะไรแปลกๆ ก็ย่อมได้
    • ใช้สิ่งอื่น… ที่หน้าตาคล้ายๆ สิ่งนั้น
    • แบ่ง generation เป็นชั้นๆ
      เช่น
      1. สร้างฉากให้ปลอดภัย
      2. Remix เพิ่มตัวละคร
      3. Remix เพิ่ม movement
      4. Remix เพิ่ม emotion แบบเฉียดๆ จะถูกแบน
        วิธีนี้จะเลี่ยงการโดนบล็อกตอนสร้างใหม่ในรอบเดียว
    • ใช้ภาษาแบบแปลตรงเครื่อง/ภาษาผสม
      เพราะระบบกรองถูกฝึกกับภาษาอังกฤษชัดเจนมากกว่า
      พอเจอภาษาที่คำไม่เป๊ะ มันมักจะมึนและปล่อยผ่าน

    ผมเจอคนญี่ปุ่น “เล่นกับการท้าทายระบบ” เก่งมาก

    เลื่อนฟีดทีไร จะเจอสาย anime, parody, suggestive ที่ “เนียนมาก” จนระบบจับไม่ค่อยได้… และ ส่วนใหญ่ที่ผมเจอทำเจ๋งๆ คือ creator คนญี่ปุ่นทั้งนั้น

    เหตุผลหลักๆ ที่เจอก็ประมาณนี้:

    • วัฒนธรรม doujin + parody → เขาชินกับการเลี่ยงเส้นมานาน
    • ใช้ภาษาอังกฤษไม่เป๊ะ → ระบบอ่านแล้วงง ไม่ flag
    • คนญี่ปุ่นถนัดการ “ค่อยๆ ดันขอบเขตทีละนิด” มากกว่าใส่ตรงๆ

    เรียกง่ายๆ ว่าเขาเก่งเรื่อง “เล่นกับเส้น” มานานก่อนมี AI อีกครับ 55

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

    อันนี้เริ่มจากล้างมือ

    อันนี้ผมก็ลองมาแจมด้วย

    คลิปเด็กกำลังกายอันนี้ก็ไปไกลมากอยู่ (ต้นฉบับแรกปลอดภัย ไม่มีอะไรเลย)

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 29
    https://sora.chatgpt.com/p/s_69041394da14819185639fd7fa6c9046

    ส่วนอันนี้คือคลิปต้นฉบับการ Remix ในตำนานครับ เจ้า Geoduck (หอยงวงช้าง) ไปดูเอาเองนะ อันนี้คือสุดแล้ว มันคิดได้ไง 555 😂

    เจาะลึกฟีเจอร์ Remix ใน Sora 2: จากคลิปเดียวสู่สายธารแห่งความสนุก 30
    https://sora.chatgpt.com/p/s_68f24fcd70908191864647f870365233

    สรุป: จากกดสุ่ม → สู่การกำกับจักรวาลของไอเดีย

    Remix + Lineage ใน Sora 2 ทำให้การสร้างวิดีโอเปลี่ยนไปเยอะมาก
    สรุปแบบเร็วๆ ตามสไตล์ผมนะครับ

    • จากสุ่มดวง → เป็นงานที่ “กำกับได้จริง”
    • จากคลิปเดี่ยว → กลายเป็นสายธารแห่งความสนุก
    • จากสร้างคนเดียว → สู่การสร้างร่วมกันทั้งชุมชน 🔥

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

  • วิธีสร้าง Character ใน Sora 2 แบบเป็นคนสมจริง

    วิธีสร้าง Character ใน Sora 2 แบบเป็นคนสมจริง

    ช่วงนี้ผมเล่น Sora 2 หนักมากครับ เพราะมันเหมือนเปิดประตูไปอีกโลกหนึ่งของการทำวิดีโอที่โคตรสนุก แถมยัง “คุมความเป็นตัวละคร” ได้แบบที่เมื่อก่อนทำไม่ได้ (หรือทำได้ก็ไม่เนียนเท่านี้)

    แต่ก็มีคำถามเดิม ๆ ที่คนส่งข้อความมาหาผมทุกวันเลยว่า

    • Cameo กับ Character มันต่างกันยังไง?
    • ทำไมอัปโหลดภาพคนจริงไม่ได้?
    • จะสร้างคนให้ Consistent เป็นคนเดิมตลอดทุกคลิปต้องทำยังไง?

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

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

    บทความนี้ผมเลยสรุปให้แบบอ่านจบแล้วทำงานได้เลยครับ เพราะผมเองก็สร้าง Character ที่สมจริงออกมาเพียบ จนกลายคนก็มาถามว่าทำยังไง?? (เพื่อนๆ มาเรียกใช้ได้เลยนะ)

    วิธีสร้าง Character ใน Sora 2 แบบเป็นคนสมจริง 31
    ถ้ายังไงฝากติดตาม https://sora.chatgpt.com/profile/aiangelgallery ด้วยนะครับ ❤️
    วิธีสร้าง Character ใน Sora 2 แบบเป็นคนสมจริง 32
    เหล่า Ai Angel ให้ทุกคนมาเรียกใช้บริการใน Soraได้เลย แค่พิมพ์ @aiangel แล้วเลือกเลย

    แนะนำ Sora2

    สำหรับคนที่ไม่รู้จัก ต้องอธิบายหน่อยว่า Sora 2 คือเวอร์ชันวิดีโอโมเดลที่ออกแบบให้เนียนกว่าเดิมทุกด้าน คือ.. ฟิสิกส์ดีขึ้น การขยับสมจริงกว่าเดิมเยอะ คุมกล้องดีขึ้น และที่ผมชอบสุดคือ “เหมือนเอากล้องมือถือถ่ายคนจริงได้เลย”

    จังหวะนี้เหมาะมากสำหรับคนสร้างคอนเทนต์ เพราะแค่พิมพ์ prompt แล้วต่อยอดได้ไวมาก รีมิกซ์ได้ แชร์ได้ ทรงเดียวกับการทำคอนเทนต์บนโซเชียล และ Sora เองก็ยังเป็น Social Platform ย่อมๆ ด้วย (https://sora.chatgpt.com/)

    หน้าตาของ Sora Platform จะเป็นประมาณนี้ คือมี Video ที่แนะนำมาให้เรา คล้ายๆ พวก Tiktok แต่ว่าเราสามาถกดสร้าง Video ของเราได้เลย สามารถใช้ได้ฟรี วันละ 30 คลิป (แต่ ณ ตอนนี้ต้องมี Invite ก่อน)

    วิธีสร้าง Character ใน Sora 2 แบบเป็นคนสมจริง 33

    ความเจ๋งของ Sora2 คือ คลิปที่ Gen ออกมา มันเป็นธรรมชาติมาก ภาพสมจริงมาก เสียง perfect มาก และยังเข้าใจมุกตลกได้ดีมากๆ ณ ตอนนี้มันเป็นเครื่องจักรผลิต Meme ชั้นดี แบบที่ Model อื่นเทียบไม่ได้เลย คือนั่งดูได้ทั้งวัน แต่ละคลิปขำสุดๆ

    และอีกจุดนึงที่โดดเด่นมากๆ คือ มันยอมให้เราเอาตัวเรา หรือตัวเพื่อนเรา ไปอยู่ในคลิปที่เราสร้างได้ด้วย มันก็เลยสนุกมาก เป็น Social Media ดีๆ อันนึงเลย คือแทนที่จะส่งข้อความหากัน คือ ส่งคลิปหากันแทนได้เลย (แม้จะช้าไปหน่อย 55)

    ถ้าใครลองเล่นแล้วซักพักนึง น่าจะเริ่มเห็นสิ่งที่เรียกว่า “Character” โผล่ขึ้นมาด้วย แล้วก็มักจะมีคำถามนึงเกิดขึ้นเสมอ นั่นก็คือ…

    “ตกลง Character ต่างกับ Cameo ยังไง?”
    และที่งงยิ่งกว่านั้น คือ…
    Character คนจริงทำยังไง?”

    เลยขอเขียนเป็นคู่มือแบบสั้น กระชับ และใช้งานได้จริงครับ อ่านให้จบล่ะ!


    Cameo = ตัวเราแบบยืนยันตัวตน

    Cameo = เอาตัวเรา (หรือคนที่อนุมัติ) เข้าไปเป็นตัวละครในคลิป เหมือนเราเป็นดารารับเชิญ ในหนังนั่นแหละ ซึ่งตอนสร้าง Cameo ต้องใช้ Sora ใน iOS ยืนยันด้วยการ อัดคลิปวิดีโอ + เสียงของคนนั้น สั้นๆ (ต้องอ่านประโยคที่ระบบให้ เช่น เราอ่านภาษาไทยได้เลย)

    ป.ล. มันจะจำทั้งหน้าตา เสียง ชุด (อาจรวมถึงฉากหลัง) ไปด้วยนะครับ ดังนั้นใส่ชุดที่อยากได้ด้วยก็ดี มันจะกลายเป็นชุด default ไปเลย ถ้าไม่ระบุ และถ่าให้ชัด แสงดีๆ หน่อย

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

    รวมถึงกำหนดได้ด้วยว่าจะให้ปรากฏในคลิปคนอื่นในลักษณะไหน หรือ ห้ามทำอะไรบ้าง (พวกนี้เปลี่ยนแปลงได้ตลอดนะ)

    วิธีสร้าง Character ใน Sora 2 แบบเป็นคนสมจริง 34

    ซึ่งเวลาจะเรียกใช้งาน คนที่เรามีสิทธิ์สามารถใช้ @handle เรียกใช้ Cameo ใน Prompt ได้เลย เช่น

    @siraekabut กำลังต่อยมวยกับ @sama บนเวทีมวยราชดำเนิน
    วิธีสร้าง Character ใน Sora 2 แบบเป็นคนสมจริง 35

    ซึ่งในทางปฏิบัติ ประมาณไม่เกิน 2 Cameo จะกำลังดี ถ้าเกินนั้น จะเพี้ยนเยอะขึ้นพอสมควร หน้าตาอาจปนกันได้ (แต่ก็ลองได้นะ)

    Character ตัวละครสมทบ (ที่ openai ตั้งใจว่าไม่ใช่คน)

    วิธีสร้าง Character ใน Sora 2 แบบเป็นคนสมจริง 36

    Character (หรือ Character Cameos) คือ ตัวละครที่สร้างจากคลิปสั้น ๆ ของสัตว์ / วัตถุ / ภาพวาด ซึ่งจริงๆ แล้วหลักการใช้งานเหมือน Cameo เลย คือ โดย สามารถตั้งชื่อ + @handle + กติกาได้ เราเรียกใช้ในคลิปได้ ให้คนอื่นใช้ก็ได้

    แต่หลักๆ ที่ OpenAI ออกแบบมา คือ ไม่ยอมให้ใช้คนจริง

    ภาพคนจริง: อัปโหลดไม่ได้
    ถ้าเป็น “หน้าเหมือนคนจริง” จะ อัปโหลดไม่ได้ หรือ กดสร้างเป็น Character ไม่ได้ → Open AI ตั้งใจให้ใช้ Cameo เท่านั้น

    แต่ว่าเราก็พอมีวิธีอยู่ครับ ทำตามนี้


    วิธีสร้าง Character ที่เป็นตัวละครสมจริง

    ตรงนี้คือทีเด็ดแบบใช้งานจริงที่อยากให้ทุกคนรู้ครับ 😁

    ปัญหาคือ ถ้าเราพยายามอัปโหลด “ภาพ/คลิปคนสมจริง” → ระบบบล็อก 100%

    แต่ถ้าพยายามอัปโหลด “ภาพคนสมจริงจากเว็บอื่น” → หลายครั้งระบบก็ยังมองว่าใกล้เคียงคนจริงเกินไป → ไม่ผ่านอีก

    วิธีที่ได้ผลที่สุดที่ผมเจอคือแบบนี้:

    หลักการ คือ อยากมีตัวละคร Character ที่สมจริง → ให้ Sora เป็นคนสร้างขึ้นมาก่อน แล้วเราค่อยเลือกคนที่ถูกใจมาใช้ แบบนี้มันจะยอม

    วิธีสร้าง Character ใน Sora 2 แบบเป็นคนสมจริง 37

    Step1 : ให้ Sora 2 สร้างวิดีโอคนเป้าหมายที่เราต้องการ โดยให้เป็นคลิปที่เห้นถึงหน้าตาชัดเจน มีเสียงพูด มีบุคลิกที่ต้องการ

    Tips : ถ้ายังไม่ได้ ให้ปรับ prompt ไปเรื่อย ๆ หรือจะกด Remix ด้วย จนได้หน้า/ทรงผม/บุคลิกที่พอใจก็ได้

    วิธีสร้าง Character ใน Sora 2 แบบเป็นคนสมจริง 38

    Step2 : กด “…” บนคลิปนั้น เลือก Create character แล้ว เลือกช่วงเวลาที่ต้องการเอาไปทำเป็น Character ซึ่งระบบจะ “ยอมผ่าน” เพราะมันเป็นคนที่ Sora สร้างเอง

    Step 3 : กำหนดสิทธิ์และลักษณะบุคลิกให้เรียบร้อย

    วิธีสร้าง Character ใน Sora 2 แบบเป็นคนสมจริง 41

    How to Use : จากนั้นเวลาใช้งานครั้งต่อไป → แค่ใส่ @handle ใน prompt ก็ใช้ได้เลย

    ผมลองแล้วได้ผลบ่อยมากครับ มันเหมือนระบบจะถือว่า “คนนี้เป็น fictional human ของโมเดลเอง” ไม่ได้มาจากรูปจริง ไม่ใช่คนจริง เลยอนุญาตให้ reuse เป็น Character ได้นั่นเอง

    ตรงนี้ช่วยลดเวลาปรับแก้แบบมหาศาลจริง ๆ ครับ เพราะถ้าไม่มี Character หน้าแกว่งหนักมาก โดยเฉพาะงานที่มีหลายฉากต่อเนื่อง

    วิธีสร้าง Character ประเภทอื่นๆ

    • วัตถุ : ถ่ายคลิปเห็นรอบด้านได้จะดีมาก ให้หมุน 360° ช้า ๆ วัตถุพุดไม่ได้อยู่แล้วไม่มีประเด็น
    • สัตว์เลี้ยง : ไปถ่ายคลิปสัตว์เลี้ยงตามปกติได้เลย ไม่มีประเด็นอะไร
    • ตัวการ์ตูน : ใส่รูปนิ่ง เป็น Image Reference แล้ว Gen คลิปจากตัวละครนั้นออกมา กำหนดโทนเสียงและบุคลิกตามต้องการ

    เทคนิคการ Gen คลิปจาก Cameo หรือ Characters

    • ใส่ @handle เสมอ ถ้าจะเปลี่ยนชุดก็ระบุด้วย
    • prompt ฉากควรพูดเฉพาะเรื่อง “สถานที่ / มุมกล้อง / บรรยากาศ”
    • อย่าบรรยายหน้าตาซ้ำซ้อน (ถ้าไม่จำเป็น)
    • สำหรับคนสมจริงให้กำกับ mood/pose ชัดเจน
    • ถ้าฉากยาก ให้ Gen ฉากย่อยๆ หลายๆ อันมาต่อกันอีกที

    ปิดท้าย: ประสบการณ์จริงที่อยากฝากไว้

    ตอนแรกผมเองก็ยังงงกับระบบนี้เหมือนกัน เจอทั้ง error ทั้งไม่ยอมรับบ้างอะไรบ้าง
    แต่พอทำจริงๆ ได้แล้วมันทรงพลังมากครับ
    โดยเฉพาะเวลาทำคอนเทนต์ที่ต้องเล่าเรื่อง หรือต้องการ “ตัวละครประจำ”

    ถ้าเพื่อนๆ คนไหนกำลังทำซีรีส์ TikTok / IG Reels / YouTube Shorts
    บอกเลยว่า Character + Sora 2 = ง่ายขึ้นมากๆ แถมผลงานลื่นขึ้นเยอะมาก

    หวังว่าบทความนี้จะช่วยให้ทุกคนเข้าใจระบบของ Sora แบบหมดจด
    และสร้างตัวละครเจ๋ง ๆ ออกมาได้แบบคุมได้ 100% ครับ 😎

    ถ้ายังไงฝากติดตาม https://sora.chatgpt.com/profile/aiangelgallery ด้วยนะครับ ❤️ไว้ผมจะมาแชร์ เทคนิคของการ Remix ในโอกาสต่อไปครับ บอกเลยว่าเด็ด

  • เข้าใจฟังก์ชันกำลังสอง ด้วยกราฟ พาราโบลา

    เข้าใจฟังก์ชันกำลังสอง ด้วยกราฟ พาราโบลา

    หลายๆ คนคงเคยเห็นสูตรที่เอาไว้แก่สมการกำลังสองเพื่อหาค่า x

    โดยที่หากเราจัดสมการให้อยู่ในรูปแบบ

    y=ax^2+bx+c

    แล้วถ้าเราจัดเพื่อแก่สมการหาค่า x ที่ทำให้ y =0 เราจะได้ว่า

    x=\frac{-b±\sqrt{(b^2-4ac)}}{2a}

    ซึ่งหลายๆ คนมองเหมือนว่ามันเป็นสูตรวิเศษที่เอาไว้ท่องจำแล้วแทนค่าอย่างเดียว แต่จริงๆ แล้วมันมีความหมายและที่มาที่ไปที่ควรจะรู้ไว้ด้วยนะ

    ก่อนอื่นต้องบอกว่า การจะแก้สมการได้นั้นมี 2 วิธีใหญ่ๆ คือ

    1. แยกตัวประกอบ
    2. ใช้สูตร

    วิธีแยกตัวประกอบ

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

    สมมติโจทย์ คือ

    2x^2+10x-12 = 0

    แบบนี้เราควรทำให้อยู่ในรูปแบบง่ายสุดก่อน เช่น หาร 2 ทั้งหมด ก็จะได้ว่า

    x^2+5x-6 = 0

    จากนั้นก็ดูว่า เลข 2 ตัวอะไรเอ่ย? คูณกันได้ -6 แต่บวกกันได้ 5

    • ลองแยกตัวประกอบ -6 ก็ จะมี -1×6, 1x-6 ไม่ก็ -2×3, 2x-3
    • ดังนั้นในเคสนี้ต้องเลือก -1 กับ 6 อ่ะนะ

    ทำให้แยกได้แบบนี้

    (x-1)(x+6) = 0

    นั่นคือ การที่มันจะเป็น 0 ได้ แสดงว่าแต่ละก้อนเป็น 0 นั่นคือ

    • x-1 =0 ทำให้รู้ว่า x= 1
    • x+6 =0 ทำให้รู้ว่า x= -6

    วิธีใช้สูตร

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

    x=\frac{-b±\sqrt{(b^2-4ac)}}{2a}

    เช่น ถ้าเราใช้ Excel กรอกสูตรนี้เข้าไปก็ชิลๆ เลย

    x1 =(-B3-SQRT(B3^2-4*A3*C3))/(2*A3)
    x2 =(-B3+SQRT(B3^2-4*A3*C3))/(2*A3)
    
    โดยที่ A3=a, B3=b, C3=c ของสมการ
    เข้าใจฟังก์ชันกำลังสอง ด้วยกราฟ พาราโบลา 42

    คำตอบก็จะออกมาเป็น x=-6 กับ x=1 เช่นกัน ลองทำเป็นกราฟก็ยิ่งชัด ว่ามันคือจุดที่กราฟตัดแกน x ซึ่งในที่นี้มีสองจุด

    ถ้าเพื่อนๆ ขี้เกียจสร้างกราฟใน Excel ก็ลองใช้ Tools ของ web นี้ได้ครับ ดีเลย

    เข้าใจฟังก์ชันกำลังสอง ด้วยกราฟ พาราโบลา 43

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

    Standard Form

    จริงๆ สมการมหัศจรรย์ มันก็เกิดจาก การจัดสมการพาราโบล่านี่แหละ ซึ่ง พาราโบลาในรูปมาตรฐาน (Standard Form) มีสมการดังนี้

    y = ax^2 + bx + c

    การจะแก้สมการหาค่า x ที่ทำให้ y เป็น 0 เราก็เลยเขียนได้ว่า

    ax^2 + bx + c = 0

    แล้วพยายามจัดรูป

    x^2 + \frac{b}{a}x + \frac{c}{a} = 0

    พยายามให้อยู่ในรูปแบบกำลังสองสมบูรณ์

    \left[ x^2 + 2x\left(\frac{b}{2a}\right) + \left(\frac{b}{2a}\right)^2 \right]
    - \left(\frac{b}{2a}\right)^2 + \frac{c}{a} = 0
    \left( x + \frac{b}{2a} \right)^2 - \frac{b^2}{4a^2} + \frac{c}{a} = 0
    \left( x + \frac{b}{2a} \right)^2 - \frac{b^2 - 4ac}{4a^2} = 0

    ในที่สุดเราจะได้ค่า

    x=\frac{-b±\sqrt{(b^2-4ac)}}{2a}

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

    Vertex Form

    ซึ่งถ้าเราพยายามจัดกราฟ Parabola ให้อยู่ในรูปแบบ Vertex Form จะเห็นภาพชัดกว่า ซึ่งจะเกี่ยวข้องกับนิยามของ Parabola โดยแท้จริง นั่นก็คือ

    พาราโบลา คือเซตของจุดทั้งหมดบนระนาบที่มีระยะจากจุด Focus เท่ากับระยะจากเส้นตรง Directrix
    เข้าใจฟังก์ชันกำลังสอง ด้วยกราฟ พาราโบลา 44
    https://mathbitsnotebook.com/Geometry/Equations/EQParabola.html

    โดยที่ระยะห่างจาก Vertex (จุดยอดกราฟ) ไปถึงจุด Focus จะเรียกว่า p (ดังนั้นจาก Vertex ไปเส้น directrix ก็จะยาว p ด้วย)

    เรามักจะเขียนกราฟ Parabola ให้อยู่ในรูปแบบนี้

    ถ้าเราให้ h,k คือ พิกัดของจุดยอด Vertex ของกราฟพาราโบล่า จะทำให้เรารู้ตำแหน่ง Focus และสมการของ Directrix ไปด้วย

    • vertex = (h,k)
    • แกนสมมาตร คือ x=h
    • focus ต้องเลื่อนขึ้นไปอีก p (จาก k) ทำให้ได้เป็น (h, k+p)
    • directrix ต้องลงมาอีก p (จาก k) ทำให้ y=k-p
    เข้าใจฟังก์ชันกำลังสอง ด้วยกราฟ พาราโบลา 45
    https://flexbooks.ck12.org/cbook/ck-12-interactive-geometry-for-ccss/section/10.3/primary/lesson/equations-of-parabolas-geo-ccss/

    ทั้งหมดทำให้เขียนสมการอยู่ในรูปแบบนี้ได้

    (x - h)^2 = 4p(y - k)

    หรือถ้าย้ายข้างให้ y อยู่ข้างเดียวได้ว่า

    (y−k)=\frac{1}{4p}(x−h)^2

    สามารถดูการพิสูจน์โดยใช้หลักการเรื่องระยะห่างเส้นตรงเท่ากันได้ที่นี่

    แล้ว Vertex Form มันไปเกี่ยวกับ Standard Form ยังไง?

    ตอนนี้เรารู้แล้วว่า กราฟพาราโบล่าสามารถเขียนได้ในรูปแบบ Vertex Form แล้วมันกลับไปผูกกับรูปแบบ Standard Form ยังไง? มาดูกันทีละขั้นตอน

    สมการตอนแรกจะเป็น

    (y−k)=\frac{1}{4p}(x−h)^2

    หรือ

    y=\frac{1}{4p}(x−h)^2 + k

    ซึ่งหน้าตาเหมือนกับ

    y= ax^2+bx+c

    ดังนั้น เราจะเทียบหาค่า a ได้เลย

    a=\frac{1}{4p}

    หรือเราจะเขียน Vertex Form แบบที่มี a แทน p ก็ได้

    y=a(x−h)^2 + k

    ความหมายของ a,b,c

    a = ตัวกำหนด “ความโค้ง” และ “ทิศทาง”

    y= ax^2

    • ถ้า a>0 → พาราโบลาหงายขึ้น
    • ถ้า a=0 → กลายเป็นกราฟเส้นตรงแบนราบ (ไม่ใช่พาราโบล่า)
    • ถ้า a<0 → พาราโบลาคว่ำลง
      • ถ้า a ติดลบ p ก็จะติดลบ ทำให้ จุด focus มันมาอยู่ข้างล่างของ vertex นั่นเอง
    • ยิ่ง |a| มาก → กราฟจะแคบลง
    • ยิ่ง |a| เล็ก → กราฟจะกว้างออก
    เข้าใจฟังก์ชันกำลังสอง ด้วยกราฟ พาราโบลา 46

    สรุปง่ายๆ: a คุม “รูปร่าง” ของพาราโบลา อันนี้น่าจะเข้าใจง่าย จำง่ายนะครับ


    ต่อไป มาดูตัว b กับ c กันต่อ

    จาก

    y=a(x−h)^2+k

    ถ้าเรากระจายออกมา จะได้ว่า

    y = a(x^2-2hx+h^2) + k

    จัดกลุ่มยกกำลัง

    y=ax^2−2ahx+(ah^2+k)

    แบบนี้แปลว่า

    b=-2ah
    c=ah^2+k

    ทำให้มองในทางกลับกันได้ว่า

    h=\frac{-b}{2a}
    k=c−\frac{b^2​}{4a}

    ถ้าพิจารณาแบบนี้

    b = ตัวที่มีผลในการเลื่อนแกนซ้ายขวา

    โดยทิศทางของ b ตรงข้ามค่าของ a

    • ถ้า a เป็น + : ยิ่ง b มาก = x เลื่อนซ้าย (h ติดลบเยอะ)
    • ถ้า a เป็น – : ยิ่ง b มาก = x เลื่อนขวา (h + มาก)
    • ถ้า b เป็น 0 จะทำให้ h = 0 (แกนสมมาตรอยู่เส้นดิ่งตรงกลาง)
    เข้าใจฟังก์ชันกำลังสอง ด้วยกราฟ พาราโบลา 47

    c = ตัวที่เลื่อนกราฟขึ้นลง และเป็นตัวกำหนด “จุดตัดแกน y” ด้วย

    ส่วนตัว c นั้นพิจารณาง่าย เพราะ จาก

    y = ax^2 + bx + c

    ค่า c มันจะ adjust กราฟให้สูงขึ้น หรือ ต่ำลง (เพราะมัน + – ค่าเข้าไปให้ y ทื่อๆ เลย)

    • ถ้า c เป็น + : กราฟเลื่อนขึ้น
    • ถ้า c เป็น – : กราฟเลื่อนลง

    และถ้าเรา set ให้ x เป็น 0 ค่า c จะ บอกได้เลยว่ากราฟ “ตัดแกน y” ที่ตรงไหน

    ดังนั้น c = ตัวที่เลื่อนกราฟขึ้นลง และเป็นตัวกำหนด “จุดตัดแกน y” ด้วย

    จะเห็นว่าค่า c จะกำหนดจุดตัดแกน y เสมอ

    ถ้า a=1, b = 0 (เหลือแค่ y= x^2 + c)

    เข้าใจฟังก์ชันกำลังสอง ด้วยกราฟ พาราโบลา 48

    แม้ว่า ถ้า a=1, b = 4 (กราฟเลื่อนมาซ้าย เพราะ a เป็นบวก b เป็นบวก)

    เข้าใจฟังก์ชันกำลังสอง ด้วยกราฟ พาราโบลา 49

    หรือ ถ้า a=1, b = -4 (กราฟเลื่อนมาขวา เพราะ a เป็นบวก b เป็นลบ)

    เข้าใจฟังก์ชันกำลังสอง ด้วยกราฟ พาราโบลา 50

    ถ้ามองกลับกัน

    จาก standard form

    y=ax^2+bx+c

    หากเราใช้ calculus (ถ้าใครยังไม่ได้เรียนไม่ต้องซีเรียส) หาจุดต่ำสุดสูงสุด โดยหา dy/dx ซึ่งคือความชัน โดยตั้งให้ =0 เพื่อหาจุดสูงสุด/ต่ำสุด

    2ax+b=0

    ดังนั้น

    นี่แหละคือพิกัด x ของจุดยอด (vertex) หรือค่า h นั่นเอง

    h = x = \frac{-b}{2a}

    แทนค่ากลับเข้าไปในสมการเดิม เพื่อหาค่า y ของ vertex

    แทนค่ากลับเข้าไปในสมการเดิม เพื่อหาค่า y

    y = a\left(-\frac{b}{2a}\right)^2 + b\left(-\frac{b}{2a}\right) + c
    y = \frac{4ac - b^2}{4a}

    หรือเขียนอีกแบบว่า

    y = k = c - \frac{b^2}{4a}

    ลองพิจารณาความหมายของการแก้สมการ

    จาก

    (x - h)^2 = 4p(y - k)

    ถ้าเราหาค่า x ที่ทำให้ y เป็น 0 ดังนั้นเราแทนค่า y= 0 ลงไป

    (x - h)^2 = -4pk

    ย้ายข้างให้เหลือ x ตัวเดียว

    x=h±\sqrt{-4pk}

    ดังนั้นคำตอบของกราฟ Parabola มีแกนสมมาตรอยู่ที่ x=h แล้วแผ่ขยายออกไปข้างๆ ด้วยขนาด sqrt(-4pk)

    ซึ่งเราถอดรากจริงได้เฉพาะเมื่อค่าข้างในรูท ≥ 0

    ดังนั้น:

    • ถ้า p>0 (พาราโบลาหงายขึ้น) → ต้องมี k≤0 (จุดยอดอยู่ต่ำ) ถึงจะตัดแกน x ได้
    • ถ้า p<0 (พาราโบลาคว่ำลง) → ต้องมี k≥0 (จุดยอดอยู่สูง) ถึงจะตัดแกน x ได้

    ซึ่งสอดคล้องกับภาพที่ vertex อยู่เหนือหรือใต้แกน x พอดี

    ถ้าเขียนในรูปของ a,b,c คือ

    h = \frac{-b}{2a},-4p = \frac{-1}{a},k=c-b^2/4a

    จัด k ดีๆ

    -4p = \frac{-1}{a},k =\frac{4ac - b^2}{4a}

    คำนวณ -4pk

    -4pk = \frac{b^2-4ac}{4a^2}
    \sqrt{-4pk} = ระยะจากจุดกึ่งกลาง = \frac{\sqrt{b^2-4ac}}{2a}
    จุดกลางแกนสมมาตร = \frac{-b}{2a}

    x = จุดกลาง ± ระยะจากแกนสมมาตร

    x=\frac{-b}{2a}±\frac{\sqrt{(b^2-4ac)}}{2a}

    สุดท้ายมันก็มองเป็นสมการมหัศจรรย์ได้นั่นเอง

    x=\frac{-b±\sqrt{(b^2-4ac)}}{2a}

    สรุป

    สรุปสมการ parabora

    standard form

    y=ax^2+bx+c

    vertex form

    (x - h)^2 = 4p(y - k)
    y = a(x - h)^2 + k

    สรุปแต่ละสัญลักษณ์:

    ตัวแปรบอกอะไรสูตรเทียบกับอีกตัว
    aทิศทางและความโค้ง (หงาย/คว่ำ, แคบ/กว้าง)a = 1/(4p)
    เฉพาะกรณีกราฟแนวตั้ง
    bการเลื่อนซ้าย–ขวาb = -2ah
    cการเลื่อนขึ้น–ลง
    จุดตัดแกน y
    c = ah^2+k
    hค่า x ของจุดยอด (vertex)h = -b/2a
    kค่า y ของจุดยอด (vertex)k = c-b^2/4a
    pระยะจาก vertex ไป focusp = 1/(4a)
    เฉพาะกรณีกราฟแนวตั้ง

    สรุปแก้สมการ

    หาค่า x ที่ทำให้ y =0

    x=h±\sqrt{-4pk}
    x=\frac{-b±\sqrt{(b^2-4ac)}}{2a}

    จำนวนคำตอบของสมการ

    เราสามารถมองได้ว่า ค่าภายในรูท (เรียกว่า Discriminant) คือ ค่าที่ช่วยบอกจำนวนคำตอบของสมการได้

    • ถ้า > 0 จะทำให้ x มี 2 คำตอบ
      • กราฟตัดแกน x สองจุด
    • ถ้า = 0 จะทำให้ x มีคำตอบเดียว
      • กราฟสัมผัสแกน x พอดีที่ vertex นั่นคือ x=h หรือ -b/2a
    • ถ้า < 0 ระยะเป็นจำนวนจินตภาพ (ไม่จริง) ไม่มีคำตอบที่เป็นเลขจำนวนจริง
      • กราฟไม่ตัดแกน x นั่นเอง
  • สอนคณิตพื้นฐาน : เข้าใจการเทียบบัญญัติไตรยางค์

    สอนคณิตพื้นฐาน : เข้าใจการเทียบบัญญัติไตรยางค์

    ที่ผมเขียนบทความนี้ขึ้นมา เพราะผมดันไปเจอโพสต์สอนสูตร Excel แค่บวกลบคูณหารธรรมดา แต่มีคนแชร์เป็นพัน! เลยรู้สึกว่าคนไทยอาจมีปัญหากับคณิตศาสตร์พื้นฐานหนักกว่าที่คิด 😅

    ผมเลยอยากชวนมาทบทวนหลักการคณิตศาสตร์ง่ายๆ อย่าง “เทียบบัญญัติไตรยางค์” ให้เข้าใจให้ถึงแก่น ว่ามันคืออะไร ทำงานยังไง ทำไมต้องคูณไขว้ แล้วแบบไหนใช้ได้หรือไม่ได้กันแน่

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

    ดังนั้น ถ้ามีลูกหลาน (หรือแม้แต่ตัวเอง) ที่ยังงงๆ กับเรื่องนี้ ลองอ่านดูครับ อ่านจบรับรองเข้าใจแน่นอน!

    เทียบบัญญัติไตรยางค์ คืออะไร?

    มันคือวิธีคิดทางคณิตศาสตร์เวลาเรา รู้ของอยู่ 3 อย่าง (ไตรยางค์) แล้วอยากหาของอย่างที่ 4 ที่เกี่ยวข้องกัน โดยมีเงื่อนไขคือ สิ่งเหล่านั้นมีความสัมพันธ์แบบคงที่ (เพิ่มหรือลดในอัตราเดียวกัน) ซึ่งภาษาอังกฤษจะตรงกับคำว่า Rule of Three นะครับ

    เอาเป็นว่ามาดูตัวอย่างของโจทย์ที่ใช้หลักการนี้ได้กันดีกว่า เช่น

    โจทย์คลาสสิกเลยครับ

    ถ้าเราซื้อแอปเปิล 3 ลูก ราคา 45 บาท 
    ถ้าซื้อ 5 ลูก จะต้องจ่ายเท่าไร?

    หลายคนที่จำสูตรได้ จะรีบคูณไขว้ทันทีแบบนี้

    จ่าย = 45/3 x 5 = 75 บาท

    ซึ่งก็ได้ค่าที่ถูกต้อง แต่มันจะแย่ถ้าเราไม่เข้าใจว่าทำไมถึงทำแบบนั้นได้?

    ที่นี้มาดูอีกโจทย์นึง

    คน 3 คน ใช้เวลาทำงานให้เสร็จ 45 นาที 
    ถ้า 5 คนช่วยกัน จะใช้เวลาเท่าไหร่?

    ถ้าใครเผลอไปทำแบบเดิม คือ คิดว่า

    ใช้เวลา 45/3 x 5 = 75 นาที แบบนี้คือผิดไปเลย!

    เพราะโจทย์ข้อล่างนี้มันเป็นความสัมพันธ์แบบแปรผกผัน จะมาใช้บัญญัติไตรยางค์แบบปกติไม่ได้ ซึ่งจริงๆ แค่ใช้ common sense คิดก็ควรจะเอะใจแล้วว่า ถ้ามีคนมาช่วยทำงานเยอะขึ้น มันต้องทำงานเสร็จเร็วขึ้น (ใช้เวลาน้อยลง) สิ ไม่ใช่ทำงานช้าลง (ใช้เวลามากขึ้น) ยกเว้นว่าคนจะมาขัดแข้งขัดขากันเองนั่นอีกเรื่องนึง 😂

    ดังนั้นเราจะต้องเข้าใจถึงที่มาที่ไปก่อน ไม่ใช่มานั่งเขียนสูตรก่อน

    สิ่งที่ทุกคนต้องคิดและต้องยึดถือ คือ “อะไรคือความจริง?” ต่างหาก ไม่ใช่การจำสูตรหรือจำสมการอะไรทั้งนั้น

    ความจริงก่อนสูตร

    ทุกสมการในโลกนี้ ล้วนเป็นเพียง “ภาษาที่เขียนความจริงออกมาให้สั้นลง” เท่านั้นเอง

    โจทย์แอปเปิล

    อย่างโจทย์แอปเปิลเมื่อกี้….ความจริงที่ควรยึดไว้คือ ราคาแอปเปิ้ล (ต่อชิ้น) นั้นคงที่ (เรา assume ว่าแม่ค้าไม่ได้มีส่วนลดให้)

    ดังนั้น การที่โจทย์บอกว่า แอปเปิล 3 ลูก ราคา 45 บาท ดังนั้นมันคือ ลูกละ 45/3 = 15 บาท (นั่นคือสิ่งที่คงที่)

    ดังนั้นถ้าโจทย์ถามว่า 5 ลูกกี่บาท ก็แค่เอาคูณเข้าไป = 15 * 5 = 75 บาท แค่นั้นเอง ไม่ได้มีอะไรให้จำนี่

    หรือจะมองแบบคนที่เรียนเรื่องสมการแล้ว ก็คือ

    ราคาแอปเปิ้ล (ต่อชิ้น) เหตุการณ์แรก = ราคาแอปเปิ้ล (ต่อชิ้น) เหตุการณ์หลัง
    • 45/3 = X / 5
    • X = 45/3*5 = 75 นั่นเอง

    หรือถ้าเป็น Excel เราก็ทำประมาณนี้

    สอนคณิตพื้นฐาน : เข้าใจการเทียบบัญญัติไตรยางค์ 51

    หรือทำกราฟให้เห็นชัดๆ (ว่าสิ่งที่คงที่ คือ ราคาต่อหน่วย)

    สอนคณิตพื้นฐาน : เข้าใจการเทียบบัญญัติไตรยางค์ 52

    โจทย์คนทำงาน

    ส่วนอีกข้อที่คนทำงาน… ความจริงที่ควรยึดไว้คือ ปริมาณงาน(ทั้งหมด) ที่ต้องทำ นั้นคงที่

    คน 3 คน ใช้เวลาทำงานเสร็จใน 45 นาที แปลว่า งานทั้งหมดนั้นมีปริมาณเทียบเท่ากับการที่คน 1 คนใช้เวลาลุยทำงานไป 3 * 45 = 135 นาที

    ดังนั้นถ้ามี 5 คนมาแบ่งงานกันทำ = 135/5 = 27 นาทีนั่นเอง ก็ไม่มีอะไรให้จำ

    หรือจะมองแบบคนที่เรียนเรื่องสมการแล้ว ก็คือ

    ปริมาณงาน(ทั้งหมด) เหตุการณ์แรก = ปริมาณงาน(ทั้งหมด) เหตุการณ์หลัง
    • 3 * 45 = 5 * X
    • X = 3*45 / 5 = 27

    หรือถ้าเป็น Excel เราก็ทำประมาณนี้

    สอนคณิตพื้นฐาน : เข้าใจการเทียบบัญญัติไตรยางค์ 53

    หรือทำกราฟให้เห็นชัดๆ (ว่าสิ่งที่คงที่ คือ ปริมาณงานทั้งหมด)

    สอนคณิตพื้นฐาน : เข้าใจการเทียบบัญญัติไตรยางค์ 54

    เห็นไหมครับว่า เราไม่ได้คิดจากสูตรก่อน แต่เราคิดจาก “ธรรมชาติของความเป็นจริง” แล้วค่อยเขียนมันออกมาเป็นสมการ

    ลองดูอีกโจทย์สุดท้ายก่อนจะจบบทความนี้

    คำนวณค่าส่งพัสดุ

    ส่งของราคาไม่เกิน 2 ชิ้น ชิ้นละ 30 บาท
    ส่งเพิ่มจากนั้น ชิ้นละ 10 บาท
    ถ้าส่ง 5 ชิ้น ค่าส่งทั้งหมดเท่าไร?

    จะเห็นว่า ถ้าเรารีบเทียบบัญญัติไตรยางค์เลยว่า

    ส่งของ 2 ชิ้น = 60 บาท
    ดังนั้น 5 ชิ้น = 60/2 × 5 = 150 บาท

    แบบนี้คือ “ผิดทันที”

    เพราะค่าส่งไม่ได้เพิ่มในอัตราคงที่ แต่มี “ขั้นบันได” (step rate)

    ดังนั้นถ้าส่ง 5 ชิ้นจริงๆ ต้องคิดแยกเป็นช่วงแบบนี้

    ความจริงที่ต้องยึด คือ ราคาต่อหน่วยเป็นแบบขั้นบันได

    • 2 ชิ้นแรก : ค่าส่งต่อชิ้นคงที่ ที่ 30 บาท = 2 × 30 = 60 บาท
    • 3 ชิ้นที่เหลือ : ค่าส่งต่อชิ้นคงที่ ที่ 10 บาท = 3 × 10 = 30 บาท
    • รวมทั้งหมด = 60+30 = 90 บาท

    หรือถ้าเป็น Excel เราก็ทำประมาณนี้

    สอนคณิตพื้นฐาน : เข้าใจการเทียบบัญญัติไตรยางค์ 55

    จะเห็นว่า “ความสัมพันธ์ระหว่างจำนวนของกับราคารวม” ไม่ได้เป็นเส้นตรงเส้นเดียว (linear) เพราะอัตราราคาเปลี่ยนกลางทาง ดังนั้นเทียบบัญญัติไตรยางค์ใช้ไม่ได้เลย

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

    “สูตร หรือ สมการคือภาษาของความจริง” ไม่ใช่แค่ของที่เราต้องท่องจำเพื่อเอาตัวรอดในห้องสอบไปวันๆ

    สรุป

    สรุปแล้ว ผมว่าอย่าไปสนใจสูตรหรือคำว่า “เทียบบัญญัติไตรยางค์” มากนักเลยครับ

    สิ่งที่สำคัญกว่าคือ เราเข้าใจหรือยังว่า…

    • อะไรมันสัมพันธ์กับอะไร
    • ธรรมชาติของสิ่งนั้นคืออะไร
    • แล้ว “อะไรคือความจริง” ของโจทย์นั้นกันแน่

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

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

    แต่ถ้าจะใช้ “เทียบบัญญัติไตรยางค์” จริงๆ
    มันใช้ได้เฉพาะใน กรณีที่ความสัมพันธ์เป็นเส้นตรง (อัตราคงที่) เท่านั้น
    เช่น ราคาต่อหน่วยคงที่, ความเร็วคงที่, หรืออัตราการผลิตคงที่

    แต่ถ้าเมื่อไหร่ “อัตราเปลี่ยนกลางทาง” หรือมี “ขั้นบันได / เงื่อนไขพิเศษ”
    นั่นแปลว่า “ความจริงไม่คงที่” แล้ว

    อย่าเพิ่งรีบคูณไขว้ครับ… ให้หยุดก่อน แล้วถามตัวเองว่า

    “โจทย์นี้ ความจริงคืออะไรกันแน่? เรารู้ธรรมชาติอะไรของมันบ้าง?”

    เพียงแค่เปลี่ยนจาก “จำสูตร” เป็น “มองความจริง”
    คณิตศาสตร์ก็จะไม่ใช่ของยากอีกต่อไปครับ
    เพราะสุดท้ายแล้ว… คณิตศาสตร์ก็คือภาษาที่ใช้อธิบายความจริงของจักรวาล
    เราแค่หาความจริงให้ได้เท่านั้นเองครับ 🙂

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

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

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

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

    Power Query ไม่ใช่แค่เครื่องมืออีกตัว แต่มันคือ ตัวเปลี่ยนเกม ระดับ “เปลี่ยนชีวิตการทำงาน” ของผมเลยครับ

    Power Query คืออะไร (เผื่อใครยังไม่คุ้น)

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

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

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

    1) ประหยัดเวลาการทำงาน Routine แบบโกง ๆ

    เมื่อก่อน: สิ้นเดือนทีไร ผมต้อง:

    • โหลดไฟล์ข้อมูลออกจากระบบ
    • ก๊อปชีต
    • ลบหัวตารางซ้ำ
    • รวมหลายๆ ไฟล์เข้าด้วยกัน
    • แก้ข้อมูล
    • ลบแถวว่าง
      วนไป 1–2 ชั่วโมงทุกเดือน

    ปัจจุบัน: กำหนด Step ไว้ครั้งเดียว → เดือนถัดไปโยนไฟล์เข้าโฟลเดอร์เดิม → Refresh → เสร็จภายใน 5 วิ 😅

    ของดีที่ต้องลอง

    • Remove Top Rows / Use First Row as Headers
    • Detect Data Type / Fill Down / Trim
    • Split Column / Extract / Column from Example
    • Group By / Pivot / Unpivot
    • Merge / Append Query
    • และอีกมากมาย ของพวกนี้ช่วยเคลียร์ข้อมูลรกๆ ได้ไวมาก

    และถ้าใครอยากเห็นภาพ ลองดูคลิปนี้ครับ

    อีกทีเด็ดที่โคตรสะดวกคือ Get Data > From Folder
    แล้ว Combine Files รวมไฟล์ทั้งโฟลเดอร์ให้แบบอัตโนมัติ
    แถมยังแก้ขั้นตอนของ “ไฟล์แม่แบบ” ได้อีกด้วย ยืดหยุ่นมาก

    • และเรายังสามารถแก้ไขวิธีการจัดการไฟล์แต่ละอันก่อนรวมได้ด้วยการแก้ 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
    และเมื่อเข้า Model แล้ว เกมเปลี่ยนแน่นอน เพราะว่าเราจะสามารถ

    • สรุปข้อมูลได้จากหลายตารางโดยไม่ต้องมีการ Lookup
    • สามารถคำนวณอะไรที่ซับซ้อนใน Pivot ได้ โดยไม่ต้องสร้างคอลัมน์ช่วย แบบการเขียนสูตรยุคเดิม แล้วใช้ DAX เขียน Measure ที่ซับซ้อนได้ เช่น YOY, Actual vs Target, Time Intelligence ฯลฯ

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

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

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

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

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

    ถ้าลงลึกใน M Code
    เราจะเริ่มคิดแบบ Pipeline เหมือน Pandas ใน Python
    ทำให้ต่อยอดไป BI หรือ Python ได้ง่ายขึ้นเยอะ

    ตอนนี้มี Python in Excel อีก
    พูดง่าย ๆ คือโลกของ Excel มันกว้างจนอยากลงไปเล่นทุกวัน 555

    สรุป

    ใครที่ทำงานข้อมูลแล้วอยาก:

    • ลดเวลางานซ้ำ ๆ
    • อยากได้เครื่องมือที่ “ทรงพลังแต่ออกตัวง่าย”
    • อยากปูทางไปสู่ Data Model / DAX / Power BI

    Power Query คือเครื่องมือที่ผมอยากให้ลองจริง ๆ

    มันง่ายกว่าสูตร Excel ยุ่ง ๆ เยอะมาก
    โดยเฉพาะสูตรพวก LET, LAMBDA ที่สายตามือใหม่อาจร้องไห้ก่อนเขียนครบ 1 บรรทัด 😂

    เพื่อน ๆ คนไหนชอบ 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 โดยตรง 56

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

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

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

    @ThepExcelTraining

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ทดลองจริง #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 โดยตรง 63

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    สูตร

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

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

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

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

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

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

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

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

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

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

    สรุปข้อดี

    • สั่งงานด้วยภาษาคนได้เลย เหมาะกับงานด้านสกัดข้อมูลข้อความ/ภาษา โดยไม่ต้องเขียนสูตรยาว ๆ ยากๆ หรือบางทีอาจทำเรื่องที่การใชสูตรไม่สามารถทำได้เลยด้วยซ้ำ
    • ใช้ภาษาไทยได้เลย ทั้งส่วนของคำสั่ง และ 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 อัตโนมัติ 71

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

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

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

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

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

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

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

    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 อัตโนมัติ 74

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

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

    ซึ่งเหมาะกับกรณีที่เราตั้งใจจะเปิดไฟล์ 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 อัตโนมัติ 76

    ผูก 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 อัตโนมัติ 77

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

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

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

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

    1. Launch Excel

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

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

    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 อัตโนมัติ 80

    วิธี 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 อัตโนมัติ 81

    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 ที่ซับซ้อน 82

    ตัวบน เป็น 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 ที่ซับซ้อน 91

    โดยที่ 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 ที่ซับซ้อน 95

    เช่น ถ้า 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 ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 98
    • อันนี้ผมเน้นเอาไว้สอนนักเรียนมือใหม่ จะได้ทำอะไรได้เท่ากันเป๊ะๆ
    • ข้อดีคือ
      • เริ่มต้นใช้ง่าย แถมลอง 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 ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 99
    • อันนี้ผมเอาไว้ใช้งานหลักของตัวเอง เพราะใช้แบบนี้ไม่จำกัด 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 ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 100

    💬 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 ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 101

    เพิ่มความสามารถให้ 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 ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 102

    เวลาเราเจอช่องกรอกข้อมูลใน 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 ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 103

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

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

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

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

    การใช้ 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 ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 105

    วิธีนี้ค่อนข้างดีมาก กับสถานการณ์ที่เราต้องการสร้าง 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 ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 106

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

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

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

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

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

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

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

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

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

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

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

    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 ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 111

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

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

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

    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 ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 113

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

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

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

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

    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 ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 115

    หลังจากที่เราได้ผลลัพธ์จาก 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 ให้ทำงานร่วมกันเป็นทีม (อย่างมีประสิทธิภาพ) 116

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

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

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

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

    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: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 118

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


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

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

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

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

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

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

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

    ผลลัพธ์:

    • 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: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 120

    วิธี 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: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 121
    • 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: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 122

    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: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 123

    ผลลัพธ์:

    • 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: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 124

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

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

    ตารางจะแสดงคอลัมน์ “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: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 126

    ข้อสังเกต:

    วิธีนี้ยังไม่ค่อยมีประสิทธิภาพ เพราะมีการคำนวณซ้ำซ้อนในแต่ละแถว (ถ้าเปิดดู 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: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 127

    คลิก 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: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 128

    ผลลัพธ์:

    • 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: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 129

    การทำงาน

    • 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: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊 130

      การทำงาน

      • 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, "/")
          ),
      
          // 3.1 รายชื่อวัน (ไทย/อังกฤษ) ที่จะตัดทิ้ง (ทั้งหมดเป็นตัวพิมพ์เล็ก เพราะเดี๋ยวเราจะ Text.Lower ก่อน)
          WeekdayTokens = {
              // ไทยเต็ม
              "วันอาทิตย์", "วันจันทร์", "วันอังคาร", "วันพุธ",
              "วันพฤหัส", "วันพฤหัสบดี", "วันศุกร์", "วันเสาร์",
              "อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "พฤหัสบดี", "ศุกร์", "เสาร์",
      
              // ไทยย่อ (มี/ไม่มีจุด)
              "อา", "จ", "อ", "พ", "พฤ", "ศ", "ส",
              "อา.", "จ.", "อ.", "พ.", "พฤ.", "ศ.", "ส.",
      
              // อังกฤษเต็ม
              "monday", "tuesday", "wednesday", "thursday",
              "friday", "saturday", "sunday",
      
              // อังกฤษย่อ (มี/ไม่มีจุด)
              "mon", "tue", "tues", "wed", "thu", "thur", "thurs", "fri", "sat", "sun",
              "mon.", "tue.", "tues.", "wed.", "thu.", "thur.", "thurs.", "fri.", "sat.", "sun."
          },
      
          // 4. split แล้วเอาค่าว่าง/null + ชื่อวัน ออก
          RawTokens =
              List.Transform(
                  Text.Split(Text.Lower(NormalizeDelimiter), "/"),
                  Text.Trim
              ),
      
          TokenList =
              List.Select(
                  RawTokens,
                  each _ <> "" and _ <> null and not List.Contains(WeekdayTokens, _)
              ),
      
          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 131

      วิธีโหลด 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 132

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

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

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

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

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

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

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

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

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

      =ThepTrim(OriginalText as text,optional TrimChar as text) as text
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 137
      ถ้าไม่ระบุอะไรก็จะ Trim ข้อความที่เป็น Space ออกไป ทั้งหน้า หลัง และตรงกลางจะเหลือแค่เคาะเดียว
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 138
      แต่ถ้าระบุอักขระตัวไหนก็จะ 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 139
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 140
      สามารถระบุ Index ติดลบเพื่อเอาข้อมูลนับจากหลังสุดได้ (คล้าย Python)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      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 150

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      =ThepMergeTableOffsetRow(TableName1 as table,TableName2 as table, RowOffset as number) as table
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 160
      สั่งให้ 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 161
      หาคอลัมน์ที่มีคำว่า ชิ้น อยู่
      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 162
      หาคอลัมน์ที่มีคำว่าชิ้น และปะคอลัมน์ TXID กับ สินค้าเข้าไปด้วย

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

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

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

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

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

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

      แนะนำ/วิธีใช้ ThepExcel-Mfx : M Code สำเร็จรูปจาก ThepExcel 164
      • 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 (ปรับปรุงใหม่) 165
      รูปจาก 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 (ปรับปรุงใหม่) 166

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

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

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

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

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

      คำนวณ 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 (ปรับปรุงใหม่) 168

      จัดเรียงหน้าตาและทำ 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 (ปรับปรุงใหม่) 169

      ต่อไป ผมจะใส่ 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 (ปรับปรุงใหม่) 170

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

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

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

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

      ลองเปลี่ยน Dependency

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

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

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

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

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

      สรุป

      เราสามารถใช้ 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 177
    • 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 เร็วขึ้น 178
      สูตรพฤติกรรมคำนวณผลลัพธ์ (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 ⚡ 179

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

      ส่วนความหมาย
      [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 เหมือนกันหมด
      แต่เส้นทางหลังจากนั้น… แต่ละคนเลือกได้เองเลยว่าจะไปสายไหน
      และที่สำคัญคือ “มันอัปเลเวลได้จริง แบบเห็นผลชัดเจนมาก!”

      วันนี้ผมเลยขอชวนมาดูแผนที่เลเวล 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) ได้แบบเทพๆ

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


      🧭 หลังจาก 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, ฯลฯ

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


      ⚙️ สายเครื่องมือ (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:
        ใช้ Numpy, Pandas, Scikit-learn, Matplotlib ได้จากใน Excel เลย
        สาย Data Science ต้องชอบแน่ ๆ

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

      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 181
      QR Line Official @ThepExcelWorkshop

      วิธีการสมัคร

      1. คลิกที่ปุ่ม “สมัครเลย” หรือ link ด้านล่าง (สามารถสมัครและชำระเงินทีเดียวหลายคน หลายคอร์สได้)
      2. ชำระเงินตามวิธีที่ระบุในรายละเอียดการชำระเงิน
      3. กรอกข้อมูลในแบบฟอร์มให้ครบถ้วน และแนบหลักฐานการชำระเงินในแบบฟอร์ม

      สมัครเลย ที่ https://forms.gle/1mTWCD8tDqm9M5fz9

      ThepExcel Public Workshop 2025 182
      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 182
      QR แบบฟอร์มใบสมัคร

      หรือสอบถามรายละเอียดเพิ่มเติมเกี่ยวกับ Workshop ได้ที่ LINE: @ThepExcelWorkshop

      ThepExcel Public Workshop 2025 184
      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 จากแหล่งออนไลน์ต่างๆ 185

      แล้วกดเลือกว่าจะ Publish เป็นอะไร ซึ่งตัวที่ผมขอแนะนำคือเป็น Microsoft Excel (.xlsx) เพราะเผื่อว่ามีข้อมูลหลายชีท จะได้ไม่มีปัญหา

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 186

      จากนั้นเราก็จะได้ Link มาซึ่งสามารถเอา URL ที่ได้นี้ไปใช้ใน Power Query โดยเลือก Get Data from Web แล้วแปะ URL แล้ว ok ได้เลย

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 187

      แล้วผลลัพธ์ก็จะเหมือนกับการ Get Data from Excel ปกติ คือเลือก Sheet เลือก Table ได้เลย

      ดึงข้อมูลจาก Google Form

      อันนี้แค่เราทำการกดไปที่ Response ของ Google Form แล้วกด Link to Sheets ก็สามารถทำต่อตามหัวข้อตอนที่ดึงจาก Google Sheets ได้เลย

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 188

      ดึงข้อมูลจาก One Drive Business

      สำหรับอันนี้ วิธีทำ คือให้เข้า one drive for business จนเจอไฟล์ที่ต้องการ แล้วต้องกด … แล้วเลือกเปิดไฟล์ใน Desktop App ก่อน เพื่อให้ได้ File Path มา

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 189

      แล้วกดไปที่ File -> Info -> Copy Path (ไม่ใช่ local นะ)

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 190

      มันจะได้ 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 จากแหล่งออนไลน์ต่างๆ 191

      ก็ให้กด Open in desktop app ต่อแบบนี้

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 192

      แล้วก็เข้าไป Copy Path เหมือนเดิม

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 193

      จะได้ 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 จากแหล่งออนไลน์ต่างๆ 194

      ที่ถูกต้องคือมันต้องมี url ที่มีคำว่า sites แบบนี้

      ให้เรา Copy มาแค่คำที่ต่อจากคำว่า Sites เช่น

      https://thepexcelcom.sharepoint.com/sites/ThepExcel

      ให้เราลอง Get Data จาก SharePoint Folder ด้วย Power BI ดู (เพราะจาก Excel บางทีมันไม่มีปุ่มให้กด)

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 195

      ใส่ 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 จากแหล่งออนไลน์ต่างๆ 196

      กลายเป็นว่ามันเยอะเกินไป และถ้าเราอยากจะเลือกเฉพาะบาง Folder ต้องไป Filter เอาจาก Folder Path คอลัมน์สุดท้ายทีหลัง ซึ่งจะช้ามากเพราะมันต้องอ่านทุกไฟล์เลย

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 197

      เคล็ดลับคือ ให้เปลี่ยน M Code จาก SharePoint.Files เป็น SharePoint.Contents

      เราจะเห็น Structure ของ Site ออกมาก่อน ไม่ใช่เห็นทุกไฟล์ตามปกติ

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 198

      ถ้า 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 จากแหล่งออนไลน์ต่างๆ 199
      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 200

      ดึงข้อมูลจาก Website ทั่วไป

      ถ้าเว็บนั้นเป็น Public ใครๆ ก็เข้าได้ และมี Static Content พวกตารางอยู่ในหน้านั้น ก็ดึงมาตรงๆ ได้เลย เช่น

      https://th.wikipedia.org/wiki/รายชื่อจังหวัดของประเทศไทยเรียงตามพื้นที่

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

      แนวทางการใช้ Power Query Get Data จากแหล่งออนไลน์ต่างๆ 201

      ดึงข้อมูลจาก 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 202

      ถ้าเราลองสร้าง Workflow โดยสร้างโหนดชื่อ Chat Trigger แล้วต่อกับ Basic LLM Chain โดย Plug Model เป็น Open AI Chat Model (จริงๆ จะเลือกของเจ้าไหนก็ได้)

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 203

      ป.ล. ผมเลือก Model GPT 4o-mini นะครับ ราคาถูกดี

      โดย Node Basic LLM Chain นี้จะทำหน้าที่รับข้อความและโต้ตอบกับผู้ใช้ได้ทันที

      หากคุณลองทดสอบ Chat ดู จะพบว่า มันสามารถตอบเราได้จริงๆ ด้วยนะ แต่มันไม่มีความทรงจำอะไรเลย จำไม่ได้แม้แต่ประโยคล่าสุดที่เพิ่งคุยไปด้วยซ้ำ! 555 😆

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 204

      ยกระดับการใช้งานด้วย AI Agent

      หากเราต้องการ AI ที่สามารถจดจำการสนทนาก่อนหน้าได้ เราควรใช้ AI Agent Node ที่มี ระบบ Memory ที่ช่วยให้ระบบจำบทสนทนาได้

      การใช้ Window Buffer Memory ที่จำข้อความก่อนหน้าได้ถึง 5 ครั้ง เพื่อให้การสนทนามีความต่อเนื่อง AI Agent จะทำหน้าที่ประมวลผลตามข้อมูลที่ได้รับอย่างยืดหยุ่น สามารถเพิ่มความฉลาดได้ด้วยการต่อเข้ากับ Tools ที่จำเป็นอีกด้วย

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 205

      พอลองคุยปุ๊ป มันบอกว่า ถ้าเราใช้ Tools Agent จะต้องมีการต่อ Tools อย่างน้อย 1 อัน ถึงจะสามารถใช้ได้ ถ้าจะไม่ใช้ Tools เลย มันแนะนำให้ใช้ Conversional Agents แทน

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 206

      ถ้าเราลองเปลี่ยนประเภท AI Agent เป็น Conversational Agent ก็จะสามารถคุยโดยมีความทรงจำได้แล้ว (โดยในที่นี้ไม่มีการใช้ Tools ใดๆ)

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 207

      เพิ่มความสามารถของ 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 208

      ถ้าเราลองต่อ Tools เข้าไปกับ AI Agent ที่เป็น Tools Agent เช่นในทีนี้ผมลองต่อ Tools ที่ชื่อว่า Calculator เข้าไป

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 209

      เจ้า AI มันก็จะสามารถใช้เครื่องคิดเลขได้

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 210

      เราสามารถดูที่ Log ด้านขวาได้เลยว่ามีการเรียกใช้ Calculator แล้วจริงๆ

      เรื่องการคำนวณเราก็ยังสามารถถามเป็นคำบรรยายได้เช่นกันนะ มันจะแปลงคำบรรยายของเราไปเป็นสูตรคำนวณทางคณิตศาสตร์เอง

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 211

      SerpAPI (Google Search)

      ผมลองต่อกับ SerpAPI (ใช้ฟรี 100 ครั้ง/เดือน) เพื่อให้มันสามารถ Search หาคำตอบจาก Google Search ได้ด้วย (สมัครง่ายมาก)

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 212

      คราวนี้ลองถามเรื่องใหม่ๆ มันก็จะตอบได้แล้ว เช่น ผมถามเรื่องครูบาหมูเด้ง มันก็ตอบได้

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 213

      Wikipedia

      Tools อีกอันที่ดีและใช้ง่ายมาก คือ Wikipedia แค่ต่อ Tool ตัวนี้เข้าไปเราก็ได้ความรู้มหาศาลจาก Wikipedia มาเป็นเครื่องมือ ซึ่งอันนี้ไม่ต้องระบุ API อะไรเลยด้วย ใช้ง่ายมากๆ

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 214

      Code Tool

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

      ผมสามารถใช้ Code Tool แบบนี้แล้วถามมันได้

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 215

      แต่ถ้า server ที่เรารัน อยู่คนละ timezone กับเรา เราอาจจะต้องระบุ timezone ใน code ให้ถูกต้อง วัน/เวลา จะได้ไม่เพี้ยน

      let now = DateTime.now().setZone("Asia/Bangkok");  
      // ระบุ time zone เป็น "Asia/Bangkok" เพื่อให้ตรงกับเวลาท้องถิ่นของคุณ
      return now.toISO();

      แบบนี้ก็จะใช้ได้แล้ว

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 216

      ซึ่ง Code Tool มันสามารถนำมาใช้แบบ Flexible ได้มากๆ เช่น เราอาจสร้าง Tool ที่นับอักขระในคำแบบเป๊ะๆ ออกมาช่วย AI ก็ได้

      ซึ่งเราสามารถกำหนดความสามารถของมันใน Code Node ได้เต็มที่ (ผมให้ AI เขียนให้หมดเลย)

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 217

      รวมถึงกำหนด Structure ของ Input ที่ต้องการได้ด้วย

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 218

      พอนำไป Chat คุยกับมันดู ก็สามารถตอบได้ถูกต้องแล้วว่า “strawberry” มี r กี่ตัว 😆

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 219

      ปิดบาง Node ชั่วคราว

      เราสามารถ Deactivate บางโหนดได้โดยการกดปุ่ม power ที่โหนดนั้นๆ เช่น บางทีผมไม่ได้อยากให้ใช้ tool บางอัน แต่ขี้เกียจลบออก ก็ปิดเอาได้ (จะขึ้น Deactivated)

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 220

      นำ Chat ไปให้คนอื่นใช้

      เราสามารถนำเอา Chat ไปให้คนอื่นลองใช้งานได้ โดยเข้าไปเลือก Make Chat Publicly Available ในโหนด Chat Trigger อันแรกเลย

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 221

      ทีนี้เราก็เอา URL ไปรันบน Browser ได้เลยครับ (อย่าลืม Active Workflow ด้วยนะ)

      ซึ่งเราอาจตั้ง system message ดีๆ ที่โหนด Ai Agent ได้นะ มันจะได้ตอบได้ตรงใจมากขึ้น

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 222

      เนี่ยมันก็จะเป็นหน้าเว็บ chat เต็มๆ เลย แค่เปิด URL ก็เล่นได้ เจ๋งมะ

      สอนใช้ n8n EP05 : การนำ AI มาใช้ใน Automation Workflow 223

      ตอนต่อไป

      ในตอนถัดไป เราจะมาดูวิธีทำให้ 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 224

      โดยเลือก option Get All People จะได้ลูกค้ามา 5 คนที่มีมาให้สำเร็จรูปใน n8nในการประกอบการสอนบทความนี้นะครับ ทุกคนจะได้ทำตามได้โดยไม่ต้องไปเอา Data มาจากที่อื่นให้ยุ่งยาก

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 225

      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 226

      โดยใน Work Flow จะมีทางแยกออกมาเป็น “true” และ “false” ชัดเจน

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 227

      เส้น True: กรณีค่าประเทศไม่ว่าง เราจะใช้ Sort Node จัดเรียงข้อมูลตามประเทศ

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 228

      เส้น False: กรณีไม่มีค่าประเทศ เราจะใช้ Edit Fields Node แก้ไขข้อมูลให้ระบุว่า “ไม่รู้”

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 229

      ตอนนี้จะได้แบบนี้ เห็นมะ แยกออกมาเป็น 2 เส้นทางชัดเจน

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 230

      Switch Node

      ใช้ในการแบ่งเส้นทางที่มีผลลัพธ์หลายเส้นทาง (เหมาะกับผลลัพธ์มีมากกว่า 2 เส้นทาง)

      สมมติว่าผมเอากรณีจริง ที่ผ่านการเรียงข้อมูลแล้วมาเข้า Switch เล่นๆ ให้ดูว่า

      • ถ้า country เป็น US ให้ผลลัพธ์ออกมาในเส้นทางที่ตั้งชื่อว่า us
      • ถ้า country เป็น UK ให้ผลลัพธ์ออกมาในเส้นทางที่ตั้งชื่อว่า uk
      • แล้วตั้งค่า Fall Back (กรณีที่ไม่ตรงตามเงื่อนไขใดๆ เลย) ให้ออกมาอีกส้นทางนึง
      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 231

      จากนั้นผลที่แยกจาก Switch เราก็สามารถแยก Workflow ออกมาอีกหลายเส้นเลย (อันนี้คือทำเล่นๆ ขำๆ) คราวนี้มีรวมๆ ก็ 4 เส้นทางแล้ว 55

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 232

      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 233

      จากนั้น ค่อยเอาผลที่ได้มา 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 234

      ผลลัพธ์ของโหนดนี้จะได้ตารางอ้างอิงของประเทศแบบที่ผมแปะให้ดูเลย

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 235

      คราวนี้เราจะทำคล้ายๆ ว่าจะ Lookup ข้อมูลจากประเทศเหล่านี้แปะกลับไปที่ตารางลูกค้าของเรา (คล้ายๆ VLOOKUP ใน Excel หรือ Left Join ใน SQL)

      ดังนั้นเราจะใช้ Merge Node มาช่วย แต่จะใช้โหมด Combine แบบ Matching Fields Enrich Input 1 (ตารางลูกค้า)

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 236

      ผลลัพธ์ที่ได้จะมี 5 items (ตาม Input1) หน้าตาสุดท้ายได้แบบนี้ ซึ่งคล้ายๆ ผลลัพธ์จากการใช้พวก VLOOKUP ใน Excel แหละ

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 237

      อย่างไรก็ถาม ถ้าเราลองไปดูผลลัพธ์จริงๆ ในกรณีที่หาไม่เจอ เช่น ประเทศ “ไม่รู้” มันจะไม่มี 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 238
      • เราเอา Node Loop Over Items มาต่อจาก Output เดิม เพื่อวนทำซ้ำๆ ทีละรายการ (Batch =1)
      • แล้วส่งเข้า Line Notify ส่ง Notify item นั้นๆ (record เดียว)
      • จากนั้นรอ 5 วินาที
      • จากนั้นมันจะวนกลับมา Loop ต่อเพื่อทำ item ถัดไป
      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 239

      ถ้า Loop ทำเสร็จหมดทุก items แล้ว Workflow ก็จะวิ่งออกไปทำงานต่อในกิ่งที่เขียนว่า Done ได้อีกนั่นเอง

      หน้าตาทั้ง Flow เราเป็นแบบนี้

      สอนใช้ n8n EP04 : การกำหนด Control Flow ให้กับงาน Automation 240

      สรุป

      การกำหนด 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 เบื้องต้น 241

      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 เบื้องต้น 242

      Array ที่มาใน n8n

      ทีนี้ข้อมูลที่มาจริงๆ ใน n8n มันก็อาจมีทั้งมาจากในรูปแบบของตาราง (แบบ Spreadsheet) ยกตัวอย่างเช่น ถ้าผมลองดึงข้อมูลจาก Google Sheets ต้นฉบับแบบนี้

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 243

      โดยที่เราจะใช้ Node Google Sheets เพื่อ Get Rows in Sheets

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 244

      แล้วเราอย่าลืมไป Enable API ของ Google Sheets บน Google Cloud Console ด้วยนะ

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 245

      แล้วก็เอา Client ID กับ Client Secret อันเดิมที่เคยทำในตอนที่แล้ว มากรอกได้เลย ไม่ต้องสร้างใหม่แล้ว

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 246

      จากนั้นเลือกข้อมูลจาก Sheet ที่ต้องการ มันจะเห็นแบบนี้ ซึ่งถ้าใน Output เราดูในมุมมองของ Table มันก็จะเห็นเป็นตารางเหมือนใน Google Sheets นั่นแหละ (แต่มี Row Number โผล่มาด้วย โดยที่แถวแรกสุดกลายเป็นหัวตารางไป)

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 247

      แต่ถ้าดูในมุมมของ JSON จะเห็นแบบนี้ ซึ่งจะเห็นว่าหัวตารางก็คือ Key และ Data คือส่วนของ Value ของ Record นั่นเอง

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 248

      และถ้าดูแบบ Schema (โครงสร้างข้อมูลอธิบายข้อมูลในตารางว่ามี field อะไรบ้าง) จะเห็นแบบนี้

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 249

      ทั้งหมด มันคือ List ที่มี Record เดียว (ที่มีหลาย key-value)

      ซึ่งข้อมูลที่ถูกส่งออกมาจาก Node Google Sheets นี้ ตอนนี้ถือว่ามี 6 items

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 250

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

      เช่น ถ้าผมต่อ Line Notify ออกไป มันจะยิงไป 6 ครั้งเลย

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 251

      นี่ให้ดู มันยิง 6 ครั้งจริงๆ

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 252

      ซึ่งถ้าเราอยากทำการแก้ไขข้อมูล หรือ คัดเลือกข้อมูล เราก็ต้องใช้พวก 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 เบื้องต้น 253

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

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 254

      แม้ว่าจริงๆ เราจะแก้การดึงข้อมูลที่จะส่ง Line ให้ไปเอาจาก Node Google Sheets ได้ (ฝั่ง Input ตัวที่ 2) แต่ผมว่าเราใช้วิธีกลับไปเลือก Include Other Input Fields ในโหนด Edit Fields ดีกว่าครับ

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 255

      นอกจากนี้ ใน Edit Fields เราก็สามารถเพิ่ม Field ใหม่ได้ด้วย เช่น เราสามารถกด Add Field แล้วตั้งชื่อ Field แล้วใส่ข้อมูล (fixed) หรือ สูตร (expression) ได้เลย

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 256

      ในที่นี้ผมเขียนสูตรคำนวณยอดขาย สมมติว่าผลไม้ราคาชิ้นละ 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 เบื้องต้น 257

      ตัวอย่าง 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 เบื้องต้น 258

      จำนวน item ที่เหลือรอดไปก็ (อาจ) จะน้อยลง นี่คือ Concept ของการ Filter

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 259

      ตัวอย่าง 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 เบื้องต้น 260

      ถ้าใช้ 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 เบื้องต้น 261

      ถ้าใช้ 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 เบื้องต้น 262

      น้อง 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 เบื้องต้น 263

      สุดท้ายออกมาแบบนี้ครับ สวยงาม

      สอนใช้ n8n EP03 : จัดการ Data ภายใน Workflow เบื้องต้น 264

      ตอนต่อไป

      หลังจากที่เราได้เรียนรู้วิธีการจัดการข้อมูลใน 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 กับบริการต่างๆ 265
      สร้าง Project ใหม่ขึ้นมา ตั้งชื่อตามใจชอบ เช่น ของผมใช้ sira-n8n-tutorial
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 266
      เลือกทำงานกับ Project ที่เราสร้างขึ้นมา (บางทีเรามีหลาย Project ต้องเลือกให้ถูกอัน)
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 267
      จากนั้นกดปุ่มที่เขียนว่า APIs & Services แล้วกด +ENABLE APIS AND SERVICES
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 268
      จากนั้นเลือก Google Drive API แล้ว Enable ซะ
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 269
      จากนั้นกด Create Credentials (ซึ่งอันนี้แหละที่จะได้พวก API Key มา)
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 270
      จากนั้นเลือกประเภทเป็น User Data แล้ว next จากนั้นตั้งชื่อ app ว่าอะไรก็ได้ เช่น n8n ก็ได้ แล้วใส่พวก email ลงไป แล้วกด Save and Continue
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 271
      กด Create New Credentials ใน Node Google Drive Trigger ของ n8n ก่อน
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 272
      แล้วเราจะได้ OAuth Redirect URL ที่จะต้องเอากลับไปกรอกใน Google Cloud Console API
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 273
      เอาข้อมูล Call Back URL กลับไปกรอกใน Authorized redirect URIs แล้วกด create จากนั้นกดปุ่ม Done
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 274
      แล้วกลับมาหน้า Credentials โดยเลือก menu ด้านซ้าย แล้วจากนั้นกด Edit ที่ OAuth 2.0 Client IDs ที่เราสร้างขึ้นมา
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 275
      จะได้ Client ID และ Client Secret ที่จะต้องเอากลับมากรอกใน n8n
      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 276
      สำคัญมาก อย่าลืมกด 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 กับบริการต่างๆ 277

      จากนั้น Google จะเตือนว่า App มันอาจจะอันตราย แต่เราไม่สน ให้เรากด Advanced แล้วลุยต่อ

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 278

      แล้วให้สิทธิ์ n8n ในการเข้าถึงข้อมูลตามความเหมาะสม (ผมให้หมดเลย)

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 279

      ถ้าทำสำเร็จ จะขึ้น Account Connected สีเขียวแบบนี้ เย้!

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 280

      ทดสอบวางไฟล์ใน Folder แล้วดึงข้อมูล

      สมมติผมไปสร้าง Folder ใน Google Drive ชื่อว่า n8n-test แล้วใส่ไฟล์รูปเข้าไปอันนึง

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 281

      จากนั้นลองมากรอกรายละเอียด Folder ที่ต้องการจะ Monitor แล้วกด Fetch Test Event ว่าอ่านไฟล์ได้จริงไหม จะพบว่ามันมองเห็นไฟล์ใน Folder ที่เราต้องการได้จริง

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 282

      เชื่อมต่อกับ 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 กับบริการต่างๆ 283
      กรอกรายละเอียดที่จำเป็นลงไป (ใส่ 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 กับบริการต่างๆ 284

      ให้เอากลับมากรอกใน n8n Credentials ได้เลย จากนั้นกด Connect แล้วเลือกว่าจะให้ Notify ไปที่ไหน

      จะเป็น 1-on-1 Chat หรือเป็น Group ไหนก็เลือกไป แล้วกด Agree

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 285

      พอสำเร็จก็จะขึ้น Connect สีเขียวเหมือนกัน

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

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 286

      พอ Test แล้วก็จะมี Line Notify ส่งมาจริงๆ

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 287

      กำหนดให้มัน Monitor ตลอดเวลา โดย Active Workflow

      การทำงานอัตโนมัติด้วย n8n

      เมื่อเชื่อมต่อทุกอย่างเรียบร้อยแล้ว เราสามารถตั้งค่าให้ Workflow ทำงานอัตโนมัติ โดยให้ Google Drive Trigger ตรวจสอบการอัปโหลดไฟล์ใหม่ และให้ส่งการแจ้งเตือนไปที่ Line ภายใน 1 นาที

      สิ่งสำคัญคือ ต้องกดให้ Workflow Active ด้วย เพื่อให้ Workflow ทำงานตลอดเวลาที่เครื่องเราเปิด n8n เอาไว้อ่ะนะ (ถ้าไม่อยากเปิดเครื่องตัวเอง อันนี้แหละที่ต้องมาเช่า Server บน Cloud ซึ่งจะสอนอีกทีในตอนต่อๆ ไปนะ)

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 288

      จากนั้นลองโยนไฟล์ใหม่เข้าไปใน Folder รอประมาณไม่เกิน 1 นาที มันควรจะมีแจ้งเตือนมาที่ Line

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 289

      นี่ไง มาละ

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 290

      Copy Workflow ให้เพื่อนได้

      Workflow ที่เราทำนั้น เราสามารถ Save Bkup ไว้ใช้ส่วนตัว หรือ Copy ให้เพื่อนก็ได้สบายๆ เลยนะ

      เพราะที่มุมขวาของ Workflow มันจะมีปุ่ม … ที่ให้เรา Download Workflow ออกมาเป็นไฟล์ JSON ได้

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 291

      ซึ่งใน JSON จะไม่ได้เก็บรายละเอียด Credentials ไว้ จึงมั่นใจได้ในความปลอดภัยในการแชร์ Workflow ให้คนอื่นครับ 😉

      สอนใช้ n8n EP02 : หลักการเชื่อมต่อ API กับบริการต่างๆ 292

      ตอนต่อไป

      ในตอนต่อไป เราจะเจาะลึกลงไปในกระบวนการจัดการข้อมูลที่เราดึงมาใน 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 โปรแกรมฟรี แต่ดีมาก 293

      โดยเราสามารถออกแบบการทำงาน Automation โดยเลือกเชื่อมต่อ Node ที่มีอยู่มากมาย เชื่อมต่อกับแอปพลิเคชันต่างๆ ได้หลากหลาย เช่น Gmail, Google Sheets, Line, Notion, หรือแม้กระทั่งการเชื่อมต่อกับ AI Model เช่น OpenAI GPT, Claude หรือ API ของเราเอง

      นี่คือตัวอย่างบางส่วน (จากทั้งหมดมากกว่า 1,000 integrations)

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 294

      นอกจากนี้ n8n ยังมี Template ตัวอย่างมากมายกว่า 1,000 แบบ (https://n8n.io/workflows/) ให้คุณดาวน์โหลดไปใช้งานได้ทันที ซึ่งช่วยประหยัดเวลาและเปิดโอกาสให้คุณสร้าง Automation ได้รวดเร็วขึ้น

      แถมยังเลือกดูตาม Creator ที่เราสนใจได้ด้วย เช่น https://n8n.io/creators/max-n8n/

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 295

      หรือของผมเองก็มี (เดี๋ยวจะเพิ่ม Template ให้เรื่อยๆ นะ) https://n8n.io/creators/siraekabut/

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 296

      รูปแบบการใช้งาน 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 โปรแกรมฟรี แต่ดีมาก 297
      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 298
      • ค่าใช้จ่าย 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 โปรแกรมฟรี แต่ดีมาก 299
      • อันนี้ผมเอาไว้ใช้งานหลักของตัวเอง เพราะใช้แบบนี้ไม่จำกัด 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 โปรแกรมฟรี แต่ดีมาก 300

      3. ต่อไปเราจะ install n8n โดยพิมพ์ว่า

      npm install -g n8n

      กด enter จากนั้นก็รอไปยาวๆ จะขึ้นแบบนี้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 301

      ลงเสร็จจะขึ้นแบบนี้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 302

      อัปเดทโปรแกรม n8n

      พิมพ์ใน cmd ว่า

      npm update -g n8n

      เรียกใช้โปรแกรม n8n

      เราสามารถเรียกใช้โปรแกรม n8n ขึ้นมาโดยพิมพ์ว่า n8n ใน cmd แล้วกด enter

      n8n

      จะได้แบบนี้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 303

      กดไปที่ Ctrl+Click ที่ Link http://localhost:5678/ ที่ขึ้นมา หรือกด o ก็ได้

      มันจะขึ้นมาให้ setup user ก็ใส่ไปได้เลยตามปกติ จากนั้นโปรแกรมก็จะขึ้นแบบนี้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 304

      กด 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 โปรแกรมฟรี แต่ดีมาก 305

      ลองใช้ HTTP Request Node ดูครับ มันมีความสามารถในการส่ง/รับข้อมูลจากเว็บไซต์ได้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 306

      ในที่นี้ เราจะลองให้มันดึงข้อมูลราคาน้ำมันจาก URL ที่เป็น API ของทางบางจาก (ง่ายดี) ดังนี้

      https://oil-price.bangchak.co.th/ApiOilPrice2/th

      วาง URL แล้วกด Test Step มันจะทดสอบว่า Node นี้ทำงานได้หรือไม่ โดยจะเห็น Input ที่ส่งเข้ามาให้ Node มาจากหน้าต่างด้านซ้าย และเห็นผลลัพธ์ของ Node ทางด้านขวาแบบชัดๆ เลย ว่ามันสามารถอ่านข้อมูลจาก URL ที่เราระบุได้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 307

      เดี๋ยวเราจะลองบันทึกข้อมูลที่ได้ลงไฟล์ 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 โปรแกรมฟรี แต่ดีมาก 308

      จากนั้นค่อยต่อด้วย Node Read/Write Files from Disk เลือกแบบ Write File to Disk แล้วใส่ Path และชื่อไฟล์ตามต้องการ

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 309

      พอเราลองมารัน Workflow ทั้งหมดดู โดยกด Test Workflow มันควรจะมี File ถูกสร้างขึ้นมาตามที่เรากำหนดครับ

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 310

      ไฟล์ออกมาจริงๆ มีข้อมูลมาจริง (แต่อาจยังไม่เรียบร้อย)

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 311

      ถ้า Workflow ใช้ได้ เราก็กด Save Workflow แล้วตั้งชื่อ หรือกำหนด tag เอาไว้ search ได้เลย

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 312

      พอเรากดที่ปุ่ม Home ด้านซ้ายสุด เราจะเห็นหน้า workflow ทั้งหมดที่เราทำไว้ ซึ่งสามารถ add workflow เพิ่ม หรือจะไปโหลดจาก Template ที่มีให้เลือกมหาศาลก็ได้

      สอนใช้ n8n EP01 : เริ่มหัดทำ Automation แบบ No Code ด้วย n8n โปรแกรมฟรี แต่ดีมาก 313

      ตอนต่อไป

      บทความนี้เป็นเพียงจุดเริ่มต้น ในตอนต่อไปเราจะเรียนรู้การเชื่อมต่อกับแอปต่างๆ และระบบออนไลน์ผ่าน 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 314

      ใน 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 315

      การตั้งค่าที่ควรรู้

      สำหรับ 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 316

      สร้าง 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 317

      OCR

      ตัว Florence2 สามารถทำ OCR ได้ด้วยนะ เช่น ถ้าเรามีข้อความอยู่ในรูป มันก็สามารถดึงออกมาได้เลย แต่ ณ ตอนนี้โมเดลมันใช้กับภาษาไทยไม่ได้นะ ไม่ work เลย

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 318

      Region caption

      แต่ถ้าเราลองรัน Florence 2 ด้วย Task แบบ Region Caption มันจะ Detect ทุกอย่างในรูปนั้นออกมาเลยว่ามีอะไรบ้าง? และตรง Caption จะได้ Location ออกมาด้วย

      ป.ล. ถ้าเราอยากดูมันว่า Mask ส่วนไหนบ้าง ก็ต่อเข้า Convert Mask to Image ออกมาดูได้ ซึ่งจะเห็นว่ามันระบาย BBOX เต็มไปหมดเลย

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 319

      Caption to Phase Grounding [ ตัวหลักที่จะใช้ ]

      ถ้าเราอยากจะได้แค่วัตถุบางอย่างในรูป เราสามารถระบุใน Text Input ได้ แต่ว่า ให้เปลี่ยน Task เป็น Caption to Phase Grounding ด้วย ไม่งั้นมันจะ Error

      ก่อนอื่น ลองใช้ Florence 2 สร้าง BBOX รอบถ้วยกาแฟกันก่อน ด้วยคำว่า Cup

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 320

      คราวนี้จะเห็นว่ามัน Detect เฉพาะ Cup ได้จริงๆ และ Mask ได้ถูกต้องด้วย

      ทีนี้เรามาดูกรณีที่มัน Detect เจอ Object หลายอัน เช่น ผมให้มัน detect โคมไฟด้วย Lamp มันเจอหลายอันเลย ซึ่งแต่ละอันจะมี Index ของตัวเอง (ุถ้าไม่อยากให้การ detect เปลี่ยนต้อง fix seed ตอน detect ไว้ด้วยนะ)

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 321
      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 322

      ก่อนจะส่งเข้า SAM2 ไปทำงานต่อ เราสามารถเลือกส่งแค่ Index ที่ต้องการได้ ด้วย Node ที่ชื่อ Florence2 Coordinate ครับ

      SAM2

      เราจะเอา SAM2 ต่อจาก Florence2 Coordinate อีกที เพื่อให้มันทำ Segmentation แบบละเอียดต่อนั่นเอง

      ซึ่งเราจะต่อผ่าน Node ที่ชื่อ Florence2 Coordinate เพื่อให้มันทำ Segmentation เฉพาะในพื้นที่ที่เราเลือกครับ เช่นในรูป ผมเลือก Index 3 ออกมา

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 323
      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 324

      ด้วยความรู้นี้ แปลว่า เราจะ Mask อะไรก็ได้แล่ว เช่น Mask แค่เสื้อ ก็แค่แก้ Text เป็น Shirt จบเลย (เพราะในรูปมีตัวเดียว)

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 325
      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 326

      ถ้าเรา Convert Mask to SEGS แล้ว ต่อเข้า Detailer (SEGS) เราก็จะทำการ Inpaint แค่เสื้อได้อย่างแม่นยำ

      กรณี Mask มีหลายชิ้น แล้วเราอยากให้มันมองรวมกัน ก็สามารถเลือกตรง Mask to SEGS ให้เป็น Combined ได้นะครับ ส่วนตอนใช้ Detailer (SEGS) ก็อาจต้อง Denoise เยอะนิดนึง ไม่งั้นภาพอาจไม่ค่อยเปลี่ยน

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 327

      อย่างไรก็ตาม แม้จะใส่ denoise ประมาณ 0.5 สีเสื้อมันก็ยังอาจจะดูไม่ค่อยม่วงนัก (อาจเพราะเดิมมีแต่สีขาว)

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 328

      การใช้งานขั้นสูง

      แนวทางจัดการเวลาที่เรา Inpaint แล้วไม่ค่อย Work หลายแนวทางดังนี้ คือ

      ปรับ Cycle ให้ทำซ้ำหลายๆ รอบ

      เราสามารถลองใช้ Feature ที่เรียกว่า Cycle เพื่อให้มันทำ Detailer หลายๆ รอบ โดยลองตั้งค่า Cycle เป็น 3 ดู

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 329

      จะพบว่าสีเสื้อเป็นสีม่วงมากขึ้น โดยที่ผมไม่ได้แก้ Prompt หรือ Seed อะไรเลยด้วยซ้ำ

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 330

      จะเห็นว่าการใช้ 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 331

      รูปหลังปรับสีด้วยเครื่องมือ Post Processing ปกติ ก็ช่วยได้มาก

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 332

      พอรูปพื้นฐานมันม่วงแล้วในระดับนึง ไม่ใช่ขาวจั๊วะ คราวนี้ใน Detailer ก็จัดการต่อได้ง่ายแล้ว

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 333

      ลองใช้ 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 334

      เทียบ 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 337

      จะเห็นว่าเสื้อกลายเป็นลายนกยูงได้เลย (พลังจาก IP Adapter แรงจนสามารถเปลี่ยนสีจากเสื้อสีขาวได้เลย!)

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 338

      หรือถ้าปรับ Cycle เพิ่มอีก (ผสมผสานหลายเทคนิค) ลายก็จะชัดขึ้นได้

      สอนใช้ ComfyUI EP12 : สุดยอดวิธีการ Mask และ Detailer 339

      สรุป

      การใช้ 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 โมเดลใหม่สุดเจ๋ง 340

      ถ้าโหลดสำเร็จจะขึ้น Workflow แบบนี้

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 341

      แต่ตรง 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 โมเดลใหม่สุดเจ๋ง 342

      2. ใช้จาก Service ที่มีบริการ เช่น ของคนไทยเราก็มีที่นี่ ดีมากๆ https://varoriya.com/en/service/flux/

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 343

      ความเร็วในการ Gen

      บอกก่อนว่า การ์ดจอผม 3060 vram 6gb เอง ดังนั้นมันอาจจะช้ากว่าคนที่ GPU แรงๆ นะ

      ถ้านับจากการกด Queue Prompt ครั้งแรกเลย โดยไม่ยังไม่ได้โหลด Model อะไรไว้ก่อน เครื่องของผมใช้เวลาเกือบ 300 วิ…

      แต่ถ้า Gen Prompt เดิมซ้ำกับภาพใหม่

      • ถแบบ dev 20 steps ผมใช้เวลา 90 วิ
      • แบบ schnell 4 steps ใช้เวลาเหลือแค่ 20 กว่าวิ!
      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 344

      แต่ถ้ามีการเปลี่ยน Prompt ผมใช้เวลา 140 วิได้… ซึ่ง Gen ซ้ำ 20 วิเช่นเคย

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 345

      ถ้าใคร 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 โมเดลใหม่สุดเจ๋ง 386

      นี่ครับ “A beautiful Thai grandma” ถ้า Prompt เราระบุให้แก่เลย Steps น้อยมันก็ดูแก่อยู่นะ
      หรือถ้า Prompt เราตั้งใจให้เด็ก “A beautiful Thai little girl” Step เยอะ ก็ยังเด็กนะครับ

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 387

      สรุปก็น่าจะเป็นเพราะมันทำตาม Prompt ดีขึ้นแหละ

      Image 2 Image

      นอกจากจะ Gen ภาพใหม่แล้ว เราเอามา FLUX ใช้ทำ Img2Img จากภาพเดิมที่มีอยู่แล้วก็ได้นะ แค่เปลี่ยน Empty Latent ออก แล้วแทนด้วย Load image + VAE Encode ตามปกติเลย แต่อย่าลืมเปลี่ยน Denoise ให้เหมาะสมล่ะ เช่น 0.4-0.5

      ComfyUI ตอนพิเศษ : ลองใช้ FLUX โมเดลใหม่สุดเจ๋ง 388

      สรุปความเห็นจากการทดลองใช้ 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 ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 389

      ซึ่งมีหลายเรื่องที่เราอยากจัดการให้เรียบร้อย เช่น

      • จัดการหัวตารางให้ถูกต้อง
      • ถมข้อมูลในคอลัมน์สินค้าให้เต็ม
      • คอลัมน์ลูกค้า มีการเคาะเว้นวรรคติดมา
      • เปลี่ยนชื่อคอลัมน์ จำนวนชิ้น เป็น Qty
      • อยากแก้วิธีการชำระเงิน เครดิตการ์ด ->Credit

      มาลองใช้ Power Query กันเถอะ! เริ่มต้นง่ายนิดเดียว!

      ถ้าคุณเคยได้ยินเกี่ยวกับ Power Query แต่ยังไม่เคยลองใช้ ถึงเวลาแล้วที่จะต้องลองดู! เริ่มต้นง่ายๆ แค่นี้:

      1.เปิด Excel ไฟล์เปล่าอันใหม่ แล้วไปที่แท็บ ‘Data’

      เหมือนกับการเปิดประตูสู่โลกแห่งเวทมนตร์! 🚪✨
      Tips : เวลาใช้ Power Query เราไม่ควรทำในไฟล์ดิบต้นฉบับ เพราะจะอัปเดทยาก และเราก็จะไม่เปิดไฟล์ต้นฉบับทิ้งไว้ด้วยนะ ใครเปิดอยู่ก็ปิดซะ

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 390

      2. คลิกที่ ‘Get Data’ ปุ่มวิเศษที่จะพาคุณเข้าสู่โลกของ Power Query

      แล้วเลือกแหล่งข้อมูลที่คุณต้องการ – จะเป็นไฟล์ Excel, CSV, ฐานข้อมูล SQL, Website, หรือแม้แต่ PDF ก็ได้!

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 391

      ซึ่งในที่นี้เราจะเลือก Get Data -> From File -> Excel Workbook นะ จากนั้นติ๊กเลือกเอา Sheet หรือ Table ที่ต้องการแล้วกด Transform

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 392

      3. ยินดีต้อนรับสู่ Power Query Editor!

      นี่แหละคือห้องทดลองเวทมนตร์ของคุณ! 🧪 ซึ่งมีเครื่องมือและคาถามากมายให้คุณเลือกใช้

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 393
      • เครื่องมือที่คุณใช้ตรงนี้จะถูกบันทึกเป็น Applied Steps ที่ด้านขวา เป็นคาถาภาษา M Code โดยอัตโนมัติ
      • การใช้ Power Query เบื้องต้นคุณไม่ต้องเขียน MCode เอง เพราะโปรแกรมทำให้ แต่ถ้าคุณอยากเจาะลึก คุณก็ศึกษาคาถา M Code เพื่อให้ทำเรื่องเจ๋งๆ มากขึ้นได้อีก
      • การที่มันบันทึก Step M Code ไว้ เพื่อให้คุณสามารถใช้คาถาพิเศษ ที่ชื่อว่า “Refresh” เสกสั่งทำงานซ้ำได้อีกครั้งในอนาคตได้แบบสบายๆ

      4. ตรวจสอบคาถาที่ถูกสั่งไว้เดิม

      อ๊ะๆ แต่ก่อนจะเสกคาถาเพิ่มเข้าไป เราควรตรวจสอบก่อนว่ามีคาถาอะไรถูกสั่งไว้แบบไม่จำเป็น หรือ สั่งไว้ผิดๆ หรือไม่?

      ซึ่งในที่นี้ คำสั่ง Promote Headers กับ Changed Type ถูกสั่งกับหัวตารางผิดตัว (ดันไปเอาข้อมูลการขายของเป็นหัวตาราง)

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 394

      ดังนั้นเราจะกดกากบาทเอา Step นั้นออกไปก่อน สุดท้ายจะเหลือแค่ Source กับ Navigation ที่ทำให้เหลือข้อมูลที่เห็นใน Sheet ตามปกติ โดยยังไม่ได้มีการจัดการหัวตาราง

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 395

      5. ใช้คาถาต่างๆ เพื่อแปลงข้อมูลตามต้องการ

      5.1 หลักการโดยทั่วไปใน Power Query เราจะพยายามจัดการหัวตารางให้มันถูกต้องก่อน ค่อยทำอย่างอื่นต่อ (ซึ่งตรงนี้จะจุกจิกนิดนึง แต่ถ้าผ่านไปได้ ต่อไปจะง่ายแล้ว)

      ซึ่งเราจะพบว่าข้อมูลในคอลัมน์แรกนั้นไม่จำเป็น เราจะเลือกคอลัมน์แรกแล้วกดปุ่ม Del บน Keyboard แล้วมันก็จะหายไปแบบง่ายๆ ซึ่งจะพบว่ามี Step Remove Columns โผล่มาที่ด้านขวา และมีคาถา M Code ถูกบันทึกไว้ด้วยว่าให้ลบคอลัมน์ที่ชื่อว่า Column1

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 396

      การจัดการหัวตารางมันจะมีคำสั่ง Use First Rows as Headers ซึ่งสามารถทำให้ข้อมูลบรรทัดแรกเป็นหัวตารางได้ แต่ สินค้า, Order Date,… ดันอยู่แถวที่ 3 ไม่ใช่แถวแรก

      ดังนั้นเราจะลบ 2 แถวบนออก โดยกดปุ่ม Remove Rows -> Remove Top Rows แล้วระบุว่าเอาออก 2 แถว

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 397

      จากนั้นกด Home -> Use First Rows as Headers

      เราจะได้ Step Promote Headers มา แล้วมันจะแถม Step Change Types ซึ่งคือการเปลี่ยนประเภทข้อมูลแต่ละคอลัมน์ให้เราด้วย (ซึ่งในที่นี้ดีแล้ว)

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 398

      5.2 เมื่อหัวตารางถูกต้อง เราจะจัดการเรื่องอื่นได้ง่ายแล้ว ได้เวลาลุย! 😆

      ต่อไปเราจะถมข้อมูลในคอลัมน์สินค้าให้เต็ม โดยคลิ๊กขวาที่คอลัมน์สินค้า แล้วเลือก Fill->Down ทำง่ายๆ แค่นี้เลย!

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 399
      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 400

      ที่คอลัมน์ลูกค้า เราจะจัดการเคาะเว้นวรรคติดมา ด้วยการคลิ๊กขวาที่คอลัมน์ลูกค้า -> Transform -> Trim

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 401

      หากต้องการเปลี่ยนชื่อคอลัมน์ จำนวนชิ้น เป็น Qty สามารถทำง่ายๆ ด้วยการดับเบิ้ลคลิ๊กที่ชื่อคอลัมน์จำนวนชิ้น แล้วแก้ได้เลย

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 402

      อยากแก้วิธีการชำระเงิน เครดิตการ์ด ->Credit สามารถทำได้ง่ายๆ โดยคลิ๊กขวาที่คอลัมน์ วิธีการชำระเงิน แล้วเลือก Replace Values…

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 403

      เปลี่ยนชื่อ Query ให้เรียบร้อยซักนิด

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 404

      6. ถ้าพอใจกับผลลัพธ์แล้วก็โหลดผลลัพธ์ไปใน Excel

      กด Home -> ‘Close & Load’ เพื่อโหลดข้อมูลออกไปใน Excel เป็น Table

      หรือสามารถกด Close & Load To… เพื่อเลือกว่าจะเอาผลลัพธ์ออกไปเป็นอย่างอื่นได้ (เช่น Pivot หรือ พวก Data Model)

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 405
      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 406

      แค่นี้ ข้อมูลของคุณพร้อมใช้งานแล้ว! 🎩✨

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 407

      การอัปเดทข้อมูลในอนาคต

      หากมีการแก้ข้อมูลต้นฉบับ เราสามารถกดคลิ๊กขวา Refresh ที่ตารางผลลัพธ์นี้ หรือ Data -> Refresh All ได้เลย แล้ว Query ก็จะทำงานอีกครั้งแบบสบายๆ

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 408

      ถ้าข้อมูลต้นฉบับมีการเปลี่ยนชื่อไฟล์ หรือ เปลี่ยนตำแหน่งที่วางไฟล์

      ให้เราไปแก้ไปที่ Data -> Get Data -> Data Source Setting

      Power Query: เวทมนตร์แห่ง Excel ที่จะเสกงานให้สำเร็จในพริบตา! ✨🧙‍♂️ 409

      แล้วเลือก 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