Author: Sira Ekabut

  • 7 วิธีรับมือกับวันแย่ๆ (ใน Excel)

    7 วิธีรับมือกับวันแย่ๆ (ใน Excel)

    อย่างที่ผมเคยย้ำเสมอว่า Excel มองวันที่เป็นแค่ตัวเลขจำนวนธรรมดาตัวหนึ่งที่เปลี่ยนหน้าตาไปเท่านั้น (รายละเอียดอ่านได้ที่นี่)

    นอกจากนี้ Excel จะรู้จักวันที่ในรูปแบบที่มันคุ้นเคยเท่านั้น เช่น dd/mm/yyyy หรือ dd-mm-yyyy หรือ yyyy/mm/dd หรือ yyyy-mm-dd (กรณีที่ตั้งค่า Regional Setting ใน Control Panel เป็น Thai )

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

    แต่บางครั้งเราได้ข้อมูลมาจากคนอื่น (หรือแม้แต่ฐานข้อมูลที่ Office) ซึ่งดันมีข้อมูลวันที่อยู่ในรูปแบบที่แย่ๆ Excel มันก็เลยไม่รู้จัก เราก็เลยต้องยื่นมือไปช่วยหน่อยแล้ววววว!!!

    นี่คือ 7 วิธีที่จะรับมือกับวันแย่ๆ ครับ

    สมมติว่ากรอกวันที่แย่ๆ อยู่ในช่อง A1 นะครับ

    วันแย่แบบที่ 1 : YYYYMMDD โดยปีเป็น ค.ศ.

    วิธีแก้อาการนี้ ทำง่ายๆ ครับ โดยใช้ความรู้เรื่องฟังก์ชั่น TEXT กับ Custom Format มาช่วย ได้ดังนี้

    =TEXT(A1,”0000-00-00″)*1 จะได้เป็นตัวเลขที่ถูกต้องแล้ว แต่ถ้าอยากเห็นเป็นวันที่ ก็ให้ Format เป็นวันที่เป็นอันจบ

    วันแย่แบบที่ 2 : YYYYMMDD โดยปีเป็น พ.ศ.

    วิธีแก้ ผมแนะนำ 2 วิธีแล้วกัน

    แบบแรก ตัดทีละส่วนแล้วรวมกันด้วย DATE จะได้ว่า

    =DATE(LEFT(A1,4)-543,MID(A1,5,2),RIGHT(A1,2))

    แบบที่สอง ใช้ TEXT เหมือนเดิม จะได้ว่า

    =TEXT((LEFT(A1,4)-543)&RIGHT(A1,4),”0000-00-00″)*1

    วันแย่แบบที่ 3 : DDMMYYYY โดยปีเป็น ค.ศ.

    คล้ายกับวิธีที่ 1 ครับ แต่ปรับ Format เล็กน้อย

    =TEXT(A1,”00-00-0000″)*1

    วันแย่แบบที่ 4 : DDMMYYYY โดยปีเป็น พ.ศ.

    คล้ายกับวิธีที่ 2 ครับ มี 2 วิธี

    แบบแรก =DATE(RIGHT(A1,4)-543,MID(TEXT(A1,”00000000″),3,2),LEFT(TEXT(A1,”00000000″),2))

    แบบที่สอง = TEXT(LEFT(TEXT(A1,”00000000″),4)&RIGHT(A1,4)-543,”00-00-0000″)*1

    วันแย่แบบที่ 5 : มีสัญลักษณ์ประหลาด เช่น .

    กรณีเป็น ค.ศ :

    วิธีแก้ง่ายมาก ก็แปลงจุด (หรือสัญลักษณ์อะไรก็แล้วแต่) ให้เป็นตัวที่ Excel รู้จักเช่น – ด้วย SUBSTITUTE ก็พอครับ

    =SUBSTITUTE(A1,”.”,”-“)*1

    กรณีปีเป็น พ.ศ.

    หลักการก็คือทำให้ . หายไปก่อนด้วย =SUBSTITUTE(A1,”.”,””) แล้วเอาไปเข้ากรณีวันแย่แบบที่สองครับ ซึ่งจะได้ว่า

    =DATE(LEFT(A1,4)-543,MID(SUBSTITUTE(A1,”.”,””),5,2),RIGHT(A1,2))

    อีกแบบก็จะได้ว่า

    =TEXT((LEFT(A1,4)-543)&RIGHT(SUBSTITUTE(A1,”.”,””),4),”0000-00-00″)*1

    วันแย่แบบที่ 6 : เลขปีเขียนแบบย่อ จาก YYYY เหลือแค่ YY 2 ตัวหลัง

    เช่น DDMMYY โดยปีเป็น ค.ศ. แบบนี้เราก็ต้องรู้ก่อนว่า ปีเป็น 19YY หรือ 20YY

    ถ้ามั่นใจว่าเป็น 20YY ก็ทำแค่นี้พอ =TEXT(A1,”00-00-00″)*1

    แต่ถ้าเป็น 19YY ก็อาจจะต้องเติมตัวเลข 19 ให้มัน เช่น =DATE(“19″&RIGHT(A1,2),MID(TEXT(A1,”000000″),3,2),LEFT(TEXT(A1,”000000”),2))

    วันแย่แบบที่ 7 : ข้อมูลต้นทางมีหลายรูปแบบผสมผสานกัน!!

    แบบนี้ ถ้าคิดว่ามีเครือ่งหมายประหลาดอะไรก็แนะนำว่าให้ใช้ SUBSTITUTE ตัดทิ้งให้หมดก่อน

    หลังจากนั้นคุณต้องเขียนสูตรเพื่อตรวจเช็ครูปแบบแล้วล่ะ
    เช่น ใช้ LEFT RIGHT เช็คดูว่าเลขน่าจะเป็น ค.ศ. หรือ พ.ศ.? และมีกี่ตัวอักษร??

    จากนั้นค่อยเอาไปใช้ IF หรือ CHOOSE เพื่อเลือกสูตรที่เหมาะสมต่อไป

    แต่ถ้าเกิดเหตุการณ์แบบนี้จริงๆ ไปแก้ตั้งแต่ต้นเหตุดีกว่า ว่าทำไมถึงกรอกข้อมูลได้มั่วขนาดนี้!!!!

    อย่างน้อยก็ควรใส่ Data Validation ไว้บ้างนะครับ เช่น

    data-validation

    เทคนิคแถม : คนกรอกข้อมูลดึงดันจะกรอกเป็น พ.ศ.

    อย่างที่บอกว่าเราควรกรอกข้อมูลเป็น ค.ศ. เสมอ แต่ถ้าคนกรอกดึงดันว่าจะกรอก พ.ศ.ล่ะ !!?

    วิธีที่ทำให้กรอกข้อมูลเป็น พ.ศ. แล้วข้อมูลไม่เพี้ยน คือต้องเลือก Cell ช่องนั้นๆ แล้วเลือก Number Format ดังนี้ครับ

    7 วิธีรับมือกับวันแย่ๆ (ใน Excel)

    เป็นอย่างไรกันบ้างครับ กับเทคนิคการรับมือกันวันแย่ๆ ใน Excel ผมหวังว่าจะเป็นประโยชน์กับเพื่อนๆ นะครับ

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

  • มีข้อมูลเห็นอยู่เต็มตา แต่ VLOOKUP หาไม่เจอ ทำไงดี?

    มีข้อมูลเห็นอยู่เต็มตา แต่ VLOOKUP หาไม่เจอ ทำไงดี?

    เคยบ้างมั้ย? เวลาใช้ VLOOKUP แล้ว Error แบบไม่รู้สาเหตุ???

    ep03-001

    ฐานข้อมูลหรือตารางอ้างอิงก็เห็นอยู่จะๆ ว่ามีตัว Lookup_Value ที่เรากรอกลงไป (เลข 100) และก็ดูเหมือนว่าเขียนสูตร VLOOKUP ถูกต้องหมดทุกอย่างแล้ว แต่ผลลัพธ์กลับออกมาเป็น Error ซะอย่างนั้น?

    เอ ทำไมหว่า?? ….

    หรือว่าผี Excel หลอก!!

    ไม่ใช่หรอกครับ ผมจะบอกว่าสาเหตุนึงที่คนมักจะลืมนึกไปก็คือ ประเด็นเรื่อง “ประเภทของข้อมูล” นั่นเอง

    ประเภทข้อมูลนั้นสำคัญมาก!

    รู้หรือไม่ว่าพวก VLOOKUP MATCH หรือแม้แต่การใช้เครื่องหมาย = เพื่อเปรียบเทียบข้อมูล 2 ตัวเข้าด้วยกัน ถ้ามันเป็นข้อมูลคนละประเภท ไม่ว่าจะหน้าตาเหมือนกันแค่ไหน Excel ก็จะถือว่าเป็นข้อมูลคนละตัวกันทันที

    เราไม่สามารถรู้ประเภทของข้อมูลได้ด้วยตาเปล่า เพราะอาจถูกลวงด้วยการปรับ Format เช่น ในรูปผมปรับให้ข้อมูลอยู่กึ่งกลางทั้งหมด จึงไม่มีทางดูออกเลยว่าเป็น Number หรือ Text

    วิธีที่จะเช็คได้ดีที่สุดคือใช้ฟังก์ชั่น TYPE มาเช็คครับ

    ซึ่งแปลความหมายได้ดังนี้ 1 = Number   2= Text    4= Logic    16 = Error

    ep03-002

    พอลองเช็คดูจะเห็นว่าในตารางอ้างอิง ตัว ID เป็น Text แต่ใน Lookup_Value เป็น Number
    นี่คือสาเหตุที่ว่า VLOOKUP หาค่า 100 ในตารางไม่เจอ ทั้งๆ ที่เรามองเห็นอยู่เต็มตาแท้ๆ !!

    วิธีแก้ก็คือ ต้องทำให้ข้อมูลเป็นประเภทเดียวกัน ถ้าไม่แก้ที่ตารางอ้างอิง ก็ต้องแก้ที่ Lookup_Value

    ep03-003

    หรือ ผมอาจจะเขียนสูตรเพื่อบังคับให้มันเปลี่ยนประเภทข้อมูลเป็น Text ไปเลย โดยการใส่ &”” ก็ได้

    ep03-004

    เป็นไงบ้างครับ เรื่องเล็กๆ น้อยๆ ถ้ารู้ก็ไม่ยากเลยใช่มั้ยครับ แต่ถ้าไม่รู้ก็อาจงงไปอีกนาน ^^

  • จะ Mapping ข้อมูลที่อยู่ด้านซ้าย ใช้ VLOOKUP ไม่ได้ ทำไงดี?

    จะ Mapping ข้อมูลที่อยู่ด้านซ้าย ใช้ VLOOKUP ไม่ได้ ทำไงดี?

    ฟังก์ชันยอดฮิตในการ Map ข้อมูลที่หลายคนชอบใช้ก็คือ VLOOKUP ซึ่งมีข้อดีคือ ใช้ฟังก์ชันเดียวก็ Map ข้อมูลได้ดั่งใจ
    แต่ข้อเสียคือถ้าข้อมูลอยู่ด้านซ้ายของคอลัมน์ที่จะค้นหา มันจะเอาค่ากลับมาไม่ได้!

    แล้วที่นี้จะทำไงดี??

    ep01-000

    ถ้าคุณไม่สามารถจะย้ายคอลัมน์ข้อมูลดิบได้ วิธีจัดการกับปัญหานี้ที่อยากจะแนะนำ คือ เปลี่ยนไปใช้ฟังก์ชั่นอื่นซะเถอะครับ (อ้าว)

    ตัวที่ผมอยากจะแนะนำที่สุดก็คือ INDEX+MATCH เพราะนอกจากจะเอาข้อมูลมาได้ทั้งทางซ้ายและขวา ยังทนทานต่อการแทรกคอลัมน์อีกต่างหาก (แทรกแล้วข้อมูลที่ Lookup มาก็ยังถูกต้องอยู่)

    ก่อนอื่น ผมขอทวนการทำงานของ INDEX แบบสั้นๆ นั่นคือ มันจะดึงข้อมูลตามพิกัดที่เราระบุได้

    เช่น หากผมเขียนสูตรแบบนี้ ซึ่งเป็นการบอกว่า ในพื้นที่ A2:A5 นั้น ให้เอาข้อมูลที่อยู่ลำดับที่ 2 กลับมานะ ก็จะได้คำตอบ T004

    ep01-001

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

    แต่ถ้าเราจะให้ Excel ช่วยหาให้ เราก็ต้องใช้ MATCH มาแทนเลข 2 ในส่วนของ row_num ดังนี้
    ซึ่งเป็นการบอกว่า ให้กาคำในช่อง B9 ในช่วง B2:B5 ว่าอยู่ลำดับที่เท่าไหร่??
    (ใส่ Match_Type เป็น 0 เพราะจะหาข้อมูลแบบต้องเจอเป๊ะ หรือ Exact Match)

    ep01-002

    พอ Enter ก็จะได้คำตอบคือ T004 ตามต้องการ และเมื่อลองเปลี่ยนชื่อดู ก็จะได้ผลลัพธ์ที่ถูกต้องอยู่

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

    =INDEX(A:A,MATCH(B9,B:B,0))

    ep01-003

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

     

  • การทำ Keyword Analysis ด้วย Excel เพื่อจัดกลุ่มข้อมูล

    การทำ Keyword Analysis ด้วย Excel เพื่อจัดกลุ่มข้อมูล

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

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

    ซึ่งก็ได้ผลลัพธ์ที่น่าพอใจพอสมควรครับ ^^

    ดังนั้นผมจึงอยากนำแนวคิดนี้มาลองแบ่งปันกับเพื่อนๆ เผื่อจะเป็นประโยชน์กับคนอื่นที่อาจต้องทำอะไรคล้ายๆ ผม และบางทีคุณอาจมีเทคนิคที่เจ๋งกว่าผมก็ได้ (ถ้ามีก็บอกกันด้วยนะ อิอิ)

    มาลองทำกันจริงๆ

    ผมขอสมมติสถานการณ์ใหม่ขึ้นมาว่าเราเป็นบริษัทขายของแห่งหนึ่ง แล้วเราได้รวบรวมคำบ่นที่ลูกค้าด่าเรามาไว้ได้หลายพันข้อความเลย (แต่ในไฟล์มีแค่ 15 ข้อความ เพื่อความง่าย) =>  keyword-analysis (โหลดไฟล์ที่เสร็จสมบูรณ์ได้ที่นี้)

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

    ซึ่งหน้าตาข้อมูลเป็นแบบนี้

    001

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

    สมมติผมอ่าน comment คร่าวๆ แล้วแบ่งคำได้ดังนี้

    Product

    • สินค้า
    • tv
    • ทีวี
    • dvd
    • ดีวีดี
    • product
    • พัง

    Service

    • พนักงาน
    • คนขาย
    • ช้า
    • call center

    สมมติพอแค่นี้ก่อน…

    ต่อไป เรา List Keyword เหล่านี้ลงแต่ละคอลัมน์ แล้วพยายามจัด group เพื่อให้ไม่งง

    002

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

    ซึ่งวิธีการหา ก็มีอยู่ 2 วิธีหลักๆ คือ ใช้ FIND หรือ SEARCH ซึ่งมีการทำงานต่างกัน คือ…

    FIND จะสนเรื่องตัวพิมพ์เล็กพิมพ์ใหญ่ด้วย เช่น

    • ถ้าหาคำว่า tv ใน “tv จอติดๆดับๆ สินค้าห่วย” จะเจอ
    • แต่ถ้าหาใน “TV จอมืดมาก มองไม่เห็น แย่มาก” จะหาไม่เจอ…

    แต่ถ้าเราใช้ SEARCH จะเจอทั้งคู่ !!

    ดังนั้นในสถานการณ์แบบนี้ผมชอบจะใช้ SEARCH มากกว่า (ไม่งั้นผมต้องใส่ทุก Combination ที่เป็นไปได้ลงไปเลย) และนอกจากนี้ SEARCH ยังหาคำแบบ Wild Card ด้วยด้วย เช่น หาคำว่า b?t จะเจอกับทั้ง bat but bet bit bot … และอีกมากมาย เพราะ ? แทนอะไรก็ได้ 1 ตัวอักษร (รายละเอียดลองหาในบทความเก่า ๆได้)

    เมื่อตัดสินใจได้แล้วว่าจะใช้ SEARCH เราก็ต้องมาดูต่อว่ามันทำงานแบบไหน? ซึ่งมันจะหาว่าคำที่เราค้นหาอยู่ตำแหน่งตัวอักษรที่เท่าไหร่ ซึ่งถ้าหาไม่เจอจะให้ค่าเป็น error แบบ #N/A กลับมาเลย

    แต่ผมอยากเขียนสูตรให้เป็นว่า ถ้าหาเจอ ให้เป็นเลข 1 ถ้าไม่เจอให้เป็นเลข 0 ดังนั้นผมจะใช้ IF มาช่วย ดังนี้

    003

    ต่อไปผมก็ copy ลากยาวให้ครบทั้งหมด

    004

    ต่อไปผมจะมาจัดกลุ่ม โดยถ้าอยู่ในกลุ่มแรก จะต้อง flag ช่อง product เป็น 1 ถ้าอยู่ในกลุ่มหลัง ก็จะ flag service เป็น 1

    ผมก็จะเขียนสูตรง่ายๆ ว่า ถ้าเอาค่าหลายๆ คอลัมน์บวกกันแล้วมากกว่า 0 (มีตัวใดตัวหนึ่งเป็น 1) ให้ flag ตัวกลุ่มเป็น 1 ดังนี้

    005

    ทำเหมือนกันกับอีกกลุ่ม

    006

    เพียงเท่านี้เราก็ได้ 2 กลุ่มแล้ว

    ต่อไป เราก็จะเก็บตก ว่าอาจมีเหตุผลอื่นๆ ได้อีก เราก็แค่เช็คว่า ถ้าก่อนหน้านั้นรวมกันได้ 0 หมดเลย เราก็จะ flag อื่นๆ เป็น 1 เท่านั้นเอง

    007

    เพียงเท่านี้เราก็ flag ข้อมูลเพื่อจัดหมวดหมู่ได้แล้ว

    ถ้ายังจัดได้ไม่ดีพอ เราอาจต้องใส่ keyword เพิ่มลงไปอีก ก็แค่แทรก keyword ใหม่เข้าไปตรงกลาง สูตรทุกอย่างก็จะยังใช้ได้อยู่

    เช่น ผมจะใส่คำว่า “หัก” ลงไปในกลุ่ม product  ก็แทรกคอลัมน์ได้เลย

    008

    แล้วใส่ Keyword ที่ต้องการ แล้วใช้สูตรจากเพื่อนข้างๆ

    009

    นอกจากนี้เราเอาข้อมูลไป pivot ก็ได้แบบง่ายๆ ชิลๆ

    010

    ข้อควรระวัง!!

    ถ้าใช้วิธีแบบนี้ มีสิทธิ์ที่ข้อมูล ใน 1 บรรทัด จะถูก flag ว่าเป็นทั้ง product และ service

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

    หวังว่าจะเกิดประโยชน์

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

    ใครอ่านบทความนี้แล้วถูกใจ อย่าลืมบอกต่อเพื่อนๆ ด้วยนะครับ เผื่อจะเกิดประโยชน์กับคนอื่นๆ เช่นเดียวกัน ^^

  • ติวเข้มก่อนเข้าโรงเรียนเวทมนตร์ #2 : ข้อควรระวังในการเขียนวันที่ในสูตร

    ติวเข้มก่อนเข้าโรงเรียนเวทมนตร์ #2 : ข้อควรระวังในการเขียนวันที่ในสูตร

    จากตอนที่แล้วที่ผมได้อธิบายเฉลยข้อสอบเข้าโรงเรียนจอมเวทเทพเอ็กเซล ไป 2 เรื่องแล้ว วันนี้มาต่ออีกเรื่องซึ่งเป็นข้อที่มีคนผิดมากที่สุดครับ โดยโจทย์ที่ถามคือ…

    8) ตามรูป หากเขียนสูตรว่า =IF(A1<31/12/2016,”ยังไม่หมดเขต”,”หมดเขตแล้ว”) ผลลัพธ์จะได้ออกมาเป็นอะไร?
    (A1 คือ วันที่ 29 สิงหาคม ค.ศ. 2016)

    011

    ข้อนี้หลายคนโดนหลอกอย่างจัง เพราะข้อนี้คำตอบคือ “หมดเขตแล้ว”

    สาเหตุคือ เวลาเราเขียนค่าที่เป็นวันที่ลงไปในสูตร หากเราดันไปเขียนว่า =A1<31/12/2016 มันจะกลายเป็น เอา 31 หารด้วย 12 แล้วหารด้วย 2016 แทน (ไม่เชื่อลองเขียนสูตรว่า =31/12/2016 ดูสิ จะได้ ซึ่งจะได้ A1<0.00128141534391534  )

    ดังนั้นสูตรที่เขียนว่า =A1<31/12/2016 จะได้ =A1<0.00128141534391534

    ซึ่ง A1 เป็นวันที่จริงๆ ซึ่งมันเปรียบเทียบได้เป็นเลข 42611 (จริงๆ แล้ววันที่คือเลขธรรมดา เช่น 1 มกราคม ค.ศ. 1900 คือเลข 1, 2 มกราคม ค.ศ. 1900 คือเลข 2 …)

    ดังนั้นสูตรที่เขียนจริงเหมือนกับเขียนว่า =42611<0.00128141534391534 ดังนั้นมันจึงออกมาเป็น FALSE ซึ่งก็คือ “หมดเขตแล้ว” นั่นเอง

    ทีนี้หากจะเปรียบเทียบวันที่แบบถูกต้องจะทำยังไงได้บ้าง???

    ผมอยากจะแนะนำ 3 วิธีด้วยกันนะครับ ลองเอาไปเลือกใช้ดูตามความเหมาะสม

    1. เขียนวันที่เป็น Text แล้วแปลงเป็นตัวเลข

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

    วิธีเขียนคือ ให้เขียนวันที่ในเครื่องหมายคำพูด แล้วเอาไป convert ให้เป็น Number โดยการเอาไปทำอะไรซักอย่างกับ Math Operator เช่น *1, +0, ใส่ – นำหน้า เป็นต้น (ส่วนตัวผมชอบใส่ – นำหน้า เพราะสังเกตง่าย และคำนวนเร็วสุด)
    explain-03

    ซึ่งพอกด Enter ผลลัพธ์ก็จะออกมาเป็น “ยังไม่หมดเขต” ตามที่ควรจะเป็น (อย่าลืมลองเปลี่ยนวันที่เล่นดูว่าสูตรยังทำงานถูกหรือไม่?)

    แต่วิธีนี้มีข้อควรระวัง คือ เรื่องของ Format วันที่ของ Region and Language ใน Control Panel ของคอมพิวเตอร์ที่กำลังเปิดไฟล์นั้นๆ อยู่ เพราะอาจทำให้วันและเดือนสลับกันได้ซึ่งอันตรายพอตัวเลยครับ

    เช่น บางเครื่องตั้งค่าวันที่แบบที่อ่านค่า 3/4/2016 แปลว่า วันที่ 3 เดือน 4 แต่บางเครื่องตั้งค่าให้แปลว่า วันที่ 4 เดือน 3 เป็นต้น

    ซึ่งการที่เราใส่วันที่เป็นรูปแบบตัวเลข xx/yy/zzzz แบบนี้ มันเป็นการ Hard Code แบบใส่ค่าคงที่ลงไปในสูตร ซึ่งไม่ว่าจะเปิดที่ Computer เครื่องไหนก็ตาม มันก็จะเห้นสูตรแบบเดียวกันหมดนี่แหละ แต่อาจตีความไม่เหมือนกันก็ได้

    ดังนั้น ถ้าจะใช้วิธีนี้ โปรดทำให้แน่ใจว่า ไฟล์ที่เราทำจะถูกเปิดใช้โดย Computer ที่ตั้งค่า Format วันที่ของ Region and Language แบบที่เราคิดไว้เท่านั้น

    2.เขียนวันที่ลงไปใน Cell เลย

    วิธีนี้เป็นวิธีที่ดีตรงที่เห็นชัดว่าเรากำลังเปรียบเทียบกับวันอะไรอยู่?
    explain-01

    ซึ่งพอกด Enter ผลลัพธ์ก็จะออกมาเป็น “ยังไม่หมดเขต” ตามที่ควรจะเป็น

    วิธีนี้สิ่งที่เราต้องทำคือ จงแน่ใจว่าเราใส่รูปแบบวันที่แบบเดียวกับวันที่ที่นำมาเปรียบเทียบ เช่น ถ้าเป็น DD/MM/YYYY ก็ใส่ให้เหมือนกัน หรือถ้าเป็น MM/DD/YYYY ก็จงทำให้เหมือนกัน ไม่่งั้นอาจผิดเพราะเรื่อง Format วันที่ของ Region and Language แบบเดียวกับข้อข้างบนได้

    3. เขียนวันที่ด้วยฟังก์ชั่น DATE

    วิธีนี้มีความปลอดภัยสูงที่สุด เพราะจะไม่มีปัญหาเรื่องการตั้งค่า Format วันที่ของ Region and Language ของคอมพิวเตอร์แต่ละเครื่องเลย เพราะฟังก์ชั่น DATE จะถามหา Argument แยกกัน นั่นคือ ปี เดือน วัน แต่ละตัวแยกกันโดยไม่ปนกันเลย
    explain-02

    ดังนั้นถ้าถามผมว่าวิธีไหนน่าจะ Work และปลอดภัยที่สุด ความเห็นส่วนตัวของผมคือ วิธีสุดท้ายนี่แหละครับ ^^

    เอาล่ะ ใครอ่านจบถึงตรงนี้ ถ้าหากมีคำถามอะไร อย่าปล่อยผ่านนะครับ ถามมาได้เล้ยยยย

     

  • ติวเข้มก่อนเข้าโรงเรียนเวทมนตร์ #1 : ค่าที่แท้จริง วันที่และเวลา

    ติวเข้มก่อนเข้าโรงเรียนเวทมนตร์ #1 : ค่าที่แท้จริง วันที่และเวลา

    จากที่ผมได้ Post ข้อสอบเข้าโรงเรียนจอมเวทเทพเอ็กเซลให้ลองทำกันไปเมื่ออาทิตย์ก่อน  (ใครยังไม่ได้ลองทำ เชิญไปทำได้ที่นี่ จะได้รู้ว่าเนื้อหาตรงไหนที่เรายังไม่แม่นนะครับ https://goo.gl/forms/5hqxIOH7tGDk9F3D2 )

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

    • ข้อ 6) จากรูป หากเขียนสูตรใน A2 ว่า =A1+1 จะได้ค่าเท่าไหร่?
    • ข้อ 8) ตามรูป หากเขียนสูตรว่า =IF(A1<31/12/2016,”ยังไม่หมดเขต”,”หมดเขตแล้ว”) ผลลัพธ์จะได้ออกมาเป็นอะไร?
      (A1 คือ วันที่ 29 สิงหาคม คศ. 2016)
    • ข้อ 9) เริ่มทำงาน ด้วยเวลาในช่อง B1 เสร็จงาน ด้วยเวลาในช่อง B2 จะคำนวณว่าใช้เวลากี่นาที ในช่อง B3 ยังไง?

    ดังนั้นผมจะขอนำมาเขียนอธิบายแบบละเอียดให้เข้าใจกันอย่างแจ่มแจ้งอีกครั้งนะครับ โดยในบทความนี้เรามาดู ข้อ 6 กับข้อ 9 กันก่อนครับ บทความถัดไปจะมาดูข้อ 8 กัน

    ค่าที่เห็น…อาจไม่ใช่ค่าที่เป็น (เรื่องค่าที่แท้จริง)

    ข้อ 6) จากรูป หากเขียนสูตรใน A2 ว่า =A1+1 จะได้ค่าเท่าไหร่?

    003

    ข้อนี้ถ้าไม่สังเกตให้ดีอาจโดนหลอกได้ง่ายๆ เพราะค่าใน Cell เป็นเลข 3 แต่ค่าใน Formula Bar เป็น 2.5

    ซึ่งค่าใน Cell ที่เรามองเห็นเกิดจากการเอา “ค่าที่แท้จริง” ไปปรุงแต่ง แต่งตัว แต่งหน้า” ผ่านการปรับ Formatting หรือรูปแบบการแสดงผล จนสุดท้ายออกมาเป็นผลลัพธ์ที่เรามองเห็นด้วยตาเปล่าได้

    แต่เรื่องของการแสดงผลก็เป็นเพียงแค่เปลือกนอกเท่านั้น ถึงเราจะปรับเลข 2.5 ให้ไม่แสดงทศนิยมจนแสดงผลออกมาเป็นเลข 3 เวลานำมันไปคำนวณต่อ Excel จะเอาค่าที่แท้จริง คือ 2.5 ไปคำนวณต่อ ไม่ได้เอาการแสดงผลหรือเลข 3 ไปคำนวณนะครับ (ยกเว้นว่าใน Excel Option จะไปตั้งค่า Set precision as displayed ในเมนู Advanced ซึ่งปกติแล้วจะไม่ตั้งค่าแบบนั้น)

    ดังนั้นสิ่งที่ต้องจดจำไว้ให้ดีคือ “ค่าที่เห็น…อาจไม่ใช่ค่าที่เป็น” การปรับ Format ทั้งหน้าตาและ Number Format จะไม่มีผลใดๆ ต่อการคำนวณทั้งสิ้น

    การคำนวณเวลาที่ใช้ในการทำงาน และการแปลงหน่วย (ข้อ 9)

    ข้อ 9) เริ่มทำงาน ด้วยเวลาในช่อง B1 เสร็จงาน ด้วยเวลาในช่อง B2 จะคำนวณว่าใช้เวลากี่นาที ในช่อง B3 ยังไง?

    002

    ก่อนที่จะคำนวณข้อนี้ได้ เราจะต้องมีความเข้าใจเรื่องที่ว่า วันที่และเวลา จริงๆ แล้วคือตัวเลขธรรมดาๆ ที่เปลี่ยน Number Format ไปเท่านั้น (อย่างที่อธิบายข้างบนว่า การปรับ Format ไม่มีผลต่อการคำนวณ)

    โดยที่ Excel จะแทนวันที่ 1/1/1900 (1 มกราคม คศ. 1900) ด้วยเลข 1  (ค่าที่แท้จริงของวันที่ 1/1/1900 คือ เลข 1) แล้วมันก็แทนวันที่ 2/1/1900 ( 2 มกราคม คศ. 1900) ด้วยเลข 2… ทำอย่างนี้ไปเรื่อยๆ

    เช่น หากใน Cell ใส่วันที่เป็น 16/10/2016 แล้วลองเปลี่ยน Number Format ให้เป็น Number จะเห็นว่ากลายเป็นเลข 42659 นั่นเอง (ไม่ต้องจำเลขนะ…)

    เมื่อ Excel แทนวันที่ด้วยจำนวนเต็ม ดังนั้น เวลา (ซึ่งคือส่วนหนึ่งของวัน) ก็จะถูกแทนด้วยเลขทศนิยมนั่นเอง เช่น

    • วันที่ 16/10/2016 เวลา 0:00 คือเลข 42659
    • วันที่ 16/10/2016 เวลา 12:00 (เวลาผ่านไปครึ่งวัน) คือเลข 42659.5 (เพิ่มมา 0.5 วัน)
    • วันที่ 17/10/2016 เวลา 0:00 คือเลข 42660

    ทีนี้ถ้าเรากรอกเป็น 16/10/2016  13:25:00 แล้วลองเปลี่ยนเป็น Number จะได้เป็นเลข 42659.5590277778 (ลองเพิ่มทศนิยมดู) ซึ่งจริงๆ แล้วมันก็คือการแปลงวัน+เวลา ชั่วโมงและนาที ให้มีหน่วยเป็น “วัน” นั่นเอง

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

    เช่น เอา B2-B1 จะได้ 1.784722222 แบบนี้ ซึ่งจะมีหน่วยเป็นวัน

    explain-timedif

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

    • 1 วัน = 24 ชม. หรือ 1 = 24 ชม./วัน
    • 1 ชม. = 60 นาที หรือ 1 = 60 นาที/ชม.

    ดังนั้น (B2-B1) วัน คือ

    • = (B2-B1) วัน * 1 * 1 (คูณ 1 ค่าไม่เปลี่ยน ถือว่าทำแล้วค่ายังคงถูกต้อง)
    • = (B2-B1) วัน * 24 ชม./วัน * 60 นาที/ชม.
      โดยที่จะเห็นว่าหน่วยสามารถตัดกันได้ จนเหลือแค่หน่วยนาที

    explain-timedif2

     

    • สุดท้ายจะได้ว่า เวลาที่ผ่านไปเป็นหน่วยนาที คำนวณได้จาก
    • = (B2-B1)*24*60 นาที

    เห็นมั้ยครับ? การคำนวณเรื่องวันที่และเวลาไม่ได้ยากอย่างที่คิดเลย แค่ต้องเข้าใจ Concept ของมันเท่านั้นเอง

    ใครยังสงสัยตรงไหนก็ถามได้เลยนะครับ อย่าปล่อยผ่านไปแบบไม่เข้าใจแบบเคลียร์ๆ นะ ^^

     

  • เชิญทำข้อสอบเข้าเรียนต่อ โรงเรียนเวทมนตร์ “จอมเวท เทพ Excel”

    cover-fb

    ข้อสอบนี้ เป็นแบบทดสอบวัดระดับพลัง Excel ระดับพื้นฐาน-กลาง
    คนที่ทำได้ดี น่าจะอ่านหนังสือเล่ม 2 ของผม ชื่อ “จอมเวท เทพ Excel”
    ที่กำลังจะออกประมาณปลายเดือนตุลาได้โดยไม่มีปัญหาครับ
    (ดูรูปตัวอย่างได้ใน Facebook
    https://www.facebook.com/inwexcel/photos/?tab=album&album_id=628710610640299
    และ https://www.facebook.com/inwexcel/photos/?tab=album&album_id=639852389526121)

    ใครที่ยังทำได้ไม่ดี ก็ลองกลับไปทบทวนข้อที่ทำผิดอีกทีนะครับ (มีเฉลยหลังทำเสร็จ)

    มี 30 ข้อ (เอง) ทำแป๊ปเดียวเสร็จ (คนคล่องๆ ทำแค่ 2-3 นาทีก็เสร็จนะ) ค่อยๆ ลองทำโดยไม่เปิด Excel นะครับ
    จะได้รู้ว่าความรู้ Excel ของคุณมีมากน้อยแค่ไหน

    Link แบบทดสอบ : https://goo.gl/forms/5hqxIOH7tGDk9F3D2

    ใครทำเสร็จแล้วให้กดปุ่ม “View Your Score” เพื่อดูเฉลยนะครับ ผลเป็นยังไง อย่าลืมมาบอกกันด้วยนะครับ
    ถ้าชอบก็อย่าลืมแชร์ให้เพื่อนๆ เล่นด้วยนะครับ ^^

  • สอนใช้ INDEX เพื่อทำตารางธาตุ Pokemon GO!

    สอนใช้ INDEX เพื่อทำตารางธาตุ Pokemon GO!

    ช่วงนี้กระแส Pokemon GO! กำลังมาแรง ผมเองก็เล่นอยู่บ้าง เลยคิดว่าเอา Pokemon มาสอน Excel ดีกว่า 555 สำหรับคนที่ Level 5 ขึ้นไป จะสามารถเข้าไปตี Gym ได้ ซึ่งจะต้องเอา Pokemon มาสู้กัน

    หนึ่งในปัจจัยที่มีผลต่อการแพ้ชนะนอกจากพลัง CP ก็คือ เรื่องของธาตุหรือประเภทของ Pokemon ที่สู้กันนั่นเอง เพราะธาตุแต่ละธาตุมีเรื่องที่แพ้ทางกัน ดังนั้นต้องเลือกการโจมตีอย่างเหมาะสม ซึ่งใน Internet ก็มีข้อมูลพวกนี้เยอะแยะเลย

    ซึ่งผมลองเอาข้อมูลมาทำตารางใน Excel โดยสามารถให้เราเลือกประเภท Pokemon ที่เป็นฝ่ายรุก ฝ่ายรับ เพื่อดูว่าผลเป็นยังไงได้

    ดาวน์โหลดไฟล์ได้ที่นี่ => PokemonGo ThepExcel

    pokemon-go-inwexcel

    วิธีทำเริ่มจากสร้าง Dropdown ให้เลือกธาตุของฝ่ายรุก และฝ่ายรับ แยกช่องกันไว้

    จากนั้นใช้ match เพื่อดูว่าอยู่ row ไหน และ column ไหนของตาราง

    หาลำดับคนโจมตี : MATCH(B3,$A$6:$S$6,0)
    หาลำดับคนป้องกัน : MATCH(B4,$A$6:$A$24,0)

    จากนั้นใช้ index เพื่อดึงผลลัพธ์การโจมตีกลับมา

    INDEX($A$6:$S$24,MATCH(B3,$A$6:$S$6,0),MATCH(B4,$A$6:$A$24,0))

    สิ่งที่น่าสนใจคือ ถ้าใช้ INDEX หรือ LOOKUP แบบปกติ ค่าที่เป็นค่าว่าง กับค่า 0 ในตารางจะออกมาเป็น 0 เหมือนกันหมด ทำให้ตีความผิด

    ผมจึงใส่ IF ซ้อนไปว่า ถ้าค่ากลับมาเป็นค่าว่าง “” ให้แปลงค่าเป็นตัวอื่น เช่น ” ” หรือ 1 ก็ได้ จากนั้นค่อยเอาไป Lookup ทำเป็นคำแปลต่อไป

    =IF(INDEX($A$6:$S$24,MATCH(B3,$A$6:$S$6,0),MATCH(B4,$A$6:$A$24,0))=""," ",INDEX($A$6:$S$24,MATCH(B3,$A$6:$S$6,0),MATCH(B4,$A$6:$A$24,0)))
    • ใครอยากทำให้ไฟล์นี้เจ๋งขึ้นอีก ก็อาจทำ conditional format เพิ่มก็ได้
    • และจะเจ๋งสุดๆ ถ้าเอาไปผูกกับ Database Pokemon ทุกตัว เพราะจะได้เลือกได้เลยว่า ถ้าเอาตัว A ไปตีตัว B จะตีเข้าหรือไม่ 555
  • Excel ความเร็วแสง : ตอน VLOOKUP ความเร็วแสง

    Excel ความเร็วแสง : ตอน VLOOKUP ความเร็วแสง

    Excel ความเร็วแสง

    หากมนุษยชาติมีภารกิจจะต้องเดินทางไปยังดวงดาวในอวกาศอันไกลโพ้น… พวกเขาจะทำอย่างไร?

    เหล่านักบินอวกาศมีทางเลือกหลายทาง ตั้งแต่

    1. เดินทางไปเลย เตรียมเสบียงไปเต็มที่ กำลังใจมาเต็ม ซักวันคงเดินทางถึง!
    2. ตัดใจ ยอมแพ้กับภารกิจ อยู่บ้านเฉยๆ ดีกว่า
    3. พัฒนาวิธีเดินทางด้วยความเร็วแสงให้ได้!

    ถ้าทำได้ทุกคนคงอยากจะเลือก ข้อ 3 จริงมั้ยครับ?

    ในชีวิตของการใช้งาน Excel ก็เช่นกัน… หลายครั้งเราทำงานกับข้อมูลจำนวนมหาศาล
    เปรียบได้กับภารกิจการเดินทางอันแสนไกลของนักบินอวกาศ…
    เช่น ต้องใช้ VLOOKUP Map ข้อมูลที่มีหลายหมื่น หลายแสนบรรทัด คุณจะทำอย่างไร?

    1. นั่งรอไป ซักวันนึง เจ้า % Calculate จะกระดิกไปถึง 100% ในที่สุด พร้อมกับพลังในตัวของคุณที่หมดลง
    2. ไม่ยุ่งกับข้อมูลเยอะๆ เด็ดขาด
    3. เรียนรู้วิธีใช้เทคนิค Excel ความเร็วแสง!

    Excel ความเร็วแสง คือเทคนิคหลายอย่างที่ผมจะรวบรวมไว้เป็น series เรื่องการทำงานใน Excel ให้เร็วขึ้นโดยเฉพาะ

    แล้ววันนี้ผมจะนำเสนอเทคนิคเด็ด นั่นคือ วิธีการใช้ VLOOKUP ความเร็วแสงครับ ซึ่งแม้จะเคย Post เรื่อง VLOOKUP เร็ว 100 เท่า มาแล้ว แต่ขอเอามาขัดเกลาให้อ่านง่ายขึ้นอีกครั้ง อันนี้อ่าน 5-10 นาทีจบ ทำได้เลยแน่นอนครับ!

    เทคนิค VLOOKUP ความเร็วแสง

    เทคนิคในบทความนี้จะเน้นว่ากันด้วยวิธีปฏิบัติล้วนๆ ทฤษฎีใส่ให้บางๆ เท่านั้ย หากอยากเข้าใจที่มาที่ไปแบบละเอียด สามารถไปอ่านใน Post เก่าได้นะครับ

    เอาล่ะ จะ VLOOKUP ให้เร็วขึ้นทำได้ยังไง? ก่อนอื่น ต้องเข้าใจว่า VLOOKUP มี 2 แบบ คือ

    1. แบบ Approximate Match (เลือก Range Lookup เป็น TRUE หรือ 1) ซึ่งทำงานเร็วมาก และสามารถให้ผลลัพธ์ที่ไม่ตรงกับ Lookup_Value มาได้ด้วย ข้อควรระวังคือ คอลัมน์แรกของตารางอ้างอิงต้องเรียงจากน้อยไปมากเท่านั้น
    2. แบบ Exact Match (เลือก Range Lookup เป็น FALSE หรือ 0) ซึ่งทำงานช้ามาก แต่ให้ผลลัพธ์แม่นยำ

    เรื่องของเรื่องคือ เวลาคนส่วนใหญ่ Map ข้อมูลแบบต้องให้ผลลัพธ์เป๊ะๆ ก็จะใช้แบบ Exact Match นี่แหละ (เพราะมันแม่น) แต่ผมจะบอกว่าถ้าข้อมูลมีเยอะมาก คุณควรใช้แบบ Approximate Match แทนครับ!

    หลักการคือ

    1. เรียงข้อมูลในตารางอ้างอิง ให้คอลัมน์แรก (ที่เอา Lookup Value ไปหา) เรียงจากน้อยไปมากก่อน (สำคัญสุดๆ!!!)
    2. เขียนสูตร VLOOKUP แบบ Approx. เพื่อดึงค่าคอลัมน์ที่ต้องการกลับมา
      • เขียนว่า =VLOOKUP(คำค้นหา,ตารางอ้างอิง,คอลัมน์ที่ต้องการ,TRUE)
        ผลลัพธ์จะคำนวณร็วมาก แต่บางบรรทัดจะผิด คือ ควรจะเป็น #N/A แต่ให้ค่าเกินมา
    3. เราแก้จุดผิด โดยการใช้ VLOOKUP แบบ Approx. ดึงค่าคอลัมน์แรกกลับมาเช็คกับ Lookup Value มาตรงกันหรือไม่?
      โดยใช้ IF มาช่วยเช็คว่าถ้าตรงกันแสดงว่าเป็นค่าที่เชื่อถือได้ ถ้าไม่ตรงกันแสดงว่าไม่ควรใช้  
      • เขียนดึงคอลัมน์แรก =VLOOKUP(คำค้นหา,ตารางอ้างอิง,1,TRUE)
      • เช็คว่าตรงกับ Lookup Value หรือไม่? ว่า =VLOOKUP(คำค้นหา,ตารางอ้างอิง,1,TRUE)=คำค้นหา
    4. ถ้าตรงเชื่อได้ ถ้าไม่ตรงเชื่อไม่ได้
      1. เชื่อได้ ต้องเอาค่าคอลัมน์ที่ต้องการกลับมา =VLOOKUP(คำค้นหา,ตารางอ้างอิง,คอลัมน์ที่ต้องการ,TRUE)
      2. เชื่อไม่ได้ ให้เป็น #N/A โดย =NA()

    สรุปสูตรสุดท้าย
    =IF(VLOOKUP(คำค้นหา,ตารางอ้างอิง,1,TRUE)=คำค้นหา,VLOOKUP(คำค้นหา,ตารางอ้างอิง,คอลัมน์ที่ต้องการ,TRUE),NA())

    ตัวอย่าง

    vlookup100x

    ในช่อง B11 ผมเขียนสูตรได้ว่า

    =IF(VLOOKUP(คำค้นหา,ตารางอ้างอิง,1,TRUE)=คำค้นหา,VLOOKUP(คำค้นหา,ตารางอ้างอิง,คอลัมน์ที่ต้องการ,TRUE),NA())

    =IF(VLOOKUP(A11,$A$1:$B$6,1,TRUE)=A11,VLOOKUP(A11,$A$1:$B$6,2,TRUE),NA())

    จะได้ผลลัพธ์เป็น สมกอตต์ ถูกต้องครับ! และถ้าเป็น B10 ก็จะต้อง #N/A ถูกต้อง เช่นกัน เพราะไม่มีค่า p002x ในตารางอ้างอิง

    ก่อนจากกัน

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

    Warp !!

  • สอนการทำ Dynamic Range ด้วย Table

    สอนการทำ Dynamic Range ด้วย Table

    อะไรคือ Dynamic Range?

    Dynamic Range มันก็คือการทำให้ Range มีความสามารถในการ “ยืดได้หดได้” ตามสถานการณ์ที่เหมาะสม
     
    เช่น พอเราใส่ข้อมูลเพิ่มปุ๊ป Dropdown List ที่สร้างไว้ก็รู้จักข้อมูลที่เรากรอกเลย หรือ แม้แต่สามารถให้ User เลือกข้อมูลที่จะแสดงผลบบนกราฟได้
     
    ซึ่งจริงๆ แล้วการทำ Dynamic Range นั้น มีวิธีการทำอยู่ 2 แนวทางหลักๆ เลย ก็คือ
    1.แนวทางการใช้เครื่องมือ Table กับ 2.แนวทางการเขียนสูตร
     
    ซึ่งในบทความนี้เราจะมาเรียนรู้การทำ Dynamic Range ด้วย Table ซึ่งเป็นวิธีที่ง่ายที่สุดกันก่อนครับ 

    การทำ Dynamic Range ด้วย Table

    เครื่องมือ Table (ไม่ใช่ Data Table ที่เรียนผ่านไปแล้วนะ) สามารถสร้าง Dynamic Range ได้แบบง่ายๆ ภายในพริบตา

    สมมติ ผมมี Range อยู่ แล้วผม convert เป็น Table ก่อน โดยกด Ctrl+T แล้วติ๊ก My Table has header ด้วย จะได้แบบนี้

    01 02

    หากผมเอาไปสร้างกราฟแท่งธรรมดาๆ เลย ขอแบบเร็วๆ
    ผมขอ กดปุ่ม F11 เลย จะได้กราฟแบบนี้ (ซึ่งจะเห็นว่ามีข้อมูล 4 แท่ง)

    03

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

    04

    พอเรากลับมาดูกราฟ ก็จะเห็นว่ามีข้อมูลใหม่ถูกเพิ่มมาโดยอัตโนมัติ

    05

    นี่แหละครับคือความเป็น Dynamic Range แบบง่ายๆ ซึ่งสามารถนำไปประยุกต์กับการเลือก Data Source ของ PivotTable ได้ด้วย ซึ่งจะช่วยให้ไม่ต้องมาเลือก Source Data ใหม่ และไม่ต้องเลือกทั้งคอลัมน์เผื่อไว้ก่อน (ถ้าเลือกเผื่อไว้ก่อนจะกด Group Data แบบอัตโนมัติไม่ได้)

    Dynamic Dropdown List

    อีกตัวอย่างหนึ่งคือการทำ Dynamic Dropdown List เช่น จาก Table ก่อนหน้านี้ ผมจะเอาชื่อทีมมาเป็น Dropdown ให้เลือก

    ซึ่งผมสามารถอ้างอิงรายการในทีมได้โดยเขียนสูตร = แล้วไปจิ้มตรงหัวคอลัมน์ จะได้ว่า =Table1[ทีม]

    06

    ผมก็เอาสูตรที่ได้เนี่ยแหละ ไปใส่ใน Data Validation List เลย แต่ปรากฏว่า Excel ไม่ยอม!

    แต่อย่ายอมแพ้ครับ มันมีวิธีแก้เล็กน้อย โดยการใช้ Defined Name มาช่วยนั่นเอง

    วิธีการคือ เอาสูตรที่ได้ไปตั้งชื่อก่อนครับ แล้วค่อยเอาชื่อนั้นไปใส่ใสน Data Validation อีกทีหนึ่ง

    07

    ใส่ใน Data Validation ได้เลย

    08

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

    09

    เราได้เรียนรู้การทำ Dynamic Range ด้วย Table ไปแล้ว ซึ่งจะเห็นว่ามันทำได้ง่ายมากๆ แต่ผมจะบอกว่าเราต้องเรียนรู้วิธีอื่นเอาไว้ด้วย เพราะ Table อย่างเดียวก็ไม่ตอบโจทย์ในบางสถานการณ์

    เช่น ถ้ามี Table อยู่ในไฟล์ เราจะใช้เครื่องมือ Custom View ไม่ได้ หรือ บางทีเราต้องการทำ Dynamic Range ที่ซับซ้อนมากขึ้น เช่น แสดงยอดขาย 6 เดือนล่าสุดไปเรื่อยๆ แบบนี้จะต้องใช้สูตรแทนการใช่ Table แล้วครับ ซึ่งใครอยากรู้ รออ่านได้ในหนังสือเล่ม 2 นะครับ ^^

  • 4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง

    รู้หรือไม่ว่าเราสามารถสร้าง PivotTable จากข้อมูลหลายตารางได้! ในบทความนี้เราจะมาดูกันว่าทำยังไง?

    การทำ PivotTable จากหลายตารางนั้น ทำได้หลายวิธี แต่ละวิธีก็มีข้อดีข้อเสีย-ข้อจำกัดต่างกันดังนี้ครับ มาดูรายละเอียดกันดีกว่า

    วิธีที่ 1 : ใช้ Data Model & PowerPivot

    วิธีนี้เป็นการสร้าง PivotTable จากข้อมูลหลายตารางที่มีความสัมพันธ์กัน (เรียกว่า Data Model) ซึ่งเป็น Concept เดียวกับโปรแกรม Power BI เลยครับ หากใช้วิธีนี้เราก็จะสามารถสร้าง Pivot Table แล้วเลือก Field ข้ามตารางได้ โดยที่ไม่จำเป็นต้องเอาข้อมูลมารวมเป็นตารางเดียวกันเลยด้วยซ้ำ

    อย่างไรก็ตามวิธีนี้จะไม่สามารถเอาตารางมาต่อแถวกันได้นะครับ

    นอกจานี้ วิธีนี้ต้องใช้ Excel version 2013 ขึ้นไปครับ และถ้าจะให้ดีควรจะ Enable Add-in Power Pivot ซะก่อนจึงจะใช้งานได้สะดวก ซึ่งทำตามดังนี้

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 1

    แล้วเลือก PowerPivot Add-in ซะตามรูป

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 2

    จากนั้นเราจะต้องเอาตารางแต่ละอัน Add เข้า Data Model ซะก่อน เช่น มีทั้งหมด 3 ตาราง เช่น
    1. ตารางการขาย 2. ตารางรหัสพนักงาน 3. ตารางลูกค้า

    เราต้องเอาตารางเข้า Data Model โดยเลือกข้อมูล แล้วแปลงแต่ละตารางให้เป็น Table โดย Insert -> Table ซะก่อน แล้วค่อยกด Add To Data Model

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 3

    จากนั้นมันจะเอาข้อมูลเข้าสู่หน้าต่างของ PowerPivot

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 4

    จากนั้นให้กด Switch to workbook เพื่อกลับออกมาใน Excel แล้วกด Add To Data Model ให้ครบทุกตารางที่มีความสัมพันธ์กัน

    พอ add เข้าไปหลายตาราง ในหน้า Power Pivot จะมีหลายชีทด้วย

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 5

    จากนั้นให้กดดู Diagram View เพื่อผูกความสัมพันธ์ตารางต่างๆ เข้าด้วยกัน

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 6

    เราจะเห็นตารางแยกกันอยู่ ให้เรากำหนด Relationship โดยลากเส้นเชื่อมว่า field ไหนคือตัวที่เชื่อมความสัมพันธ์ระหว่างแต่ละตารางเข้าด้วยกัน (จะลากจากไหนไปไหนก็ได้)

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 7

    ทำให้ครบจะได้แบบนี้ จากนั้นก็กดสร้าง PivotTable ได้แล้ว

    สร้าง PivotTable จากข้อมูลหลายตาราง

    เราก็จะสามารถใช้ PivotTable Model Data Model แล้วยังสามารถลาก Field ข้ามตารางได้เลย โดยไม่ต้องเอาข้อมูลมารวมกันเป็นตารางเดียวกันอีก

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 8

    สำหรับรายละเอียดว่า Concept ของ Data Model ทำงานยังไง ให้ไปอ่านใน Series Power BI ได้ครับ

    หมายเหตุ : นอกจากวิธีนี้ เรายังกดสร้าง PivotTable โดยใช้ Data Model แบบไม่เปิด PowerPivot ก็ได้ โดยกดสร้าง PivotTable จากตารางโดยตรง แล้วติ๊ก Add to Data Model

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 9

    แต่ข้อเสียของวิธีนี้ก็คือการกำหนด Relationship จะทำยากกว่า (เพราะไม่เห็นภาพ) โดยต้องใช้เมนูนี้

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 10

    วิธีที่ 2 : ใช้ Power Query (เหมาะกับ Excel 2013 ขึ้นไป)

    Pivot Table จากหลายตาราง

    การใช้ Power Query นั้นสามารถทำได้ 2 ลักษณะ คือ

    2.1 เตรียมตารางแยกหลายๆ ตารางที่มีความสัมพันธ์กัน แล้วส่งเข้าสู่ Data Model

    ถ้าใช้แบบนี้ ก็เป็นการใช้ Power Query แค่จัดหน้าตาข้อมูลให้เหมาะสมเท่านั้น เพิ่มเติมแค่ตอนกด Close & Load To… ให้เลือกเป็น Connection Only (เพราะเราจะไม่ Load ผลลัพธ์ออกมาใน Excel ปกติ) แต่ให้ติ๊กเลือกว่า Add to Data Model เพื่อให้มันส่งผลลัพธ์เข้า Data Model เท่านั้นเอง

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 11

    2.2 รวมข้อมูลทั้งหมดให้อยู่ในตารางเดียวกันก่อน แล้วค่อยส่งเข้า Pivot Table แบบปกติ

    คำว่ารวมให้อยู่ในตารางเดียว จริงๆ แล้วก็มี 2 แบบใหญ่ๆ นั่นคือ รวมคอลัมน์ กับ รวมแถว

    • การรวมข้อมูลหลายๆ ตารางมาต่อแถวกัน (คล้ายการที่เรา Copy Paste ) เรียกว่า Append
    • การรวมข้อมูลหลายๆ ตารางมารวมคอลัมน์กัน (คล้ายๆ กับใช้ VLOOKUP) เรียกว่า Merge

    จากนั้นค่อยส่งผลลัพธ์ที่รวมตารางเสร็จแล้วเข้าสู่ Pivot Table อีกทีครับ

    Append เพื่อรวมตารางแบบเพิ่มแถว

    วิธี Append ก็ให้สร้าง Query 2 ตารางขึ้นมาก่อน ตารางไหนยังไม่เอาผลลัพธ์ออกมาก็ทำแบบ Connection Only ไว้ เช่น อาจทำให้เป็น Connection Only ทั้งคู่เลย แล้วกดคลิ๊กขวาที่ Query ตัวแรก แล้วเลือก Append กับ Query ตัวอื่นๆ

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 12
    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 13

    แล้วเราก็จะได้ Query ใหม่ ที่เป็นผลลัพธ์จากการ Append 2 ตารางเข้าด้วยกัน (เอามาต่อแถวกัน)

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 14

    จากนั้นก็เอาผลลัพธ์ออกไปใช้ใน Pivot Table ได้

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 15

    ถ้ามีหลายตารางที่มีความสัมพันธ์กันจะติ๊ก Add this Data to the Data Model ด้วยก็ได้

    Merge เพื่อรวมตารางแบบเพิ่มคอลัมน์

    การจะ Merge ก็ให้สร้าง Query 2 ตารางขึ้นมาก่อน ตารางไหนยังไม่เอาผลลัพธ์ออกมาก็ทำแบบ Connection Only ไว้

    จากนั้นกดที่ Query แรกแล้วคลิ๊กขวาเลือก Merge กับ Query ตัวที่สอง ที่สำคัญคือต้องเลือกด้วยว่าคอลัมน์ไหนคือตัวเชื่อมกัน และเลือก JoinKind ด้วย ซึ่งปกติก็จะเป็น Left Outer Join แบบนี้แหละ ok ได้เลย

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 16

    ผลลัพธ์จะออกมาเป็น Table ก่อน

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 17

    ให้เราคลิ๊กที่มุมขวาบนของคอลัมน์เพื่อ Expand เอาข้อมูลออกมา

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 18

    แล้วเราก็จะได้ผลลัพธ์คล้ายๆ กับ VLOOKUP เลย (แต่ถ้าตารางอ้างอิงมีหลายบรรทัด มันจะมาทุกบรรทัดนะ ต่างจาก VLOOKUP ที่จะมาแค่อันบนสุด)

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 19

    จากนั้นก็ Load เอาผลลัพธ์เข้า Pivot Table ได้เลย

    4 วิธีสร้าง PivotTable จากข้อมูลหลายตาราง 20

    วิธีที่ 3 : ใช้ Microsoft Query

    วิธีสร้าง PivotTable จากข้อมูลหลายตารางด้วย Microsoft Query เหมาะกับคนที่ไม่มี Power Query ให้ใช้ เช่นคนที่มี Excel Version เก่ามากๆ นั่นเองครับ

    วิธีการทำมีดังนี้

    1. เรียกใช้ Microsoft Query โดยไปที่ Data => Get External Data => From Other Source => From Microsoft Query (Excel Version ใหม่จะไม่มีเมนูนี้แล้ว)
    2. ดับเบิ้ลคลิ๊กที่ Excel File* แล้วเลือกไฟล์ Excel ที่ต้องการ
      • ปกติเลือกไฟล์ที่ทำงานอยู่ก็ได้ แต่ถ้าใครกดไม่ได้ให้เปิดจากไฟล์อื่น)
      • ถ้ามี Error บอกว่าหา Table ไม่เจอ ให้เลือก Option แล้วติ๊ก System Table ด้วย
        table-option
    3. เลือก Table ซักอัน แล้วกด > เพื่อ Add Field (ในที่นี้ของผมมีปัญหากับ field ภาษาไทย ผมเลยต้องเปลี่ยนชื่อ Field เป็นภาษาอังกฤษ)
      Microsoft Query-01
    4. กด Next ไปจนหน้าสุดท้าย ให้เปลี่ยนเป็นเลือกดู Query ก่อน
      Microsoft Query-02
    5. กด SQL แล้วแก้ Code ให้เป็นดังนี้
      SELECT *
      FROM ‘pathของไฟล์’.’ชื่อชีทแรก(ตามที่มันแสดง)’ ‘ชื่อชีทแรก(ตามที่มันแสดง)’
      UNION ALL
      SELECT *
      FROM ‘pathของไฟล์’.’ชื่อชีทสอง(ตามที่มันแสดง)’ ‘ชื่อชีทสอง(ตามที่มันแสดง)’
      Microsoft Query-03
    6. ของผมจะได้เป็นแบบนี้
      SELECT *
      FROM ‘D:\INWEXCEL\PIVOT\multiple-pivot-data2.xlsx’.’Month1$’ ‘Month1$’
      UNION ALL
      SELECT *
      FROM ‘D:\INWEXCEL\PIVOT\multiple-pivot-data2.xlsx’.’Month2$’ ‘Month2$’
    7. แล้วกด OK แล้วมันจะบอกว่าไม่สามารถแสดงผลได้นะ ให้ OK อีกที
    8. จากนั้นไปที่ file => return data to excel
      Microsoft Query-04
    9. เลือกให้ส่งเข้า PivotTable ไปเลยก็ได้ (ถ้าเลือกเป็น Table มันจะออกมาเป็นตารางก่อน)
      Microsoft Query-05
    10. จากนั้นก็หมุน PivotTable ทุกอย่างได้ตามปกติ
      Microsoft Query-06

    วิธีการใช้ Microsoft Query นี้ สามารถนำมาประยุกต์ได้เยอะแยะ เช่น มี 2 ตารางแยกกันอยู่ อยากเอามาผูกกันโดยไม่ต้องใช้ VLOOKUP ก็ยังได้เลยครับ โดยมีทั้งแบบลากเส้นเชื่อมเองใน Editor หรือจะเขียน SQL เอง ก็ได้ (ภาษา SQL ทำได้แทบทุกอย่าง แต่อาจต้องศึกษาเยอะหน่อย)

    วิธีที่ 4 : ใช้ Multiple Consolidation Ranges (PivotTable Wizard เหมาะกับ Excel เก่า)

    วิธีสร้าง PivotTable จากข้อมูลหลายตารางด้วยตัวเลือก Multiple Consolidation Ranges ในคำสั่ง PivotTable Wizard เป็นวิธีที่มีข้อจำกัดมากที่สุด ผมจึงไม่แนะนำครับ แค่จะเอาให้ดูเฉยๆ ว่าในอดีตมันทำแบบนี้ได้

    วิธีทำแบบสั้นๆ

    กด Alt, D, P เพื่อเรียก PivotTable Wizard แล้วเลือก Multiple Consolidation Ranges
    consolidate-range

    เพื่อความง่ายเลือก Create a single page field for me ไปเลยก็ได้ครับ

    เลือก Range ที่ต้องการ แล้วกด Add โดยทำทีละ source พอเสร็จแล้วก็กด Next จนจบกระบวนการ
    select-range

    คุณจะได้ PivotTable หน้าตาประหลาดมา 1 อัน ดังนี้
    first-result2

    ผลลัพธ์ที่ได้ มีข้อจำกัดดังนี้ 

    • Field แรกใน Data Source ต้องมาเป็น Row Item Label เสมอ
    • Field ที่เหลืออันอื่นจะมาอยู่ใน Column Label เสมอ (มาเป็นชุดถ้าเอาออกต้องเอาออกหมดเลย)
    • การสรุปผล เช่น SUM, COUNT เปลี่ยนได้ แต่เปลี่ยนแล้วเท่ากับเปลี่ยนให้กับทุก Field เลย ไม่สามารถทำให้แต่ละ Field ไม่เหมือนกันได้
    • Field Page 1 แค่เป็นตัว Filter เลือกแต่ละ Data Source เฉยๆ เอาออกก็ได้

    วิธีปรับแต่ง Data Source เพื่อทำให้แสดงผลดีขึ้นภายใต้ข้อจำกัดที่มี

    • เอา Item ที่ต้องการไว้เป็น Row Item Label ไว้ Field แรกเสมอ
    • ย้าย Field ที่ไม่ต้องการไปทางขวาๆ แล้วตอนเลือก Range ไม่ต้องเลือกมัน

    ผมลองทำแล้ว ก็พอจะได้ผลลัพธ์ที่ ok ขึ้น ดังนี้ (ผมแยกแต่ละชีทเป็นคนละเดือน ดังนั้นเลยเอา Page1 มาใส่เป็นเดือนได้)
    first-result3

    สรุปแล้วจะเห็นว่าวิธี Multiple Consolidation Ranges นั้นมีข้อจำกัดมากเลยนะครับ เห็นมะ อย่าใช้เลย 555

    เพื่อนๆ ชอบแบบไหน หรือผสมแบบไหนดี?

    ส่วนตัวผมชอบใช้ Power Query จัดข้อมูลให้เรียบร้อยก่อน แล้วค่อยส่งเข้า Data Model ไปทำต่อครับ พูดง่ายๆ คือ Step เหมือน Power BI เป๊ะเลย

    เพื่อนๆ ชอบแบบไหนกันบ้างครับ อย่าลืม Comment บอกด้วยนะ

  • เทคนิคการใช้ Mail Merge ดึงข้อมูลจาก Excel โปรยลงแบบฟอร์มใน Word

    เทคนิคการใช้ Mail Merge ดึงข้อมูลจาก Excel โปรยลงแบบฟอร์มใน Word

    จากที่ผมได้ post ใน Fanpage ไปว่า “มีใครอยากรู้เรื่องเทคนิคการใช้เครื่องมือ Mail Merge เพื่อดึงข้อมูลจาก Excel ไปโปรยลงแบบฟอร์มใน Microsoft Word มั้ยครับ? (แล้วเราก็ Print เอกสารออกมาหลายๆ ชุดได้ เช่น Print ใบแจ้งหนี้/ใบเสร็จให้ลูกค้า)”

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

    ต้องบอกก่อนว่า เทคนิคนี้เป็นเครื่องมือใน Microsoft Word แต่ผมไม่ใช่ผู้เชี่ยวชาญ Word ดังนั้น หากใครเห็นว่ามีวิธีที่ดีกว่าที่ผมแนะนำ ก็สามารถบอกมาเป็นวิทยาทานให้ผมและคนอื่นๆ ได้รู้ด้วยนะครับ

    เอาล่ะ เกริ่นมามากแล้ว เพื่อไม่ให้เสียเวลา เราไปดูกันเลย เอาเป็นว่าวันนี้ inwexcel ขอพูดเรื่อง Word บ้างล่ะ 555

    Mail Merge คืออะไร?

    Mail Merge คือความสามารถหนึ่งของ Microsoft Word ที่สามารถดึงข้อมูลจาก Database ต่างๆ (รวมถึงข้อมูลใน Excel) ที่มีข้อมูลหลายๆ Record (บรรทัด)  มาโปรยลงแบบฟอร์มที่ได้เตรียมเอาไว้ใน Microsoft Word ได้ ซึ่งเราสามารถเอามาประยุกต์ทำเรื่องต่างๆ ได้มากมาย โดยมี Concept ดังนี้

    mail merge
    • ทำใบแจ้งหนี้/ใบเสร็จให้ลูกค้า/สัญญา
      ซึ่งกรณีนี้ กระดาษ 1 ชุด ก็จะรองรับข้อมูลลูกค้า 1 Record ถ้ามีลูกค้าหลายคนในฐานข้อมูลก็สามารถ Print ทีเดียวออกมาเป็นสิบเป็นร้อยคนได้สบายๆ
    • ทำเป็น Label เพื่อติดจดหมายต่างๆ
      ซึ่งในกรณีหลัง กระดาษ 1 ใบ ก็จะสามารถมีข้อมูลหลาย record รวมกันได้

    Mail Merge ดียังไง?

    การใช้ Mail Merge เป็นการเสริมจุดแข็ง และปิดจุดอ่อนของ Word ได้เป็นอย่างดี

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

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

    วิธีการใช้ Mail Merge

    มี 3 ขั้นตอนใหญ่ๆ

    1. เตรียมแบบฟอร์มใน Word
    2. เตรียมฐานข้อมูล ให้มีข้อมูลเพียงพอกับฟอร์ม
    3. ใช้ Mail Merge เพิ่ม Field ลงบนแบบฟอร์มใน Word
    4. กดดูตัวอย่าง
    5. ปรับแต่ง ถ้าจำเป็น

    เรามาดูขั้นแรกกัน

    1. เตรียมแบบฟอร์มใน Word

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

    form-draft

    2. เตรียมฐานข้อมูล ให้มีข้อมูลเพียงพอกับฟอร์ม

    ต่อมา ผมก็ไปเตรียมฐานข้อมูลใน Excel ให้มีข้อมูลที่น่าจะเพียงพอกับฟอร์มของผม สมมติว่าได้แบบนี้ แล้ว Save เก็บไว้

    database

    3. ใช้ Mail Merge เพิ่ม Field ลงบนแบบฟอร์มใน Word

    ต่อมา ผมก็ต้องใช้ Mail Merge เพิ่ม Field ที่ต้องการลงในแต่ละส่วนของแบบฟอร์ม โดยไปที่ Word ที่เตรียมไว้แล้วไปที่ Ribbon [Mailings] –> Start Mail Merge

    จากนั้นมันจะให้เลือก Document Type ซึ่งแต่ละอันต่างกันดังนี้

    • Letters : ลักษณะคล้ายๆจดหมาย ที่แต่ละคนข้อความจะไม่เหมือนกันได้ (เพื่อ Print)
    • E-mail Messages : คล้ายข้างบน แต่เป็นเพื่อส่ง E-Mail แทน
    • Envelops : ทำซองจดหมาย (Template ที่มีจะเป็น Size จดหมาย)
    • Labels : ทำ Label (1 หน้ามีหลายราย เช่น เป็น Sticker เอาไว้แปะ Template ที่มีจะเป็น Size Label)
    • Directory : เป็นลักษณะ list คล้ายๆ ตาราง (1 หน้ามีหลายราย)
    • Step by Step : เป็น Wizard ช่วยนำทางให้เรา แต่ผมว่ามันไม่ได้เข้าใจง่ายขึ้นเลย
    start-mail-merge

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

    จากนั้นให้เลือก Database เพื่อเชื่อมข้อมูล โดยไปที่ Select Recipients แล้ว Use an Existing List

    select-list

    จากนั้น เลือกไฟล์ Excel ที่เตรียมไว้ แล้วเลือก Sheet ให้ถูกต้อง

    จากนั้นให้ Highlight ข้อความส่วนที่ต้องการจะ Link กับ Database แล้วเลือก Insert Merge Field แล้วเลือก field ที่ต้องการเชื่อมต่อด้วย

    insert-merge-field

    มันจะมีสัญลักษณ์ <<ชื่อ field >> ขึ้นมาแทน นั่นแปลว่า มันกำลัง Link กับ Field นั้นแล้ว

    insert-merge-field2-fix

    ทำให้ครบทุก Field สุดท้ายจะได้แบบนี้

    insert-merge-field3

    ถ้าลองกด Highlight Merge Field ดูจะเห็นชัดขึ้น

    insert-merge-field4

    4. กดดูตัวอย่าง

    ทีนี้ลองทดสอบดูว่าข้อมูลมามั้ย? โดยไปที่ Preview Results

    preview-result

    และถ้ากดปุ่ม Next มันก็ควรจะดึงข้อมูล record ถัดไปมาให้

    preview-result2

    ถ้าเป็นแบบนี้ แสดงว่าการเชื่อมต่อข้อมูลน่าจะถูกต้องแล้วล่ะ

    5. ปรับแต่งถ้าจำเป็น

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

    1. ผมต้องการแสดงวันที่ในรูปแบบ 31 พฤษภาคม พ.ศ. 2559 แทน
    2. ผมต้องการแสดงราคาตัวเลขมีทศนิยม 2 ตำแหน่ง
    3. ผมต้องการแสดงราคาบาทเป็นข้อความภาษาไทยด้วย

    วิธีแก้ 3 ประเด็นนี้ จริงๆ แล้วบางอันทำใน Word ก็ได้ โดยการกำหนด Format ใน Field Code

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

    แต่ถ้าหากผมลองเปลี่ยน Number Format ใน Excel ให้เป็นแบบที่ต้องการ เช่น เป็นวันที่แบบเต็ม และราคามีจุดทศนิยม

    เวลาเข้ามาคลิ๊ก Next / Previous ดูใน Word ก็ยังคงแสดงวันที่และเลขตามปกติอยู่ดี เพราะมันเอาค่าแบบ General ไปแสดงเท่านั้น (ถ้าลองเปลี่ยนค่าไปเลยมันจะเปลี่ยนตามแล้ว แต่ Format ไม่เปลี่ยนตาม)

    database2

    เคล็ดลับระดับเทพ

    ดังนั้น วิธีที่ผมแนะนำ เพราะสำหรับผมมันง่ายสุดแล้ว คือ

    ผมจะเตรียมให้ข้อมูลทุกอย่างใน Excel ให้อยู่ในรปแบบที่ผมต้องการโดยต้องเป็น Text ทั้งหมด แล้วค่อยส่งไปแสดงผลตรงๆใน Word โดยที่ใน Word ไม่ต้องมีการกำหนด Format อะไรอีกเลย

    Key สำคัญคือต้องทำให้เป็น Text ให้หมด อะไรที่เดิมเป็นตัวเลขและวันที่ ผมจะใช้ฟังก์ชั่น TEXT มาช่วย เพื่อแปลงให้มันอยู่ในรูปแบบที่ผมต้องการเลย ซึ่งเราจะต้องรู้ว่าต้องระบุ Custom Format ยังไง

    แต่ก็ไม่ใช่เรื่องยากอย่างที่คิด เพราะเราสามารถเลือก Standard Format แบบที่ต้องการก่อน แล้วค่อยไปเลือก Custom Format เพื่อดู Code ที่จะต้องใช้อีกทีก็ได้

    เช่น จากวันที่ 31 มีนาคม 2559 พอไปเลือก Custom จะเห็นว่าเป็น Code [$-th-TH,107]d mmmm yyyy;@ ก็เอาไปใช้ในฟังก์ชั่น TEXT ได้เลย เช่น

    custom-format

    ผมก็เอาไปใช้กับฟังก์ชั่น Text ดังนี้
    =TEXT(B6,”[$-th-TH,107]d mmmm yyyy;@”)
    ซึ่งจะทำให้ field วันที่-new เป็นข้อความจริงๆ ไม่ใช่ตัวเลขแล้ว

    database3

    ทีนี้กลับไปใน Word ผมก็ต้อง link Field ใหม่แทนอันเดิม แต่ผมต้องไป Select Recipient ใหม่ด้วย เพื่อให้มันเห็น Field ใหม่ที่เราเพิ่งเพิ่มเข้าไปก่อน

    insert-merge-field5

    แล้วก็กด Preview ดู ทุกอย่างก็ออกมาในรูปแบบที่ได้ดั่งใจ โดยที่เราไม่ต้องรู้เรื่อง Field Code ใน Word เลยแม้แต่น้อย!

    preview-result3

    คราวนี้เวลาจะ Print เพื่อจบงาน ก็ให้ไปที่ Finish & Merge แล้วเลือก Print Documents ได้เลยครับ แล้วมันจะให้เลือกว่าจะ Print Record ไหนบ้าง (ปกติก็ All ได้เลย)

    print

    เพียงเท่านี้คุณก็สามารถสร้างใบเสร็จรับเงินให้ลูกค้านับสิบนับร้อยได้อย่างสบายๆ ครับ

    แล้วถ้าอยากทำพวก Label ต้องทำไง?

    จริงๆ แล้ว Label ก็จะคล้ายกับการทำ Letters ครับ เพีงแต่จะมีการใส่ Field ลงไปหลายชุดซ้ำๆ กันลงในตารางที่เตรียมไว้

    แต่ Key หลัก คือ จะมีการระบุ Code <<Next Record>> เพื่อบ่งบอกว่า ส่วนต่อจากคำนั้น จะต้องดึงข้อมูลจาก Record ถัดไปแล้ว (แม้จะยังอยู่หน้าเดิม)  โดยสามารถระบุเองได้โดยไปที่ Rules -> Next Record ครับ

    และนี่คือตัวอย่างที่ผมใช้ Label มา Print เวลามีคนสั่งซื้อหนังสือจากผมครับ

    label

    จะเห็นว่าการใช้ Mail Merge นั้นไม่ได้ยากมากอย่างที่คิด หากคุณจัดการ Format ใน Excel ให้เรียบร้อย การส่งมาพิมพ์ใน Word ก็จะหมูมากๆ ครับ

  • 7 ข้อควรระวังใน Excel ที่คุณอาจเผลอทำผิดโดยไม่รู้ตัว!

    รู้หรือไม่ว่า บางเรื่องแม้ดูเหมือนง่าย และน่าจะเป็นไปตาม Common Sense ของเรา ในความเป็นจริง Excel อาจไม่ได้ทำงานแบบที่เราคิดก็ได้ จนในที่สุดก็ทำให้เกิดความผิดพลาดได้…

    ผมจึงอยากจะแบ่งปันข้อควรระวังในการใช้ Excel ไว้ให้ดี เพื่อที่ว่าเวลาเราใช้ Excel ทำงานจะได้ไม่ทำผิดกัน

    หลายๆ เรื่องในนี้ผมเคยสรุปไว้ให้ในหนังสือ Excel Level Up! ไปแล้ว (บางเรื่องก็ยังไม่เคยพูด) ก็เลยขอนำมาพูดสรุปให้อีกทีแล้วกันครับ ^^

    เรื่องที่ 1 : ตัวพิมพ์ใหญ่ = ตัวพิมพ์เล็ก

    strange01fix

    เรื่องนี้หลายคนอาจไม่ได้สังเกต เพราะดูเป็นเรื่องง่ายๆ แค่ใช้เครื่องหมายเท่ากับ ซึ่งตามหลัก Common Sense แล้ว เครื่องหมายเท่ากับก็เอาไว้เช็คว่าสองช่องมันเท่ากันรึเปล่า… ไม่ใช่เหรอไง?

    แต่คำว่าเท่ากันของ Excel มันกลับมองว่าตัวพิมพ์ใหญ่ตัวพิมพ์เล็กไม่มีผลครับ ดังนั้นมันจึงมองคำว่า Dog และ dog ว่าเท่ากันด้วยเครื่องหมายเท่ากับซะงั้น! (ตามรูปให้ผลเป็น TRUE)

    ทางแก้ หากเราต้องการเช็คว่ามันท่ากันเป๊ะๆ รึเปล่า แบบสนใจตัวพิมพ์เล็กพิมพ์ใหญ่ด้วย เราต้องใช้ฟังก์ชั่น EXACT มาช่วยครับ ซึ่งตามรูปจะได้ผลเป็น FALSE

    เรื่องที่ 2 : เมื่อ 50 อาจไม่เท่ากับ 50

    strange02fix

    บางทีสิ่งที่เราเห็น อาจไม่ใช่สิ่งที่เป็นจริง เลข 50 เหมือนกันแท้ๆ กลับสามารถให้ผลลัพธ์เป็น FALSE ซึ่งบ่งบอกว่าไม่เท่ากันได้ด้วย

    สาเหตุมาจากทั้งสองช่องนี้มีประเภทของข้อมูลที่ต่างกันนั่นเอง ซึ่งวิธีเช็คประเภทของข้อมูลที่ดีที่สุดคือใช้ฟังก์ชั่น TYPE มาช่วยเช็คครับ

    เรื่องที่ 3 : ฟังก์ชั่น NPV ห้ามใส่ Cashflow ปีที่0

    หลายๆ คนที่เคยผ่านวิชาทางด้านการเงินมา น่าจะคุ้นๆ กับคำศัพธ์ที่มีชื่อเท่ๆว่า NPV (Net Present Value) มาบ้างแล้วล่ะ แต่สำหรับคนที่ไม่รู้จัก ผมก็อยากจะลองแนะนำให้ไปศึกษาดูนะครับ เพราะมันเป็นตัวสามารถช่วยบอกได้ว่าโปรเจคหรือการลงทุนที่เรากำลังสนใจนั้น น่าลงทุนหรือไม่? ซึ่งมีประโยชน์มั่กๆ

    โดยวิธีการตีความคือ ถ้า NPV มีค่ามากกว่า 0 ถือว่าน่าสนใจ (ภายใต้ Discount Rate หรืออัตราค่าเสียโอกาสของเงินที่กำหนด) แต่ประเด็นไม่ใช่ตรงนี้ครับ

    strange03

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

    เรื่องที่ 4 : WORKDAY + NETWORKDAYS <> End Date

    strange04

    คราวนี้เป็นเรื่องของฟังก์ชั่นเกี่ยวกับวันที่บ้างครับ ซึ่งมีฟังก์ชั่น 2 ตัวที่ทำหน้าที่เกี่ยวกับเรื่องจำนวนวันทำงาน โดยมันทั้ง 2 ทำงานเหมือนเป็นพี่น้องกัน คือ

    • NETWORKDAYS ใช้เมื่อรู้วันเริ่ม และ รู้วันจบ อยากหาจำนวนวันทำการ
    • WORKDAY ใช้เมื่อรู้วันเริ่ม และระยะเวลาวันทำการ เอาไว้หาวันจบ

    แต่ที่แปลกคือ ถ้าลองเอา WORKDAY มาใช้วันเริ่มเดียวกันกับ NETWORKDAYS แต่บวกจำนวนวันทำการที่ได้จาก NETWORKDAYS เข้าไป มันกลับได้วันจบเป็นคนละวันกันซะงั้น!

    สาเหตุเพราะว่า ไอ้ฟังก์ชั่น 2 ตัวนี้ ดันมีเกณฑ์การนับวันไม่เหมือนกัน โดย NETWORKDAYS จะนับวันเริ่มด้วยเสมอ ส่วน WORKDAY ไม่นับวันเริ่มนั่นเอง

    เรื่องที่ 5 : ระวัง Calculated Field ใน Grand Total ของ PivotTable ให้ดี

    สมมติว่าผมอยากคำนวณค่า Commission 10% ของยอดขาย โดยมีเงื่อนไขว่าต้องทำยอดขายรวมทุกสินค้าได้มากกว่า 3000 บาท จึงจะได้รับเงินนี้ไป

    หากผมใช้ Calculated Field ใน PivotTable ผมสามารถใส่สูตร IF ซ้อนลงไปได้ว่า เอาา ถ้าบอดขายมากกว่า 3000 ก็ให้เอายอดขายไปคูณ 10% นะ ไม่งั้นก็ให้เป็น 0 ไป

    strange06-1

    สิ่งที่ออกมานั้นดูดีเลยครับ คือ Sales ง ที่ยอดขายไม่เกิน 3000 ก็อด Commission ไป แต่สิ่งที่แปลกสุดๆ คือ เจ้า Grand Total ของ Commission มันดันให้ค่าที่ผิดพลาด โดยได้ค่าไม่เท่ากับผลรวมของ Commission ของ Sales ทุกคน

    สาเหตุเพราะเวลาที่ Excel คำนวณ มันดันเอาค่ายอดขาย Grand Total ไปใส่ใน IF แล้วเทียบว่าเกิน 3000 เลยเอา 10% ไปคูณตรงๆ ซะงั้น!! ผิดไปเลยครับแบบนี้

    strange06-2

    วิธีแก้ของเรื่องนี้ คือ อย่าไปสนใจ Grand Total … แต่ถ้าทำไม่ได้ ก็ต้องไปใช้วิธีอื่นแทน เช่น เขียนสูตรลงไปในตารางข้อมูลก่อนจะเอามา Pivot เลยก็ได้ โดยอาจใช้พวก SUMIFS มาช่วย เพื่อหายอดขายรวมราย Sales แต่ละคนให้ได้ว่าเกิน 3000 หรือไม่ เป็นต้น

    เรื่องที่ 6 : VLOOKUP พัง!

    ปัญหาเรื่อง VLOOKUP พังนี่เกิดได้จากหลายสาเหตุมากๆ ครับ ดังนี้

    สาเหตุที่มักพบบ่อย

    1. ประเภทข้อมูลของ Lookup Value กับ ค่าคอลัมน์แรกใน Table_Array ไม่ตรงกัน
      strange05-1
      ทางแก้คือ ต้องทำให้ประเภทข้อมูลตรงกัน ไม่แก้ที่ตารางอ้างอิง ก็ต้องแก้ที่ lookup_value ครับ
    2. ไม่ได้ Fix ตำแหน่งตารางอ้างอิง (Table_Array)
      strange05-2
    3. เผลอใช้โหมด Approximate Match แทน Exact Match โดยไม่ได้เจตนา
      (เพราะ Approximate Match คือโหมด Default ถ้าไม่ได้ระบุ Argument สุดท้ายให้เป็น 0 หรือ FALSE)
      strange05-3
      ทางแก้คือ ต้องฝึกใส่ Argument สุดท้ายให้เป็นนิสัย และอย่าลืมสังเกตว่ามี #N/A ขึ้นมาบ้างมั้ย? ถ้าไม่มีเลยแสดงว่าน่าสงสัยละ 555
    4. มีการแทรกคอลัมน์ใน Table_Array หลังเขียนสูตร VLOOKUP ไปแล้ว
      strange05-4
      ตัวนี้มีทางแก้ที่ดีคือ ใช้ MATCH มาช่วยในส่วนของ Col_Index_Num แทนครับ เวลาแทรกคอลัมน์จะไม่ทำให้สูตรพัง เพราะ MATCH จะคอยหาว่าตอนนี้เป็นคอลัมน์ลำดับที่เท่าไหร่แล้ว

    เรื่องที่ 7 : ไม่ได้ Calculate

    เรื่องสุดท้าย เป็นเรื่องที่ไม่น่าจะผิด แต่ผมเจอบ่อยพอสมควร นั่นคือ เผลอไปตั้งค่าการคำนวณให้เป็นแบบ Manual แล้วลืมกด F9 เพื่อ Calculate!

    strange07

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

    หลายคนสงสัยว่า เฮ้ย! ตัวเองไม่เคยไปกดเปลี่ยนโหมดในการ Calculate ให้เป็น Manual เลย แล้วมันจะเกิดเหตุการณ์นี้ได้ยังไง? ผมมีคำตอบให้ครับ

    วิธีที่ Excel ใช้ตัดสินใจโหมดในการทำงาน

    หลักการสำคัญคือ ทุกไฟล์ที่เปิดอยู่ต้องอยู่ในโหมดการคำนวณแบบเดียวกันทั้งหมด ซึ่งมีรายละเอียดดังนี้calculation-mode-fix

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

    สรุปมาจาก https://support.microsoft.com/en-us/kb/214395

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

    ขอให้โชคดี ทำงานเสร็จรวดเร็วและไม่ผิดพลาดนะครับ!

  • IF vs CHOOSE vs VLOOKUP เปรียบเทียบฟังก์ชั่นทำหน้าที่ตัดสินใจ

    IF vs CHOOSE vs VLOOKUP เปรียบเทียบฟังก์ชั่นทำหน้าที่ตัดสินใจ

    “ชีวิตคนเราเต็มไปด้วยการตัดสินใจ…” จริงๆ แล้วคนเราตัดสินใจอยู่ตลอดเวลา (บางทีก็ตัดสินใจที่จะอยู่เฉยๆ 555) บางทีเราก็ต้องเลือกระหว่าง Choice 2 อย่าง แต่บางทีก็มี Choice มากมายนับไม่ถ้วน…

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

    ซึ่งจริงๆ แล้วการตัดสินใจใน Excel นั้นมีฟังก์ชั่นที่มาช่วยในเรื่องนี้หลายตัวด้วยกัน แต่ในบทความนี้ผมจะขอยกตัวอย่างฟังก์ชั่นที่น่าสนใจมากๆ 3 อัน นั่นคือ IF, CHOOSE, และ VLOOKUP นั่นเอง ซึ่งผมบอกเลยว่า นี่คือ “หัวใจสำคัญ” ที่จะทำให้คุณใช้ Excel ได้เก่งกาจขึ้นอีกมากครับ!!

    ก่อนอื่น ขอเริ่มจากฟังก์ชั่นพื้นฐานที่สำคัญที่สุดในการคิดแบบตัดสินใจ นั่นคือ IF ครับ

    IF

    IF แปลได้ตรงๆ ว่า “ถ้า” ซึ่งความหมายและหน้าที่ของฟังก์ชั่นก็ตรงตามคำศัพท์ครับ นั่นคือ “ถ้า เงื่อนไขเป็นจริง แล้วจะใช้สูตร xxx แต่ถ้าไม่จริงจะใช้สูตร yyy”

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

    ซึ่งเงื่อนไขที่ว่าก็คือสิ่งที่เขียนอยู่ในส่วนของ logical_test ในฟังก์ชั่น IF นั่นเอง ซึ่งจะต้องให้ผลลัพธ์ออกมาได้แค่ 2 อย่าง คือ TRUE กับ FALSE เท่านั้น!

    if
    โครงสร้างฟังก์ชั่น

    =IF(logical_test,value_if_true,value_if_false
    =IF(เงื่อนไขที่ต้องเช็คว่าจริงหรือเท็จ,ถ้าจริงใช้สูตรนี้,ถ้าเท็จใช้สูตรนี้)

    เช่น ถ้า A1 คือ จำนวนงานที่มีตำหนิ ถ้างานมีตำหนิมากกว่า 10 ชิ้น โดนค่าปรับชิ้นละ 5000 บาท แต่ถ้าไม่เกิน 10 ชิ้นจะโดนปรับชิ้นละ 1000 บาท

    ถ้าเราต้องการคำนวณค่าปรับใน A2 จะเขียนสูตรได้ว่า =IF(A1>10,5000*A1,1000*A1)
    ซึ่งแปลได้ว่า ถ้า A1 > 10 ชิ้น (เงื่อนไข) ค่าปรับคือ 5000*A1 (กรณีจริง) แต่ถ้าไม่เกิน ค่าปรับคือ 1000*A1 (กรณีเท็จ) นั่นเอง

    หมายเหตุ : เงื่อนไขอาจมีได้หลายเงื่อนไข ซึ่งเอามาผสมรวมกันได้ด้วยฟังก์ชั่นทางตรรกะ เช่น AND, OR, NOT จนสุดท้ายเหลือออกมาแค่ TRUE/FALSE

    หมายเหตุ 2 : เนื่องจาก IF แยกได้แค่ 2 กิ่ง ถ้าอยากให้ผลลัพธ์มีได้มากกว่า 2 กิ่งให้ใช้ IF ซ้อนกันหลายๆ ชั้น

    CHOOSE

    หาก IF เปรียบเสมือนป้ายทางแยก 2 ทางแล้ว CHOOSE ก็เปรียบเสมือนลิฟท์ ที่มีปุ่มให้เลือกกดว่าจะไปชั้นไหน แล้วแต่ละชั้นจะใช้สูตรอะไร?

    choose

    ที่ผมเปรียบเทียบ CHOOSE เป็นเหมือนลิฟต์ เพราะว่า CHOOSE นั้นเรา จะต้องระบุตัวเลข ให้มันก่อน ว่า จะให้มันทำงานด้วยสูตรลำดับที่เท่าไหร่? (มีได้สูงสุด 254 สูตร!!)

    โครงสร้างฟังก์ชั่น

    =CHOOSE(index_num,value1,value2,value3,…,value254)
    =CHOOSE(เลขลำดับสูตรที่จะให้ใช้,สูตรที่1,สูตรที่2,สูตรที่3,…,สูตรที่254)

    เช่น =CHOOSE(3,A1+2,A1*2,A1/2,A1^2) จะได้ผลลัพธ์ว่า A1/2
    เพราะว่าเราเลือกสูตร ลำดับที่3 จากสูตรทั้งหมดที่มีให้เลือกดังนี

    1. A1+2
    2. A1*2
    3. A1/2
    4. A1^2

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

    VLOOKUP

    ตัวสุดท้ายที่จะพูดถึงคือฟังก์ชั่นสุดเจ๋งอย่าง VLOOKUP ซึ่งจริงๆ แล้วมีการทำงานถึง 2 โหมดด้วยกัน นั่นคือ VLOOKUP แบบ Approximate Match และ แบบ Exact Match

    ซึ่งตัวที่ผมจะขอพูดถึงในที่นี้คือ VLOOKUP แบบ Exact Match ซึ่งเป็นแบบที่เราใช้งานกันบ่อยในชีวิตประจำวันแล้วกันครับ

    ถ้าจะให้เปรียบเทียบ VLOOKUP แบบ Exact Match ผมคิดว่าเราสามารถเปรียบเทียบกับเวลาที่เรากำลังมองไปที่เมนูของร้านกาแฟได้เลยครับ (ตัวอย่างร้านกาแฟนี้ ผมได้แนวคิดมาจากเว็บ http://www.excelcampus.com/functions/excel-vlookup-explained/ ครับ อธิบายได้เห็นภาพมาก)

    vlookup3

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

    โครงสร้างฟังก์ชั่น

    =VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
    =VLOOKUP(ข้อมูลที่สนใจ,ตารางอ้างอิง,ลำดับคอลัมน์ของผลลัพธ์ที่ต้องการ, อันสุดท้าย ใส่ 0 เพื่อบอกว่าใช้โหมด Exact Match)

    ถ้าเป็นตัวอย่างกาแฟ สมมติว่าผมต้องการกิน Cappuccino (lookup_value) ผมก็จะมองไปที่เมนู (table_array) แล้วกวาดสายตาจากบนลงล่างจนเจอกับ Cappuccino…

    จากนั้นก็จะกวาดสายไปมองไปทางขวา สมมติผมต้องการแบบเย็น ผมก็ต้องมองไปที่คอลัมน์ลำดับที่ 3 (col_index_num) แล้วสุดท้ายก็จะได้ราคา นั่นคือ 65 บาท กลับมานั่นเอง

    ซึ่งจะเขียนเป็นสูตรเต็มๆ ได้ว่า

    =VLOOKUP(“Cappuccino”,เมนูกาแฟ,3,0) ซึ่งจะได้ผลลัพธ์คือ 65 กลับมาครับ

    หมายเหตุ : ผลลัพธ์ของ VLOOKUP สามารถเป็นค่าผลลัพธ์ได้อย่างเดียว ไม่สามารถใส่เป็นสูตรคำนวณเช่นเดียวกับ IF หรือ CHOOSE ได้

    สรุปเปรียบเทียบฟังก์ชั่นแต่ละตัว

    if-vlookup-compare - Excel2

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

    แต่ถ้ามีหลายทาง ก็ให้ดูว่าผลลัพธ์เป็นค่าธรรมดาหรือเป็นสูตรคำนวณ ถ้าเป็นสูตรคำนวณก็ต้องคิดเอาว่าจะถนัดใช้ IF ซ้อน IF หรือจะใช้ CHOOSE ดีกว่า

    แต่ถ้ามีหลายทางแล้วผลลัพธ์เป็นค่าธรรมดาๆ ไม่ใช่สูตร ก็ใช้ VLOOKUP ได้เลยครับ!!

    สำหรับคนที่อยากศึกษาต่อเพิ่มเติม ก็สามารถค้นหาคำว่า IF, CHOOSE, VLOOKUP ในเว็บผมได้เลยครับ มีให้อ่านอีกเยอะครับ ^^

  • Excel Skill Tree : เส้นทางการเรียนรู้ทักษะ Excel ที่เหมาะสม

    Excel Skill Tree : เส้นทางการเรียนรู้ทักษะ Excel ที่เหมาะสม

    Excel Skill Tree (แผนผังทักษะ Excel)

    เคยงงมั้ยครับว่า Excel มีอะไรให้เรียนรู้มากเหลือเกิน แล้วเราควรจะเรียนรู้อะไรก่อนหลังดี? ปัญหานี้จะหมดไปถ้าเรามาเรียนรู้เรื่องของ Excel Skill Tree หรือ แผนผังทักษะ Excel ครับ

    คำว่า Skill Tree คือ แผนผังการพัฒนาทักษะ ซึ่งจะบอกได้ว่า…การที่เราจะบรรลุแต่ละทักษะนั้น จำเป็นจะต้องผ่านการเรียนรู้ หรือเข้าใจทักษะอื่นๆ อันไหนก่อนบ้าง?

    (หากคุณเคยเล่นเกม RPG มาก่อน คุณน่าจะคุ้นเคยกับ Skill Tree เป็นอย่างดี หากสนใจแบบละเอียด อ่านได้ที่นี่ –> 10 ข้อคิดจากเกมออนไลน์ ใช้พัฒนาความก้าวหน้าทักษะ Excel )

    วิธีการดู Skill Tree

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

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

    Skill-Tree

    โดยที่หากคุณอยากเรียนรู้ทักษะ Block ไหน ก็เลือก Category ที่ Menu ด้านบน หรือ ด้านขวามือ แล้วเลือก Category ที่ต้องการได้เลยครับ

    เปรียบเทียบเนื้อหาในหนังสือกับเนื้อหาแต่ละคอร์สใน SkillLane

    Skill-Tree-course-map

    สายทักษะขั้นสูงของ Excel

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

    การใช้ Excel ก็มีลักษณะคล้ายๆ สายอาชีพในเกม RPG เช่นกัน แต่ผมขอเรียกว่า “สายทักษะ” แทน และมันก็มีสายทักษะขั้นสูงด้วย ซึ่งผมขอแบ่งออกเป็น 3 ทักษะขั้นสูง (ใน Skill Tree จะมีดาวปะอยุ่) ดังนี้

    • VBA : เน้นการแก้ปัญหาด้วยการเขียนโปรแกรมเป็นหลัก ซึ่งคนสายนี้จะทำสิ่งมหัศจรรย์ที่คนทั่วไปมักร้องว้าว! เพราะ VBA ทำได้ทุกอย่างที่คนนั่งถึกๆ ทำได้เหมือนกับเสกเวทย์มนตร์ และยังสามารถทำในสิ่งที่การเขียนสูตรทำไม่ได้อีกด้วย แต่ติดข้อจำกัดตรงที่เป็นกลุ่มทักษะที่ต้องการ Skill ต่างไปจากทักษะ Excel ดั้งเดิมมากที่สุด ทำให้เรียนรู้ยาก และในบางสถานการณ์จะถูกห้ามใช้พลัง VBA โดยสิ้นเชิงเลย (บางทีคนก็ไม่ยอมให้สร้างไฟล์ที่มี VBA)
    • Array Formula : สายที่เน้นการใช้สูตรคำนวณ เก่งการใช้สูตรในการแก้ปัญหามาก สามารถใช้ Array Formula ได้อย่างคล่องแคล่ว คนกลุ่มนี้สามารถรับภารกิจลุยไปได้เกือบทุกพื้นที่ เพราะไม่มีความน่ากลัวแอบแฝงเหมือนกลุ่มนักเขียนโปรแกรม (ไม่ติดข้อจำกัดเรื่องที่ว่าห้ามใช้ VBA) => ซึ่งทักษะนี้ผมมีสอนเป็นคอร์สออนไลน์แล้วครับ
    • PowerTool : สายนี้เน้นการทำงานกับข้อมูลจำนวนมาก มีความเชี่ยวชาญด้านการใช้พวก PowerPivot, DAX Formula/DAX Pattern, Power BI ซึ่งเป็นสุดยอดเครื่องมือในการวิเคราะห์ข้อมูลที่ Excel มีมาให้ด้วย ซึ่งแนวโน้มความต้องการในยุคนี้น่าจะมาแรงมากจากความต้องการเรื่องของ Big Data
    • สายอื่นๆ :  คุณคิดว่ามีอะไรบ้างช่วย Comment บอกทีครับ ^^

    แล้วจะเลือกสายทักษะขั้นสูงอันไหนดี?

    หากใครสามารถวางแผนได้ตั้งแต่เนิ่นๆ ค้นหาตัวเองเจอว่าสุดท้ายแล้วตัวเองจะเลือกสายทักษะอะไรก่อน จะได้เปรียบคนที่โลเลเปลี่ยนไปเปลี่ยนมามาก เพราะคุณจะไม่เสียเวลาไปกับทักษะที่สุดท้ายไม่ได้ส่งเสริมสายอาชีพคุณ (แต่ตอนนี้ผมมีเนื้อหาแค่สาย Array Formula นะครับ อิอิ)

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

    อย่างไรก็ตาม เรื่องของ Demand/Supply ก็เป็นอีกหนึ่งปัจจัยที่ต้องคำนึงถึง เพราะหากสุดท้ายในโลกที่คุณอยู่มีสายอาชีพ/สายทักษะที่คุณเลือกเต็มไปหมดเลย Supply ก็จะเยอะเกินความต้องการ บางทีคุณไปเลือกเป็นสายอาชีพที่ไม่ค่อยมีคนเลือก อาจจะเป็นที่ต้องการมากกว่าก็ได้

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

  • เข้าสู่โลกใหม่ของการเขียนสูตร Excel ด้วย Array Formula

    เข้าสู่โลกใหม่ของการเขียนสูตร Excel ด้วย Array Formula

    บทความนี้ผมตั้งใจจะให้เป็นบทความที่จะสอน Concept ของ Array Formula แบบสั้นๆ พอได้ไอเดียและพอเห็นภาพว่า Array Formula คืออะไร? มีข้อดีข้อเสียอย่างไร ?

    ใครอยากรู้เชิญอ่านได้เลยครับ รับรองว่าได้ความรู้ดีๆ เพียบเช่นเคย!

    เมื่อความรู้ดั้งเดิมมีข้อจำกัด

    ในสมัยก่อน…วิชาวิทยาศาสตร์อย่าง ฟิสิกส์ เคมี ที่หลายๆ คนเคยเรียน สามารถอธิบายปัญหาและปรากฏการณ์ต่างๆ ที่เกิดขึ้นบนโลกนี้ได้เป็นอย่างดี นักวิทยาศาสตร์ยุคแรกๆ เรียนรู้… ทำความเข้าใจกฎเกณฑ์ที่เกี่ยวกับมัน จนคิดว่ารู้จักมันดีในระดับหนึ่งแล้ว

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

    spacetime_strip


    ฟิสิกส์แบบนิวตัน ใช้อธิบายหลายๆเรื่องในอวกาศไม่ได้ ต้องใช้ทฤษฎีไอน์สไตน์แทน นี่แหละคือตัวอย่างของความรู้เดิมใช้ได้จำกัด

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

    หากเพื่อนๆ เริ่มพบว่า การเขียนสูตรแบบเดิมเริ่มตอบโจทย์บางอย่างไม่ได้ เช่น

    • อยากจะเขียนสูตรเพื่อให้แสดงค่า Percentile ที่ 70% ของข้อมูล โดยมีเงื่อนไขว่าต้องเป็นค่าเฉพาะของกลุ่มคนที่กำหนดด้วย (ใช้ Pivot ยังไม่ได้เลยครับ)
    • อยากจะให้ excel List ข้อมูลทุกบรรทัด ที่มีเงื่อนไขตรงกับที่กำหนดออกมา โดยใช้สูตร (ปกติ VLOOKUP จะเจอแค่บรรทัดแรก)
    •  หากเราต้องการจะประหยัดเนื้อที่ชีทให้ได้มากที่สุด ไม่ต้องการเสียพื้นที่ในการทดข้อมูล จะทำยังไง

    ปัญหาทุกอย่างนี้ สามารถถูกแก้ไขได้ด้วย การเขียนสูตรอีกวิธีที่เรียกว่า Array Formula ซึ่งนอกจากจะช่วยแก้ปัญหาแล้ว ยังทำให้ศักยภาพในการเขียนสูตรเราเพิ่มขึ้นอีกมหาศาลเลยทีเดียว

    Array Formula คืออะไร?

    มันคือการเขียนสูตร Excel ขั้นสูง ที่เราเอาไว้ทำเรื่องเจ๋งๆ อย่างการ Dynamic Range (ขยาย หด range ตามต้องการ) , Filter, Sort,  การคำนวณแบบแปลกๆ ตามเงื่อนไข ด้วย “การเขียนสูตร” ได้

    Array Formula จะเป็นสูตรที่ทำงานกับ ชุดข้อมูลที่มีสมาชิกหลายๆ ตัว (Array) พร้อมๆ กัน

    พูดง่ายๆ คือ ถ้าเราใส่ Range แทนลงในตำแหน่งในสูตรที่ปกติจะเป็น Cell เดียว นั่นแหละ Array Formula

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

    • สูตรปกติ : =A1*B1
    • สูตร Array : =A1:A5*B1:B5 หรือ =A1:A5*B1
    • สูตรปกติ : =LEN(A1)
    • สูตร Array : =LEN(A1:B10)

    โดยที่ปกติแล้ว เวลาเราเขียนสูตรแบบ Array จะต้องกดปุ่ม Ctrl+Shift+Enter เพื่อบอก Excel ว่าจะใช้สูตรแบบ Array แล้วนะ… ไม่งั้น Excel จะให้ค่า Error กลับมา (เหมือนด่าว่าเราเขียนสูตรไม่เป็น)

    โดยที่เวลากด Ctrl+Shift+Enter แล้ว ตรง Formula Bar จะมีเครื่องหมายปีกกา { } มาครอบให้โดยอัตโนมัติ (เขียนเองไม่ได้) เพื่อบ่งบอกว่าสูตรนี้เป็นสูตรพิเศษ ที่กด Ctrl+Shift+Enter เพื่อใช้งาน

    array-0

    ผลลัพธ์ของ Array Formula

    • Array Formula สามารถให้ผลลัพธ์การคำนวณออกมาได้ 1 ค่า หรือจะมากกว่า 1 ค่าก็ได้ แล้วแต่วิธีที่เราเขียนสูตร โดยที่เราสามารถตรวจสอบได้โดยการลากแถบดำแล้วกดปุ่ม F9
    • แต่ทว่า ในแต่ละ Cell ของ Excel นั้นจะแสดงผลลัพธ์ได้เพียง 1 ค่าเท่านั้น
    • ดังนั้นถ้าเราเขียน Array Formula ที่ให้ผลลัพธ์มากกว่า 1 ตัว แต่เขียนสูตรอยู่ใน 1 Cell มันจะแสดงผลลัพธ์ออกมาแค่ค่าแรกสุดค่าเดียว (แต่จริงๆ เก็บข้อมูลไว้หลายค่า)
    • ถ้าอยากจะแสดงผลลัพธ์ให้ครบทุกตัว ต้องลากพื้นที่เลือก Range ให้ครอบคลุมจำนวนผลลัพธ์ที่ต้องการแสดงซะก่อน จากนั้นค่อยใส่สูตร Array แล้วกด Ctrl+Shift+Enter
    • หรือจะมีอีกกรณีคือ จะต้องใส่ฟังก์ชั่นบางอย่างครอบผลลัพธ์ลงไป เพื่อทำการรวบผลลัพธ์ทั้งหมดที่มีหลายค่า ให้เหลือเพียงค่าเดียว เช่น การใช้ฟังก์ชั่นสรุปผลอย่างเช่น SUM, MAX, MIN… และอื่นๆ อีกเยอะแยะ

    ค่าที่แท้จริงของ Array

    สมมติผมเขียนสูตรแบบนี้

    array-1

    หากลองกด F9 ดูเพื่อดูค่าที่แท้จริงว่าคืออะไร มันจะได้แบบนี้ครับ

    array-2

    ในทำนองเดียวกัน ถ้าเป็นแบบนี้

    array-3

    เวลากด F9 จะได้แบบนี้

    array-4

    ผลลัพธ์ที่ออกมานั้นบ่งบอกว่า ในสูตรๆ เดียวที่เราเขียนนั้น ให้ค่าผลลัพธ์ออกมาหลายตัวด้วยกัน

    ดูเผินๆ อาจดูเหมือนว่าทั้ง 2 กรณีได้ผลลัพธ์เหมือนกัน แต่ถ้าดูดีๆ จะเห็นว่าต่างกันตรงเครื่องหมายที่เป็นตัวคั่น

    • มีหลายแถว ={“a”;”b”;”c”;1;2;3} สังเกตว่ามีผลลัพธ์ 6 ตัว คั่นด้วย Semi Colon
    • มีหลายคอลัมน์ ={“a”,”b”,”c”,1,2,3} สังเกตว่า มีผลลัพธ์ 6 ตัว แต่คั่นด้วย Comma
      ** วิธีการจำคือ ถ้าขึ้น Column ใหม่ ใช้ Comma (ตัว C เหมือนกัน)

    เปรียบเทียบสูตรแบบปกติ กับ สูตรแบบ Array Formula

     สูตรปกติArray Formula
    การใส่สูตรใส่ข้อมูลที่ละตัวเช่น = 1*10ใส่ข้อมูลเป็นชุดเช่น ={1,2,3}*{10,20,30}
    การคำนวณคำนวณปกติ ไม่มีการจับคู่คำนวณเช่น = 1*10จับคู่อันดับในการคำนวณ
    (ตัวแรกชุดนึงคู่กับตัวแรกของอีกชุด)={1*10,2*20,3*30}={10,40,90}
    การ Confirm สูตรกด Enter หรือ เลื่อนไป Cell อื่นกด Ctrl+Shift+Enter
    ผลลัพธ์ได้ข้อมูลออกมาค่าเดียวเสมอ= 10 เลยตัวเดียวข้อมูลสามารถออกมาได้หลายตัวจากสูตรเดียวอาจกระจายอยู่หลายๆ ช่องได้ เช่น
    ได้ผลลัพธ์เป็น 3 ค่า คือ
    = {10,40,90}แต่ Excel ไม่สามารถแสดงข้อมูล 3 ตัวในช่องเดียวกันได้ เลยขึ้นแค่คู่แรก คือ 10

    จัดการอย่างไรดีกับการที่ Array ออกมาหลายค่า?

    เรามีทางเลือก 2 ทางหลักๆ ครับ คือ

    1. เปลี่ยนการเขียนสูตร เป็นให้ลากครอบคลุมหลายช่องก่อน แล้วค่อยใส่สูตร Array Formula
      • หากเราลากพื้นที่หลายช่องไว้ก่อน (ครอบ A4:C4 แล้วค่อยใส่สูตร)  ผลลัพธ์จะแสดงออกมาทีเดียวหลายช่อง ช่องละ item
      • และถ้าสังเกตดู คือ สูตรในแต่ละช่องจะเห็นเป็นสูตรเดียวกัน แม้ค่าจะออกมาต่างกันเป็นคนละ item
      • Array-Display-1
      • ในตัวอย่าง คือ จะเห็น 10 40 90 อยู่แยกกันคนละ cell
      • การทำแบบนี้ จะมีลักษณะพิเศษอย่างนึง คือ หลังจากทำแบบนี้แล้ว เราไม่สามารถลบข้อมูลช่องใดช่องหนึ่งทิ้งได้ ถ้าจะลบต้องลบทั้งหมด
    2. หาฟังก์ชั่นที่ทำหน้าที่สรุปข้อมูลมาครอบอีกทีเพื่อให้รวมค่าหลายๆ ให้อยู่ในช่องเดียว เช่น SUM
      • จะได้ว่า =SUM({1,2,3}*{10,20,30}) = 140
      • Array-Display-2
      • แบบนี้จะทำให้ข้อมูลทั้ง Array ออกมาที่ช่องเดียวได้

    ตัวอย่างการคำนวณแบบ Array

    ปกติเรามักจะใส่สูตร Array โดยเป็น Range ที่มีขนาดเท่าๆ กัน มาทำอะไรซักอย่าง เช่น บวก ลบ คูณ หาร เชื่อมText หรือเอาไปใส่ใน Function ต่างๆ

    เช่น ในรูปข้างล่างเป็น Range ที่มีขนาด 1 แถว 3 คอลัมน์ 2 อันมาคูณกัน Excel จะทำการจับคู่คำนวณ โดยเอาสมาชิกแต่ละอันดับมาคูณกัน (ตัวแรกคู่ตัวแรก ตัวที่สองคู่ตัวที่สอง…)

    แบบนี้จะได้ผลลัพธ์ออกมา 3 ตัว เหมือนกับ Range 2 ตัวที่เป็น Input

    array-cal-match

    อีกแบบหนึ่งที่อาจพบบ่อย คือ ตัวนึงเป็น Range อีกตัวเป็นตัวเดี่ยวๆ เวลา Excel จับคู่มันจะจับตัวเดี่ยวคู่กับสมาชิกทุกตัวที่เป็น Range เลย

    แบบนี้จะได้ผลลัพธ์ออกมา 3 ตัว เช่นกัน (เหมือนกับ Range ที่เป็น Input)

    array-cal-match2

    ตัวอย่างจริง

    ตัวอย่างที่ 1 หายอดขายรวมที่ต้องทำเพิ่ม

    ถ้าเขียนสูตรปกติ ก็ต้องกดไว้ก่อนว่าขาดเป้าเท่าไหร่ แล้วค่อยเขียน SUM รวมอีกที

    array formula

    ตัวอย่างที่ 2 หาว่ายาวสุดกี่ตัวอักษร

    ถ้าเขียนสูตรปกติ จะต้องทดไว้ก่อนว่าแต่ละคำยาวกี่ตัวอักษร แล้วค่อยใช้ MAX มาครอบ แต่ถ้าใช้ Array ก็สามารถเขียนใน Cell เดียวได้เลย

    array-5

    ตัวอย่างที่ 3 ตรวจการกรอกรหัสบัตรประชาชนว่าใส่ถูกต้องหรือไม่? (Advance)

    ให้ B2 เป็นช่องที่เราจะใส่รหัสประชาชน 13 หลักลงไป แล้วเราจะตรวจเลขตำแหน่งสุดท้ายได้ด้วยสูตรนี้ครับ (เป็น Array Formula ที่ไม่ต้องกด Ctrl+Shift+Enter เนื่องจากเป็นความสามารถพิเศษของ SUMPRODUCT ครับ)

    =RIGHT(11-MOD(SUMPRODUCT(--(MID(B2,ROW(INDIRECT("1:12")),1)),14-ROW(INDIRECT("1:12"))),11),1)
    array-7

    สรุปแล้ว Array Formula ดียังไง?

    การเขียน Array Formula นั้นผมเชื่อว่ามีคนไม่ถึง 5% ของคนทั้งโลกที่ใช้มันเป็น… ดังนั้นข้อดีของมันอย่างแรกก็คือ “ถ้าคุณใช้เป็นคุณจะโคตรเทพ!” ซึ่งอันนี้เป็นข้อดีทางจิตใจ อิอิ

    ส่วนข้อดีทางเทคนิคจริงๆ ของ Array Formula ก็คือ มันช่วยให้…

    1. ประหยัดเนื้อที่การคำนวณ สามารถพุ่งไปยังคำตอบสุดท้ายได้ใน Cell เดียว โดยไม่ต้องทดการคำนวณทิ้งไว้หลาย Cell
    2. สร้าง Range จำลองขึ้นมาได้ ในสถานการณ์ต่างๆ เช่น เอาไปใส่ใน Defined Name หรือทำ Dynamic Range ได้
    3. สร้างเกราะป้องกันไม่ให้มีคนมาแก้บางส่วนของสูตรได้ ถ้าจะลบ Array Formula ต้องลบทั้งยวง ไม่สามารถลบบางส่วนได้
    4. ผลลัพธ์อัปเดททันทีเมื่อ Input เปลี่ยนไป ซึ่งอันนี้คือข้อดีสุดๆ ของการเขียนสูตรทุกชนิด เมื่อเทียบกับเครื่องมืออื่นๆ ใน Excel ที่ใช้งานง่ายกว่า เช่น Sort/Filter/PivotTable/Advanced Filter

    ข้อเสียของ Array Formula

    1. มันยากกว่าสูตรปกติ การเขียนสูตร Array ว่ายากแล้ว แต่อ่านสูตรแบบ Array ที่คนอื่นเขียนนั้นยิ่งมึนหนักกว่า! ยิ่งหากปล่อยให้คนทั่วไปมาอ่าน มีสิทธิ์ช๊อคตายได้เลย
    2. อาจทำให้คำนวณช้าลงได้ การเขียน Array Formula ถ้าเขียนไม่ดร อาจทำให้คำนวณช้ากว่าการแยก Cell ทดไว้ตามปกติได้

    แล้วยังไงต่อ?

    คราวนี้ก็ขึ้นอยู่กับคุณแล้วล่ะ ว่าอยากจะเรียนรู้การเขียนสูตรแบบ Array รึเปล่า? เพราะถ้าถามว่าจำเป็นสุดๆ มั้ย? ก็ต้องตอบว่า ถึงใช้ Array ไม่เป็นก็น่าจะพอหาคำตอบแบบเดียวกันได้ แต่อาจจะยุ่งยากพอสมควรหรือต้องทดไว้ใน Cell อื่นเยอะมากๆ (เช่น ถ้าจะหาค่า Percentile ของข้อมูลตาม Criteria ต่างๆ นี่อาจจะต้องทดเยอะมากๆ เลย)

    ใครที่อยากเรียนรู้ Array Formula เพิ่มแบบลึกซึ้งยิ่งขึ้น สามารถศึกษาได้จาก หนังสือ จอมเวท เทพ Excel ครับ

    ใน Excel 365 มีสูตร Array Formula แบบใหม่ขึ้นอีก เรียกว่า Dynamic Array

    หากใครสนใจสามารถอ่านได้ที่ เปลี่ยนสูตรยากให้เป็นสูตรกล้วยๆ ด้วย Dynamic Array ใน Excel 365

  • 10 ข้อต้องรู้ Concept Excel สำคัญ เมื่อต้องบู๊ด้วย Excel

    10 ข้อต้องรู้ Concept Excel สำคัญ เมื่อต้องบู๊ด้วย Excel

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

    บทความนี้มีคำตอบ เพราะผมได้ทำการสรุปเป็น “10 ข้อต้องรู้ เมื่อต้องบู๊ด้วย Excel” เพื่อให้คุณหรือเพื่อนของคุณที่อาจกำลังอยากพัฒนาทักษะการใช้ Excel ได้อ่านกันครับ

    Concept Excel สำคัญ

    1. อ้างอิงช่องต่างๆ ใน Excel

    ใน Excel นั้นมีช่องตารางเต็มไปหมด ซึ่งแต่ละช่องมีการระบุตำแหน่งด้วยรหัสคอลัมน์ (ที่ขึ้นด้วยตัวอักษรภาษาอังกฤษ) ตามด้วยรหัสแถว (ที่เป็นตัวเลข)

    cell-reference

    เมื่อรู้พิกัด เราก็จะอ้างอิง Cell นั้นๆ ได้ เช่น ถ้าจะเรียก Cell ที่อยู่ตำแหน่งคอลัมน์ D ตัดกับ แถวที่ 3 เราก็จะเรียกว่า D3 นั่นเอง

    นอกจากจะอ้างอิงทีละช่องแล้ว เรายังอ้างอิงหลายๆ Cell หรือเป็่นช่วง (Range) ได้ด้วยการใช้เครื่องหมายต่างๆ มาเชื่อม เช่น

    • Comma ใช้เชื่อม Cell ที่ไม่ได้อยู่ติดกัน เช่น A2,B5 หมายถึง 2 ช่อง คือ A2 และ B5
    • Colon ใช้เชื่อม Cell ที่อยู่ติดกัน เช่น A2:B5 หมายถึง 8 ช่อง คือ A2,A3,A4,A5,B2,B3,B4,B5

    แต่นอกจากการอ้างอิงด้วยรหัส เช่น A1 แล้ว เรายังอ้างอิงไปยังช่องต่างๆ ได้ด้วยการตั้งชื่อ (Define Name) ได้ด้วย ซึ่งสามารถใช้แทนรหัส A1 พวกนี้ได้ทุกประการ เช่น ตั้งชื่อช่อง A1 ว่า ยอดขาย ก็ได้  แถมเรายังตั้งชื่อ Range ได้ด้วยเช่นกัน

    รายละเอียดเพิ่มเติม ดูได้ที่ การเลือก/กรอก/แก้ไขข้อมูล และ การอ้างอิงด้วยการตั้งชื่อ (Define Name)

    2. สิ่งที่เห็นภายนอก vs ค่าที่แท้จริง

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

    เช่นตัวอย่างเลขทศนิยมอันนี้ก็ได้ครับ ชัดเจนดี

    basic1

    ใน A1 มีค่าที่แท้จริงเป็น 2.5 แต่แสดงผลเป็น 3 เพราะปรับ Format ให้ไม่มีทศนิยม แต่เวลานำไปคำนวณ Excel ก็ยังเอาค่าที่แท้จริงคือ 2.5 ไปคำนวณอยู่ดี

    เช่น =A1*A2 แปลว่าให้เอาค่าใน A1 คูณด้วยค่าใน A2 ซึ่งในที่นี้ได้ 5 ไม่ใช่ 6 เพราะเอา 2.5*2 ต่างหาก

    ซึ่งเราสามารถทำให้ข้อมูลน่าสนใจได้มากขึ้น ด้วยการปรับ Format หรือรูปแบบการแสดงผลนั่นเอง ซึ่งมีทั้งเราปรับเองทีละอัน หรือ จะให้ Excel ปรับให้หากข้อมูลใน Cell ตรงกับเงื่อนไขที่เรากำหนดก็ได้

    รายละเอียดเพิ่มเติม ดูได้ที่ การเปลี่ยนรูปแบบ (Formatting) , Conditional Formatting เพื่อปรับรูปแบบตามเงื่อนไขการกำหนด Custom Number Format

    3. Excel มองวันเวลาเป็นแค่ตัวเลขธรรมดา

    วันที่และเวลา ที่เราเห็นแสดงผลอยู่ใน Cell ต่างๆ นั้น จริงๆ แล้วค่าที่แท้จริงเป็นแค่ตัวเลขธรรมดาๆ แค่นั้นเอง

    โดยที่เลข 1 หน่วย แทน 1 วันเต็มๆ 
    ถ้า 1.5 ก็แทน 1 วันครึ่ง…

    แต่การที่เรามองเห็นเป็นวันที่ เป็นเวลา นั้นเป็นเพราะมีการกำหนด Format หรือรูปแบบการแสดงผลให้เป็นวันที่และเวลาเท่านั้นเอง

    ดังนั้น การคำนวณหาค่า OT จากเวลาเริ่มละจบงานจึงใช้การคูณธรรมดาก็ตอบได้แล้ว

    Concept Excel สำคัญ

    แนวคิดคือ พอเอาเวลาจบลบเวลาเริ่ม จะได้เวลาหน่วยเป็นวัน จึงต้องเอาไป *24*60 ให้หน่วยเป็นนาที แล้วคูณค่า OT ต่อนาที จุงจะได้ค่า OT นั่นเอง

    จริงๆ แล้วเป็นเพราะว่าข้อมูลใน Excel นั้นมีอยู่แค่ 5 ประเภท นั่นคือ ตัวเลข, ตัวหนังสือ, ตรรกะ TRUE/FALSE, ค่า Error, Array เท่านั้น จะเห็นว่าไม่ได้มีข้อมูลประเภทวันที่/เวลา เลย แปลว่า Excel มองวันที่/เวลา เป็นแค่ตัวเลขบบนึงเท่านั้นเองครับ

    ถ้าอยากเรียนรู้เพิ่มเติม อ่านได้ที่ ประเภทของข้อมูลบน Excel และ การทำงานเกี่ยวกับวันและเวลา (Date & Time) ใน Excel

    4. สูตรคำนวณคือหัวใจของ Excel

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

    triangle-area-formula

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

    • คำนวณปกติ เช่น =5+300 จะได้ผลลัพธ์เป็น 305  หรือเขียน =4*6 (4 คูณด้วย 6) จะได้ 24
    • มีการอ้างถึงช่องอื่นๆ (Cell Reference) เช่น =B3+10 แปลว่าให้เอาค่าในช่อง B3 มาบวกด้วย 10 ซึ่งถ้าค่าใน B3 เปลี่ยนไป ผลลัพธ์การคำนวณก็จะเปลี่ยนไปด้วยเช่นกัน
    • มีการอ้างด้วย Define Name เช่น =ยอดขาย*5 แปลว่าให้เอาจาก Range ที่ Define Name ชื่อว่า ยอดขาย คูณด้วย 5
    • มีการใช้ตัวเชื่อม (Operator) เช่น เครื่องหมายเปรียบเทียบ > < เพื่อให้ได้ค่า TRUE/FALSE , เครื่องหมาย & เอาไว้เชื่อมข้อความเข้าด้วยกัน เป็นต้น
    • มีการเรียกใช้ฟังก์ชั่น (สูตรสำเร็จรูป) เช่น  =SUM(A1:A10) แปลว่าให้เอาค่าในช่อง A1 ถึง A10 (10 ช่อง) มาบวกกันให้หมด

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

    สิ่งที่ต้องระวังในการเขียนสูตรคือ เวลาเราจะเขียนข้อความลงในสูตร จะต้องใส่อยู่ในเครื่องหมายคำพูด ไม่เช่นนั้น Excel จะไปสับสนว่าเป็น Define Name ซึ่งจะทำให้ Error เช่น จะเอาคำว่า บาท ไปต่อท้ายตัวเลขในช่อง B1 เราก็ต้องเขียนว่า =B1&” บาท” เป็ยต้น

    ถ้าอยากเรียนรู้เพิ่มเติม อ่านได้ที่ การเขียนสูตรผูกความสัมพันธ์ (Formula)

    5. เครื่องหมาย $ ต้องใช้ให้เป็น

    เวลา Copy สูตรที่มีการใช้ Cell Reference อยู่ เวลา Paste แล้ว Cell Reference จะเลื่อนไปตามทิศทางของการ Copy

    copy-paste-Relative

    เช่น ในช่อง B1 เขียนว่า =E1+3 เมื่อทำการ Copy สตรแล้วมา Paste ที่ A7 จะได้ว่า =D7+3 (Cell Reference E1 ในสูตรเลื่อนลงมาเป็น D7 ตามทิศทางของการ Copy/Paste)

    หากว่าต้องการจะ Fix ตำแหน่งไม่ให้ Cell Reference เลื่อน ก็ต้องใช้เครื่องหมาย $ มาช่วย (กด F4 ก็ได้) โดยหลักการคือ หาก $ อยู่หน้าตัวไหน ตัวนั้นจะถูกตรึงไว้ไม่ให้เลื่อนไปไหน (ในหนังสือ Excel Level Up! ผมใช้คำว่าใช้เงิน $ ฟาดหัวให้อยู่นิ่งๆ)

    ดังนั้น…

    • ถ้าเขียนว่า =$E$1+3 มันก็จะไม่เลื่อนไปไหนเลย
    • ถ้าเขียนว่า =$E1+3 มันก็จะไม่เลื่อนคอลัมน์ แต่เลื่อนแถวได้
    • ถ้าเขียนว่า =E$1+3 มันก็จะเลื่อนคอลัมน์ได้ แต่เลื่อนแถวไม่ได้
    • ถ้าเขียนว่า =E1+3 มันก็จะเลื่อนได้ทั้งคอลัมน์และแถว

    ซึ่งทั้ง 4 แบบนี้กดปุ่ม F4 เพื่อเปลี่ยนรูปแบบไปมาได้ครับ

    ถ้าอยากเรียนรู้เพิ่มเติม อ่านได้ที่ การคัดลอก ตัด แปะ แทรก

    6. ฟังก์ชั่นที่ใช้บ่อยจริงๆ มีไม่เยอะ

    ฟังก์ชั่นที่ใช้บ่อยจริงๆ ใน Excel มีแค่ 20% ของฟังก์ชั่นทั้งหมด (ตามกฎ 80/20 เลย) ดังนั้นมันไม่ใช่เรื่องยากเกินไปที่จะเรียนรู้แน่นอน ถ้าเรียนรู้แค่วันละ 1 ฟังก์ชั่น เพียง 2 เดือนก็เรียนครบแล้วครับ

    ผมอยากให้หลักคิดบางอย่าง กับฟังก์ชั่นบางตัวที่ Hot Hit สุดๆ ดังนี้ครับ

    • เมื่อนึกถึงคำว่า “ถ้า” ให้ใช้ ฟังก์ชั่น IF โดย 1 IF แตกกิ่งก้านได้ 2 กิ่ง คือ จริง และ เท็จ (หากมีหลายๆ “ถ้า” ก็ต้องใช้ IF ซ้อนกันหลายตัว)
    • เมื่อต้องการ “Map ข้อมูล” เช่น หาชื่อสินค้าจากรหัสสินค้า ให้ใช้ฟังก์ชั่น VLOOKUP
    • เมื่อต้องการหาว่าข้อมูลที่สนใจอยู่ลำดับที่เท่าไหร่ ให้ใช้ ฟังก์ชั่น MATCH
    • หากรู้พิกัด แล้วอยากได้ค่าในพิกัดนั้นกลับมา ใช้ ฟังก์ชั่น INDEX
    • หากต้องการทำงานกับข้อความ เช่น นับอักขระ ตัดคำ แทยที่คำ ให้ใช้ฟังก์ชั่นกลุ่ม Text
    • หากต้องการทำงานกับวันที่และเวลา เช่น ดึงค่า ปี เดือน วัน ให้ใช้ฟังก์ชั่นกลุ่ม Date/Time ผสมกับความรู้เรื่องที่ว่า Excel มองวันที่/เวลา เป็นแค่ตัวเลข

    7.บังคับให้กรอกข้อมูลตามที่กำหนดด้วย Data Validation

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

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

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

    เช่นรูปข้างล่าง ผมใส่เงื่อนไขว่าต้องนับแต่ละคำได้ไม่เกิน 1 ครั้ง

    prevent-duplicate-entry2

    แต่ที่เจ๋งสุดคือเครื่องมือที่ชื่อว่า List ซึ่งสามารถทำเป็น Dropdown List เพื่อช่วยให้ผู้ใช้งานทำงานได้สะดวกมากขึ้น ซึ่งเป็นเครื่องมือ Data Validation ที่ใช้บ่อยที่สุดเลย

    dropdown3

    ถ้าอยากเรียนรู้เพิ่มเติม อ่านได้ที่ Data Validation

    8. การสร้าง PivotTable เพื่อสรุปผลข้อมูลจากฐานข้อมูลที่เตรียมไว้

    PivotTable (ฝรั่งอ่านว่า พิ-วอท-เท-เบิ้ล) เป็นเครื่องมือบน Excel ที่สามารถสรุปผลข้อมูลตามเงื่อนไขที่กำหนดได้อย่างง่ายดายและรวดเร็ว

    data-source
    pivot-sample-01

     ==> 

    เช่น สามารถสรุปได้ว่าข้อมูลแต่ละประเภท มีผลสรุปที่เราสนใจเป็นเท่าไหร่ เช่น ผลรวม/จำนวนนับ/ค่าเฉลี่ย/ค่ามาก/น้อยสุด เป็นต้น

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

    ถ้าอยากเรียนรู้เพิ่มเติม อ่านได้ที่ Pivot Table ภาค 1 – การสรุปผลข้อมูลขั้นพื้นฐาน

    9. การสร้างกราฟ จากข้อมูลที่ทำการสรุปผลไว้แล้ว

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

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

    การจะทำกราฟได้นั้น เราต้องมีการสรุปผลข้อมูลเสียก่อน ไม่ว่าจะใช้ PivotTable หรือพวก SUMIFS/COUNTIFS ก็ตาม

    chart-animate-1

    ถ้าอยากเรียนรู้เพิ่มเติม อ่านได้ที่ การสร้างกราฟแผนภูมิใน Excel เบื้องต้น

    10 : อย่าเพิ่งคิดว่า Excel ทำไม่ได้

    ปัญหาหลายๆ อย่างนั้นดูยาก และดูเหมือนไม่น่าจะใช้ Excel แก้ไขปัญหาได้ แต่เอาเข้าจริงๆ แล้วมันก็มีทางแก้ไขปัญหาอยู่ดี เพียงแต่เรายังไม่รู้เท่านั้นเอง…

    ตัวอย่างที่ Extreme มากๆ คือ มีคนใช้ Excel แก้ปัญหา Sudoku ได้โดยไม่ต้องใช้ VBA หรือ Solver เลยด้วยซ้ำ!! ถ้าสนใจอ่านได้ในนี้ (ยากมากๆ หน่อยนะครับ)

    โหลดไฟล์แก้ปริศนา Sudoku ได้ที่นี่

    sudoku

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

    ผมชอบแนะนำให้ค่อยๆ คิดทีละ Step แบ่งย่อยปัญหาใหญ่ให้เป็นปัญหาเล็กๆ หลายๆ อันแล้วแก้ปัญหาทีละเปลาะ ทีละประเด็น จะง่ายขึ้นมาก หรือที่ในหนังสือผมเรียกว่า Divide & Conquer นี่แหละครับ

    หากแก้ปัญหาด้วยตัวเองไม่ได้ ก็อย่าลืมพึ่งกาอากู๋ Google หรือจะถามทางผู้รู้ Excel ทั้งหลายก็ได้ คนไทยเก่งๆ ก็มีเยอะครับ ตามนี้เลย ==> 4 จักรพรรดิ และ 7 เทพโจรสลัด แห่งวงการเอ็กเซล (จากเว็บ วิศวกรรีพอร์ต)

    ส่งท้าย Concept Excel สำคัญ

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

  • เจาะลึกทุกแง่มุมการทำ Dropdown 2 ชั้น (Ver. ปรับปรุงใหม่)

    เจาะลึกทุกแง่มุมการทำ Dropdown 2 ชั้น (Ver. ปรับปรุงใหม่)

    ก่อนหน้านี้ผมได้เคยเขียนอธิบายวิธีทำ Dropdown List 2 ชั้น และ 3 ชั้นขึ้นไปแล้ว… หลายๆ คนก็นำไปใช้ประโยชน์ได้เป็นอย่างดี แต่ปัญหาอยู่ที่ บางคนทำตามแล้วมัน Error!!

    เอ๊ะ แล้วทำไมบางคนทำตามแล้วไม่ Error แต่บางคนทำแล้ว Error ล่ะ? เรามาไขคำตอบกันในบทความนี้ครับ ยาวหน่อย แต่ได้ความรู้มากมาย รับรองเลย!!

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

    หลักการทำ Dropdown

    Dropdown List เกิดจากการใช้ [Data] –>Data Tools –> Data Validation แล้วเลือก List จากนั้น ให้เลือก Range ที่ต้องการให้เป็น item ย่อยๆ เวลาที่กดปุ่มสามเหลี่ยมเพื่อเลือกใช้ Dropdown แค่นี้ก็จะได้ Dropdown แล้วล่ะ เช่น ผมมีรายชื่อภาพยนต์อยู่ 4 เรื่อง ผมก็แค่ลาก A2:A5 ดังนี้ได้เลย

    dropdown0

    ทีนี้ก็จะได้ Dropdown มาใช้แบบง่ายๆ แล้ว ไม่มีอะไรยากเลยใช่มั้ยครับ ^^

    dropdown3

    ทำ Dropdown โดยใช้ Define Name ดีกว่า

    วิธีที่ดีกว่าการเลือก Range ก็คือการใช้ Define Name มาแทน ผมสามารถตั้งชื่อ List 4 เรื่องนั้นใน Define Name ชื่อ Movies ได้ ซึ่งมี 2 วิธี คือ

    1. ตั้งชื่อใน Name Box : ลากคลุม 4 เรื่อง (4 ช่อง)แล้วใส่ชื่อใน Name Box
    2. ใช้ Create Names from Selection : ลากคลุมถึง Heading (5 ช่อง) แล้วกด Ctrl+Shift+F3 เพื่อตั้งชื่อจากช่องบนสุด (หากติ๊ก Top Row อย่างเดียวอยู่แล้วก็กด Ok ได้เลย)ซึ่งในทีนี้ผมขอทำวิธีที่ 2 เพราะความชอบส่วนตัวล้วนๆ
      dropdown1

    จากนั้นให้ไปที่ Cell ที่ต้องการจะทำ Dropdown แล้วเลือก [Data] –> Data Validation แล้วเลือก List แล้วใส่ชื่อที่ตั้งไว้ลงไป (กด F3 เพื่อช่วยในการเลือกชื่อที่ตั้งไว้แล้วได้)

    dropdown2

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

    dropdown3

    ความยุ่งอยู่ที่ Dropdown ขั้นที่สอง

    Concept การทำ Dropdown ของเรายังเหมือนเดิม ไม่ว่ามันจะมีกี่ชั้นก็ตาม นั่นคือ ใช้ Define Name มาเป็น item ของ Dropdown นั้น แปลว่า ถ้าเป็น Dropdown ชั้นที่ 2 ก็ต้องใช้ Define Name ที่แทน item ที่จะเป็นตัวเลือกของชั้นที่สอง

    ความพิเศษอยู่ที่ว่า Dropdown ตัวที่สองเนี่ย มันสามารถเปลี่ยน item List ไปได้ โดยขึ้นอยู่กับการเลือก Dropdown ตัวแรก ซึ่งวิธีที่ง่ายที่สุดที่จะทำแบบนี้ได้ ก็คือใช้การเขียนสูตรมาช่วยนั่นเอง

    แปลว่าเราจะต้องสร้าง Define Name ของ List ชั้นที่ 2 ให้ครบทั้ง 4 List ซะก่อน

    สร้าง Define Name ของ List ชั้นที่ 2

    หากผมลองสร้าง List ที่จะเป็น item ของ Dropdown ชั้นที่สอง โดยใช้ชื่อของ List แทนชื่อหนัง โดยลองคลุมทั้งหมดแล้วกด Ctrl+Shift+F3 แล้วเลือกแค่ Top Row อันเดียว (เพราะใช้ Top Row ในการตั้งเป็นชื่อ)

    dropdown4

    จะได้ผลลัพธ์ออกมาดังนี้

    • คอลัมน์ D ได้ชื่อ บ้านผีปอป คือ D2:E12 ซึ่งอันนี้ออกมาปกติ เราใช้ทำงานได้
    • คอลัมน์ E ได้ชื่อ Star_Wars  คือ E2:E12 อันนี้ ชื่อดันมีเครื่องหมาย _ โผล่มาแทนช่องว่างซะงั้น
    • คอลัมน์ F ได้ชื่อ _13_เกมสยอง คือ F2:F12 อันนี้ ชื่อดันมีเครื่องหมาย _ โผล่มาหน้าสุด และมี _ แทนช่องว่างด้วย
    • คอลัมน์ F อันนี้หนักสุดเลย! ไม่มีชื่อ 300 ถูกตั้งขึ้นมาด้วยซ้ำ

    ลองทำ Dropdown ชั้นที่สองดู

    สมมติว่าผมยังไม่สนใจชื่อแปลกๆ ที่โผล่มา… หากผมต้องการทำให้ Dropdown ชั้นที่สองเป็น List ของบ้านผีปอบ ผมก็สามารถใช้ Data Validation แล้วใส่ชื่อโดยกด F3 เลือกได้ดังนี้

    dropdown5

    ทีนี้เนื่องจากชื่อมันต้องเปลี่ยนไปหากผมเปลี่ยนการเลือกของ Dropdown ครั้งแรก แปลว่าผมไม่สามารถใส่ชื่อลงไปตรงๆ ได้ แต่ผมต้องใส่ให้มัน Link กับ Dropdown ชั้นแรก โดยการใส่ว่า =A9 แทน

    แต่ถ้าเราไปเขียนเป็น =A9 ตรงๆ มันจะได้ผลลัพธ์เป็นคำว่า “บ้านผีปอบ” (ที่เป็น Text ไม่ใช่ Define Name )กลับไปแทน

    ดังนั้นเราต้องใช้ฟังก์ชั่น INDIRECT มาช่วยแปลง Text ให้เป็น Cell Reference จริงๆ อีกที นั่นคือ =INDIRECT(A9) จึงจะออกมาเป็น Define Name ที่ชื่อว่า บ้านผีปอบ จึงจะทำงานได้ (สังเกตว่าผมต้องเลือก Dropdown ชั้นแรกให้มีค่าก่อน ไม่งั้นมันจะขึ้นเตือนว่า Dropdown ชั้นที่2 จะมีปัญหา)

    dropdown6

    ลองเลือกบ้านผีปอบ แล้วเลือก Dropdown ขั้น 2 ซึ่งออกมาใช้งานได้!

    dropdown7

    ปัญหาเริ่มเกิด

    แต่ปัญหาที่เกิดขึ้นคือ หากเราเปลี่ยน Dropdown ชั้นแรกเป็น Star Wars แทน คราวนี้ Excel กลับไม่สามารถใช้งาน Dropdown ชั้นที่สองได้แล้ว!! (นี่คือปัญหาที่หลายๆ คนอาจจะเจอตอนทำตามที่ผมสอนในบทความเดิมก่อนหน้านี้)

    dropdown8

    สาเหตุเป็นเพราว่า Excel ไม่สามารถหาชื่อที่เขียนว่า Star Wars ได้นั่นเอง (เพราะในไฟล์เรามีแต่ชื่อ Star_Wars) นี่แหละคือสาเหตุที่ทำให้หลายคนทำตามผมในตัวอย่างที่แล้ว แต่ทำตามไม่ได้ เกิดปัญหา เพราะว่าชื่อที่ตั้งขึ้นมามันไม่เหมือน Item ที่เลือกในชั้นแรกนั่นเอง

    สาเหตุที่ชื่อที่ถูกตั้งขึ้นจริง (จากการกด Ctrl+Shift+F3) ไม่เหมือนกับสิ่งที่เราตั้งใจไว้เกิดจากข้อจำกัดของการตั้งชื่อครับ

    ชื่อที่กำลังจะตั้งขึ้นมาใหม่นั้นมีข้อจำกัดดังนี้

    • หากมีช่องว่าง จะถูกแทนที่ด้วย _
      • เช่น Star Wars  จะกลายเป็น Stars_Wars ให้
    • หากขึ้นต้นด้วยตัวเลข (แต่มี Text ต่อ) จะถูกใส่ _ นำหน้าชื่อให้โดยอัตโนมัติ
      • เช่น 13 เกมสยอง กลายเป็น _13_เกมสยอง
    • หากมีแต่ตัวเลข ไม่สามารถตั้งชื่อได้เลย
      • เช่น 300 ไม่สามารถตั้งชื่อได้เลย

    ทางแก้ไขทำไง?

    ทางแก้มีอยู่ 2 วิธีใหญ่ๆ

    1. เขียนสูตรแก้ไข : ตอนที่จะทำ Data Validation ให้เขียนสูตรแปลง item ให้เหมือนกับชื่อที่จะเกิดขึ้นมา เช่น เติมพวก _ ให้โดยอัตโนมัติ
      • เช่น แทนที่เราจะ INDIRECT(A8) ตรงๆ เราก็ INDIRECT(SUBSTITUTE(A8,” “,”_”)) แทนสิ ก็จะแก้ปัญหาเรื่องการมีช่องว่างได้แล้ว…
      • แต่ถ้ามีขึ้นต้นด้วยตัวเลข ก็ต้องมาเขียนดักอีก เช่นให้เริ่มด้วย _ หากใช้ Left เช็คตัวแรกแล้วเป็นตัวเลข ซึ่งจะเห็นว่าเริ่มยุ่งยากแล้ว
      • ยังไงชื่อ 300 ก็มีปัญหาตั้งชื่อไม่ได้อยู่ดี…
      • ดังนั้นผมจึงอยากแนะนำวิธีที่ 2 ดีกว่า เพราะครอบคลุมแก้ไขได้ทุกกรณี
    2. ตั้งชื่อ Dropdown เป็นคำที่ไม่ติดปัญหา แล้วใช้ VLOOKUP เอา : แทนที่เราจะตั้งชื่อ Dropdown ชั้นที่ 2 ด้วยชื่อหนัง ซึ่งอาจเปิดปัญหา เราก็ตั้งชื่อกลางๆ ไปเลย เช่น Movie1,Movie2,Movie3… ก็ได้
      • ก่อนอื่นลบ Define Name เดิมของ Dropdown ชั้น 2 ทิ้งให้หมดก่อน ด้วย [Formula] –> Name Manager
        dropdown9
      • ตั้งชื่อด้วย Movie1, Movie2, Movie3, Movie4 แทน
        dropdown10
      • สร้างความสัมพันธ์กับ Dropdown ชั้นแรก เพื่อจะใช้ VLOOKUP ได้ภายหลัง
        dropdown11
      • จากนั้นใน Data Validation ของ Dropdown ชั้นที่ 2 เราจะใช้ VLOOKUP มาช่วย Map ข้อมูลว่า item ของ Dropdown ชั้นแรก จะ Link กับ Define Name ของ Dropdown ชั้นที่ 2 ยังไง?
        dropdown12
      • เพียงเท่านี้ Dropdown ชั้นที่ 2 ก็ทำงานได้แล้วทุกกรณีdropdown14
      • แม่แต่ 300 ก็ไม่กลัว!
        dropdown13

    วิธีอื่นๆ ในการทำ Dependent Dropdown

    1. ใช้ OFFSET ทำ Dropdown กี่ชั้นก็ได้ อ่านรายละเอียดได้ที่นี่
    2. ใช้ Slicer อ่านรายละเอียดได้ที่นี่
  • แจกโปรแกรมช่วยวางแผนมาตรการ Shopping ลดหย่อนภาษี 15,000 บาท

    เนื่องจากทางภาครัฐมีออกมาตรการ Shopping แล้วลดหย่อนภาษีได้สูงสุด 15,000 บาท (ดูรายละเอียด http://www.rd.go.th/publish/fileadmin/user_upload/PLAN/pasi_2558.pdf และ  https://droidsans.com/shopping-and-traveling-tax-reduction-in-thailand-2558 )

    ผมก็เลยทำโปรแกรมช่วยวางแผน Shopping  ที่มี จุดมุ่งหมายคือ ให้แต่ละคนซื้อของได้ใกล้เคียงรายได้สุทธิตัวเองที่ 15000 ให้มากที่สุด!! 

    เผื่อบ้านไหนมีคนที่มีรายได้ที่ตต้องเสียภาษีหลายคน จะได้แบ่งกันซื้อของให้ได้คุ้มที่สุดไงครับ

    วิธีการทำ ผมทำโดย Solver ธรรมดาๆ วิธีใช้ก็ทำตามนี้ครับ

    1. ให้พิมพ์รายละเอียดราคาสินค้าลงไปในช่องเหลือง
      • คอลัมน์ B อาจไม่พิมพ์ก็ได้ แต่คอลัมน์ C ให้พิมพ์ราคาสินค้าลงไป
      • ถ้าสินค้ามีไม่ถึงล่างๆ ก็ใส่เลข 0 ไปเลยก็ได้
    2. พิมพ์รายได้สุทธิลงในแถวที่ 3 ของแต่ละคนเลยครับ
      • คนที่มีเงินได้สุทธิ ให้พิมพ์เลข 15000 ลงไป
      • ถ้าคนที่เสียภาษีมีไม่ถึง 5 คน ก็พิมพ์ 0 เลยก็ได้ครับ
    3. ลบข้อมูลเดิมโดยเลือก D5:H24 แล้วกดลบทิ้งไปก่อน (จะช่วยให้ Solve ค่าได้ดีขึ้น)
    4. กดใช้ Solver ตามรูปเลย
      *** ใครที่ไม่มี Solver ให้เลือก ต้องเพิ่ม Solver Add-in เข้าไปก่อนครับ (ทำครั้งเดียว)ตามนี้

      • File –> Options
      • คลิ๊ก Add-Ins –> Manage ด้านล่าง –> Excel Add-ins –> กด Go..
      • ติ๊ก Solver Add-in แล้วกด Ok

    shop-for-tax

    สามารถโหลดโปรแกรมได้เลยที่นี่ ==> ShoppingforTax 

  • Excel VBA Basic : แผนดีมีชัยไปกว่าครึ่ง

    Excel VBA Basic : แผนดีมีชัยไปกว่าครึ่ง

    ผมได้พูดถึงเรื่องของ 10 Concepts เริ่มต้นเรียนรู้การเขียนโปรแกรมด้วย Excel VBA ซึ่งเป็นการเกริ่นนำภาพรวมการใช้ VBA ใน Excel ไปแล้ว

    วันนี้ผมจะขอลงรายละเอียดถึง Step แรก นั่นก็คือ ขั้นของ งานวางแผน/ออกแบบ ซึ่งเป็นหัวใจที่สำคัญที่สุดของการเขียนโปรแกรมนั่นเอง

    งานวางแผนนี้ ถ้าจะเปรียบเทียบให้เห็นภาพเข้าใจง่ายๆ ผมอยากให้คุณจินตนาการตามนี้ครับ…

    เมื่อคุณมีผู้ช่วยเป็น Superman

    ถ้าในทีมของคุณมีพนักงานใหม่ที่ทำงานเร็วปรื๊ด (ระดับเดียวกับ Superman) เข้ามาช่วยงานคุณ ซึ่งพนักงานใหม่คนนี้ยอมให้คุณสั่งทำงานอะไรก็ได้ (ขอให้เป็นงานที่ทำใน Excel นะ…) ทำงานถึกแค่ไหนก็ยอม…

    มันคงสุดยอดไปเลยใช่มั้ยครับ?

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

    ผมจะบอกว่า…

    ถ้าคุณหาวิธีสั่งเจ้าพนักงานใหม่ที่ทำงานตรงๆ ซื่อๆ ทื่อๆ คนนี้ได้ คุณก็สั่งงาน VBA ใน Excel ได้ครับ

    เพราะ VBA มันทำตัวแบบนี้เป๊ะเลย! คุณสั่งอะไร มันทำอย่างนั้น ไม่มีเกินเลย ไม่มีคิดเองทั้งสิ้น

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

    (more…)

  • 10 Concepts เริ่มต้นเรียนรู้การเขียนโปรแกรมด้วย Excel VBA

    10 Concepts เริ่มต้นเรียนรู้การเขียนโปรแกรมด้วย Excel VBA

    การเขียนโปรแกรมให้ Excel ทำงานแบบอัตโนมัติด้วย VBA (Visual Basic for Application) เป็นหัวข้อทักษะขั้นสูงใน Excel ที่มีคนอยากเรียนรู้เยอะมากที่สุดตลอดกาลลลลลเลยล่ะ!

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

    VBA คืออะไร?

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

    แนวทาง VBA ที่ผมจะสอน

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

    งานอะไรที่ Excel ทำได้ เราจะปล่อยให้ Excel ทำไป (เช่น พวกสูตรคำนวณ หรือเครื่องมือ Ribbon อย่าง Pivot Table) ส่วนงานไหนที่ทำไม่ได้ เราถึงจะใช้ VBA มาช่วย!!

    ดังนั้นก่อนอื่นคุณควรมีความรู้พื้นฐาน Excel ให้ดีพอสมควรก่อน แล้วค่อยมาเรียนรู้ VBA ในแบบที่ผมจะสอนให้นะครับ

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

    เอาล่ะ…อ่านมาถึงตรงนี้ก็เริ่มยาวแล้ว เพื่อไม่ให้เสียเวลา เรามาดูกันเลยว่า 10 Concepts ที่ผมจะบอกมีอะไรบ้าง?

    Concept 1 : งาน 3 ส่วนของการเขียน VBA ใน Excel

    การเขียนโปรแกรม VBA ขึ้นมาซักชิ้นหนึ่ง ผมอยากให้แบ่งงานออกเป็น 3 ส่วนดังนี้

    3types
    1. งานวางแผน/ออกแบบ : เป็นการวางแผนภาพใหญ่ ว่าจะให้แต่ละส่วนทำงานร่วมกันยังไง เปรียบได้กับผู้บริหารขององค์กร
    2. งานควบคุม : งานที่คอยควบคุมการทำงานว่า จะให้ทำงานชิ้นไหนก่อนหลัง ทำซ้ำกี่ที หรือทำตามเงื่อนไขที่กำหนดก็ได้ เปรียบได้กับเป็นหัวหน้าทีมที่พร้อมคุมพนักงานปฏิบัติการ โดยรับนโยบายแผนงานภาพรวมมากจากผู้บริหารอีกที
    3. งานปฏิบัติการ : เป็นงานที่ต้องลงแรง มี action บางอย่างเกิดขึ้น ซึ่งเป็นการสั่งให้ Excel ทำงานแต่ละชิ้นตามที่เราต้องการ เปรียบได้กับพนักงานระดับปฏิบัติการทั่วไป

    ถ้าลองพิจารณางานแต่ละส่วน จะมีความยากง่ายต่างกัน ดังนี้

    • ส่วนที่ง่ายที่สุด ก็คือ ส่วนที่ 3 : งานปฏิบัติการ
      • โชคดีที่ใน Excel มีเครื่องมือสุดเจ๋งที่เรียกว่า Macro Recorder ซึ่งสามารถ “บันทึก action ที่เราทำบน Excel ให้กลายเป็นภาษา VBA ได้เลย” ดังนั้นถึงคุณจะยังเขียนภาษา VBA ไม่เป็น คุณก็ให้ Macro Recorder ทำหน้าที่นี้ไปได้ (เป็นผู้ช่วยพนักงาน)  นอกจากนี้คุณยังสามารถไปหา Code ในโลกออนไลน์ที่มีคนเขียนเอาไว้ มาประยุกต์ใช้กับ Code ของคุณก็ยังได้!
    • ส่วนที่จะว่ายากก็ยาก จะว่าง่ายก็ง่าย ก็คือ ส่วนที่ 1 : งานวางแผน/ออกแบบ ซึ่งเป็นสิ่งที่ไม่ค่อยเกี่ยวกับเนื้อหาของ Excel หรือ VBA เท่าไหร่
      • เป็นเรื่องของตรรกะในการทำงานของ Program ว่ามันควรจะทำงานอย่างไรเพื่อที่จะแก้ปัญหาที่กำลังเผชิญหน้าอยู่ ซึ่งแต่ละคนอาจมีวิธีแก้ที่แตกต่างกันได้
      • แต่สิ่งสำคัญที่อยากให้ทำคือ คุณควรวางแผนการทำงานโดยรวมของโปรแกรมก่อนว่า หลักการทำงานจะทำยังไง โดยอาจจะวาดเป็น Flow Diagram หรือจะเขียนเป็น Concept แบบภาษาพูดไว้ก็ได้ไม่ว่ากัน ขอให้วางแผนเถอะ!
      • เคล็ดลับคือ หากคุณนึกวิธีแก้ปัญหาหรือเงื่อนไขในสมองคุณได้ คุณก็ให้ VBA ทำตามแบบที่คุณคิดนั่นแหละ แต่ถ้ายังคิดไม่ออก คุณก็แค่ศึกษาทางแก้ไขของคนอื่นไปซักพัก คุณจะพบทางแก้ของตัวเองในที่สุด
    • ส่วนที่เราจะต้องเรียนรู้เพิ่มเติมเป็นหลักก็คือ ส่วนที่ 2 : งานควบคุม 
      • ส่วนนี้เป็นภาษา VBA ที่ไม่สามารถใช้ Macro Recorder มาช่วยได้ ซึ่งผมมีหน้าที่ทำให้คุณสามารถเขียน VBA ส่วนนี้ให้ได้นั่นเอง

    Concept 2 : ทุกอย่างใน Excel คือ พนักงานที่พร้อมจะทำงานให้คุณ!!

    ผมจะบอกว่า องค์ประกอบทุกอย่างใน Excel ล้วนยอมเป็นพนักงานให้คุณสั่งงานได้หมดเลย ไม่ว่าจะเป็นตัวแต่ละ Sheet แต่ละ Cell เครื่องมือ Filter/Pivot ก็ยอมให้คุณสั่งงานได้เช่นกัน ซึ่งภาษาอย่างเป็นทางการของ “พนักงาน” ที่ผมพูดถึง เรียกว่า “Object” นั่นเองครับ

    servant

    ถ้าเรามี Object หลายตัว (คนทำงานหลายคน) การที่เราจะสั่งงานได้นั้น เราจะต้องมีวิธีเรียกถึงสิ่งนั้นจริงมั้ยครับ? เช่น ถ้าคุณมีพนักงานอยู่ 3 คนที่พร้อมจะทำตามคำสั่งคุณได้ คุณก็ต้องมีวิธีเรียกแต่ละคนว่าจะเรียกเค้าว่าอะไร? เช่น พนักงาน A นัดหมายการประชุม, พนักงาน B เตรียมขนมเบรค, พนักงาน C จดบันทึกการประชุม เป็นต้น

    แปลว่า เราจะต้องมีวิธีอ้างอิงเพื่อเรียกใช้พนักงานแต่ละคนนั่นเอง… (เรียกชื่อได้ก็ควบคุมได้)

    เรื่องของเรื่องคือ เราจะอ้างอิงไปหาคนงานแต่ละคนใน Excel ยังไงดีล่ะ?

    ข่าวดีคือ เรื่องนี้คุณสามารถใช้ Macro Recorder ลองบันทึกการสั่งการของเราที่ทำกับ Object นั้นๆ ใน Excel แล้วค่อยมาดู Code VBA ภายหลังได้ว่าจะต้องเรียก Object นั้นว่าอะไร แค่นี้ก็ไม่เป็นปัญหาแล้วครับ ดังนั้นเรื่องนี้จึงไม่ใช่สิ่งที่ต้องกังวลมากนัก

    ซึ่งเมื่อคุณลองดู Code ที่โผล่มาจะพบว่า แต่ละ Object นั้นมีความเป็นแม่ลูกกันอยู่พอสมควร และจะอยู่ในรูปแบบของ Objectแม่.Objectลูก เช่น ถ้า Object แม่เป็นคน เราก็สามารถอ้างอิงไปที่แขนของนาย A ได้ว่า นายA.แขน หรือจะอ้างอิงไปที่แขนของนาย B ได้ว่า นายB.ขา เป็นต้น

    Concept 3 : เราสั่งอะไรกับ Object ได้บ้าง?

    เมื่อรู้แล้วว่าเราจะเรียก Object แต่ละอันว่าอะไร… คำถามถัดไปก็คือ แล้วเราจะสั่งงานอะไรมันได้บ้าง?

    การสั่งงาน Object นั้นมีอยู่ 2 ลักษณะด้วยกัน คือ

    1. สั่งให้มันทำงานบางอย่าง (มีการกระทำ เช่น ลบ sheet, เพิ่มแถว, sort ข้อมูล)
      ซึ่ง action ที่ Object ทำได้ มีชื่ออย่างเป็นทางการว่า Method ครับ (คล้ายๆ กับ Verb ในภาษาอังกฤษ)
    2. สั่งให้เปลี่ยนลักษณะ/คุณสมบัติ (ทำให้คุณสมบัติเปลี่ยนไป เช่น เปลี่ยนค่า เปลี่ยนสี)
      ซึ่งคุณสมบัติของ Object นั้นมีชื่ออย่างเป็นทางการว่า Property ครับ (คล้ายๆ กับ Adjective ในภาษาอังกฤษ)
    object-fix

    ซึ่งแต่ละ Object จะมี Property และ Method เป็นของตัวเอง เช่น เครื่องมือ Filter มันทำการ Filter ได้ แต่ไม่สามารถสั่ง Filter ให้ Pivot สรุปข้อมูลได้ (เพราะไม่ใช่หน้าที่ของมัน) เป็นต้น

    แล้วเราจะรู้ได้ยังไงว่า Object แต่ละตัวมี Method หรือ Property อะไรบ้าง?

    วิธีที่ง่ายที่สุดก็คือใช้ Macro Recorder (อีกแล้ว!) บันทึกสิ่งที่เราทำใน Excel แล้วมาดู Code เช่นเดิมครับ แต่วิธีสังเกตคือ ชื่อของ Method และ Property จะตามอยู่หลังจากชื่อ Object ครับ ซึ่งจะอยู่ในรูปแบบ Object.Method หรือ Object.Property ครับ

    ยกตัวอย่างเช่น คุณสามารถกดบันทึก Macro แล้วลองสั่ง Filter ให้ทำการกรองข้อมูล จากนั้นค่อยไปดู Code VBA ที่ถูกสร้างขึ้นมาได้ซึ่งคุณจะเห็น Property และ Method ที่ถูกสร้างขึ้นมาอย่างแน่นอน ดังนั้นเรื่องนี้จึงไม่ใช่สิ่งที่ต้องกังวลอีกเช่นกัน

    Concept 4 : ตัวแปร และ Operator

    ตัวแปร

    การเขียนโปรแกรมนั้นมี Concept หนึ่งที่สำคัญนั่นก็คือ ตัวแปร

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

    หน้าที่ของมัน… ถ้าจะให้เข้าใจง่ายๆ ก็เป็นเหมือน กล่องที่เอาไว้เก็บค่าต่างๆ ซึ่งเราสามารถอ้างอิงค่าจากกล่องตัวแปรนี้ได้ ตรงนี้จะคล้ายๆกับการใช้ Cell Reference ใน Excel ที่เราสามารถเก็บค่าที่คำนวณแล้วเอาไว้ใน Cell เช่น A1 แล้วสามารถเอาค่าไปใช้ต่อได้โดยการใช้ Cell Reference ได้

    variable

    แต่ VBA เจ๋งกว่าตรงทีเราเปลี่ยนค่าของตัวแปรไปเรื่อยๆ ได้ด้วย! ทำยังไงมาดูกัน

    วิธีการใส่ค่าใหม่ลงไปในตัวแปร

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

    x=30

    ถ้าต่อมาเราแสดงค่า x+5 ก็จะได้ค่า 35 ออกมานั่นเอง

    การสั่งงาน VBA จะเอาค่าฝั่งขวา มาใส่ในตัวแปรฝั่งซ้าย ดูแล้วเหมือนไม่มีอะไร แต่ถ้าเจอแบบนี้อาจมึนได้ เช่น
    x=x+1

    เฮ้ย ท่าจะเพี้ยนแล้ว x จะเท่ากับ x +1 ได้ไงกัน!?

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

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

    Operator

    นอกจากตัวแปรแล้ว ใน VBA ก็จะมีพวกตัวดำเนินการ (Operator) คล้ายๆ Excel เลย  เช่น +,-,*,/, =,>,<,& …และอีกมายมาย ซึ่งเราสามารถนำมาใช้เขียนคำสั่งต่างๆ ได้ อีกเยอะแยะครับ เช่น เครื่องหมายทางคณิตศาสตร์เอาไว้คำนวณ, เครื่องหมายเปรียบเทียบ ทำให้เกิดค่า TRUE/FALSE ได้, เครื่องหมาย & เอาไว้เชื่อมข้อความ เป็นต้น

    Concept 5 : คำสั่งภาษา VBA จะทำงานจากบนลงล่างทีละบรรทัด

    VBA  มันจะทำจากบรรทัดบนลงล่างครับ (สั่งก่อนทำก่อนว่างั้นเถอะ)

    ดังนั้น ถ้าเขียนว่า

    พนักงาน A นัดหมายการประชุม

    พนักงาน B เตรียมขนมเบรค

    พนักงาน C จดบันทึกการประชุม

    แปลว่า พนักงาน A นัดหมายการประชุม ก่อน จากนั้น พนักงาน B เตรียมขนมเบรค แล้วจบด้วย พนักงาน C จดบันทึกการประชุม เรียงตามลำดับแบบนี้ ทีละบรรทัด ทีละคำสั่ง ไม่มีอะไรยุ่งยากครับ

    ไม่อยากสั่งทีละคำสั่ง อยากสั่งเป็นชุดเลยได้มะ?

    ในหลายๆ สถานการณ์ ถ้าผมขี้เกียจสั่งคำสั่ง 3 อันแยกกันแบบนั้นทุกครั้ง ผมก็สามารถรวบให้มันอยู่ภายใต้ชุดคำสั่งเดียวกันได้เลยครับ ซึ่งใน VBA เราจะเรียกชุดคำสั่งว่า Sub (ซึ่งจะ Run ชุดคำสั่งย่อยที่อยู่ภายในนั้นจากบนลงล่าง)

    sub

    เช่น ถ้าผมรวม 3 อันนั้นเข้าไปใน Sub ที่ชื่อว่า จัดงานประชุม ดังนี้

    Sub จัดงานประชุม()

    พนักงาน A นัดหมายการประชุม

    พนักงาน B เตรียมขนมเบรค

    พนักงาน C จดบันทึกการประชุม

    End sub

    แล้วครั้งต่อไปเมื่อผมสั่งคำสั่งว่า Call จัดงานประชุม() คราวนี้ VBA ก็จะทำ 3 คำสั่งนั้นตามลำดับเลย! ไม่ต้องมาสั่งแยกอีกต่อไป

    แล้วถ้ามีอยู่ Action เดียวยังต้องมี Sub อีกมั้ย?

    ใน VBA เราไม่สามารถใส่คำสั่งโดยที่ไม่มีที่อยู่ได้ แปลว่าถึงมีอยู่คำสั่งเดียว เราก็ต้องเอาไว้ใน Sub อยู่ดี

    แต่ในความจริงแล้ว ยังมีชุดคำสั่งอีกแบบนอกจาก Sub นั่นก็คือ Function ซึ่งจะพูดถึงใน Concept ถัดไป

    Concept 5 : เราสร้างฟังก์ชั่นใช้เองใน Excel ได้ด้วย VBA

    อย่างที่ผมบอกว่านอกจาก Sub แล้ว ใน VBA เรายังมีชุดคำสั่งอีกประเภทนั่นก็คือ Function นั่นเอง แล้วมันต่างจาก Sub ยังไงล่ะ?
    คำตอบคือ Function ต่างจาก sub ตรงที่สุดท้ายแล้วจะส่งค่าผลลัพธ์บางอย่างกลับออกมายังตัวแปร (ที่ชื่อเดียวกับฟังก์ชั่น) ด้วย

    พูดง่ายๆ Sub คือชุดคำสั่งที่ทำ Action ต่างๆ แล้วจบไป…
    แต่ Function ทำอะไรบางอย่าง (เช่นคำนวณค่า) แล้วส่งผลลัพธ์กลับมาไว้ในตัวแปร…

    function

    ถ้าฟังแล้วยังดูงงๆ อีก ผมอยากให้นึกถึงฟังก์ชั่นที่เราใช้ในสูตร Excel ตามปกติครับ มันคือสิ่งเดียวกันเลย!

    เช่น ฟังก์ชั่น LEFT จะเห็นว่ามี Argument อยู่ 2 ตัวด้วยกัน ซึ่งพอใส่ Input เข้าไปแล้ว ฟังก์ชั่น LEFT ก็จะทำงานอะไรซักอย่าง สุดท้ายก็จะได้ผลลัพธ์คือ อักขระจำนวน num_char จากทางซ้ายของข้อความ text  ออกมาใน Cell จนได้

    ซึ่งอันนี้แหละที่คล้ายกับการใช้ชุดคำสั่ง Function ใน VBA ซึ่งจะได้ผลลัพธ์เก็บไว้ในตัวแปร
    เช่น ถ้าผมอยากสร้างฟังก์ชั่นไว้หา % ที่เปลี่ยนแปลงไป โดยจะให้ชื่อว่า PERDIF ผมก็ทำได้ดังนี้

    Function PERDIF(ค่าก่อน,ค่าหลัง)

    ค่าที่เปลี่ยน = ค่าหลัง-ค่าก่อน

    PERDIF = ค่าที่เปลี่ยน/ค่าก่อน

    End Function

    เพียงแค่นี้ คุณก็สามารถใส่สูตร =PERDIF(100,150) ใน Cell แล้ว Excel ก็จะคำนวณออกมาจนได้เป็น 0.5 หรือ 50% ได้ทันที!
    เห็นมั้ยว่าการสร้างฟังก์ชั่นใช้เองไม่ยากเลย นี่แหละคือพลังของ VBA ล่ะ นี่ถ้าเอาไปใช้กับฟังก์ชั่นซับซ้อนๆ จะเจ๋งขนาดไหน!!

    Concept 6 : ชุดคำสั่ง VBA จะเริ่มทำงานเมื่อมีเหตุการณ์ (Event) บางอย่าง

    ชุดคำสั่งทั้ง Sub และ Function อยู่ดีๆ มันจะเริ่มทำงานเองไม่ได้ครับ มันจะต้องมีกลไกบางอย่างไปสั่งการให้ VBA Run ชุดคำสั่งดังกล่าว ซึ่งเราจะเรียกกลไกหรือเหตุการณ์ที่มาสั่งการนี้ว่า Event ครับ

    ตัวอย่างของ Event เช่น การคลิ๊กปุ่มบนหน้าจอ, การกดปุ่มบน Keyboard, การเปิดไฟล์ขึ้นมา, การแก้ไขข้อมูล, การเรียกใช้ Sub , การเรียกใช้ Function เป็นต้น

    event

    แปลว่าเราสามารถกำหนดได้ว่า เมื่อเกิดเหตุการณ์ xx จะใช้สั่งคำสั่ง yy เป็นต้น ซึ่งสิ่งเหล่านี้มีประโยชน์มากในการทำงานอัตโนมัติ เมื่อผู้ใช้งานทำงานต่างๆ ใน Excel ก็ล้วนสามารถสั่งให้ VBA ทำงานได้ทั้งสิ้น (ที่ฮิตมากคือการกดปุ่ม, การเปิดไฟล์เข้ามา)

    เช่น

    Private Sub Workbook_Open()

    คำสั่ง A (ที่จะให้ทำ เมื่อเปิดไฟล์ขึ้นมา)

    End Sub

    เมื่อเราใส่คำสั่งลงไปใน Event Workbook_Open() แปลว่า
    เมื่อผู้ใช้งานเปิดไฟล์นี้ขึ้นมา มันจะรันคำสั่ง A โดยอัตโนมัติเลย เจ๋งป่ะล่ะ!!

    เรียกใช้ Sub หรือ Function ซ้อนกันก็ได้นะ

    sub-in-sub

    สิ่งที่ผมอยากจะบอกเพิ่มเติมก็คือ เราสามารถเรียกใช้ Sub หนึ่งภายใต้อีก Sub/Function ได้ เช่น เรียก SubA ถายใต้ Sub B ได้ และในทำนองเดียวกัน เราก็สามารถเรียกใช้ Function หนึ่งภายใต้อีก Sub/Function ได้เช่นกัน!!

    จะเห็นได้ว่า ถ้ามันซ้อนกันได้ขนาดนี้ VBA ก็จะทรงพลังมากขึ้นอีก เพราะเราใช้หลักการของ Divide & Conquer หรือ แบ่งหน้าที่กันทำทีละส่วนได้ แล้วค่อยสั่งคำสั่งให้มันมาทำงานร่วมกันอีกที!

    Concept 7 : ถ้าอยากให้ VBA ทำงานตามเงื่อนไขทำไง?

    อย่างที่ผมบอกใน Concept 5 ไปว่า VBA จะทำงานทีละบรรทัด.. แล้วถ้าเราไม่อยากให้มันทำงานทีละบรรทัด ต้องทำไงล่ะ?

    เราก็ต้องใส่คำสั่งที่ทำงานประเภท งานควบคุม ได้ ซึ่งการควบคุมมีประเภทหลักๆ ดังนี้

    IF
    1. ประเภททำงานตามเงื่อนไข เช่น
      • IF…Then…Else สามารถสั่งได้ว่า ถ้าเงื่อนไขเป็นจริง ให้ใช้ชุดคำสั่งอะไร เป็นเท็จจะใช้ชุดคำสั่งอะไร (มีทางแยก 2 ทาง) คล้ายๆ กับฟังก์ชั่น IF ของ Excel เลยครับ
      • Select Case… :ทำได้คล้ายๆ IF แต่จะแยกได้หลายๆ ทางเลย กำหนดได้ว่า ถ้าตัวแปรที่สนใจมีค่าเป็น A, B, C แต่ละอันจะให้ทำอะไรต่อ ตัวนี้คล้ายๆ กับฟังก์ชั่น CHOOSE ของ Excel เลยครับ แต่ดีกว่าตรงที่ไม่ได้จำกัดว่าตัวแปรต้องเป็นตัวเลขเหมือนกับ CHOOSE
      • On Error : เอาไว้จัดการเวลาเจอค่า Error ต่างๆ
    2. ประเภทให้ทำงานซ้ำ เช่น
      • For … Next  : สามารถกำหนดให้ทำงานซ้ำ (Loop) เป็นจำนวนรอบที่ต้องการได้ ซึ่งจะใช้ตัวแปร (เช่น i) มาช่วยนับจำนวนรอบ  เช่น อยากทำงาน 100 รอบ เมื่อเริ่มรอบแรกตัวแปรมีค่าเป็น 1 พอทำจบ โปรแกรมจะเพิ่มค่าไปอีก 1 ซึ่งทำจนตัวแปร i มีค่าเป็น 100 ก็จะเลิกทำนั่นเอง
      • For Each… : ใช้กับ Object ที่มีลูกๆ หลายตัว สามารถทำงานซ้ำจนกว่าจะวนครบลูกๆ ทุกคน
      • Do While…..Loop : สามารถกำหนดให้ทำซ้ำขณะที่เงื่อนไขยังเป็นจริง (ไม่รู้จำนวนรอบที่แน่นอน)
      • Do Until…..Loop : สามารถกำหนดให้ทำจนกว่าเงื่อนไขจะเป็นจริง (ไม่รู้จำนวนรอบที่แน่นอน)

    เมื่อรู้คำสั่งที่จะใช้ควบคุม Code VBA ได้แล้ว เราก็สามารถที่จะใช้เทคนิค Macro Recorder เพื่อสร้าง Code ที่เป็นส่วนงานปฏิบัติการ จากนั้นค่อยเอา Code ที่เอาไว้ควบคุมงานไปครอบ เพียงเท่านี้เราก็สามารถสร้างโปรแกรมที่ทรงพลังได้!

    Concept 8 : VBA เรียกใช้ฟังก์ชั่นของ Excel ได้ แถมควบคุมการทำงานนอก Excel ก็ยังได้!!

    worksheetfunction

    จริงๆ แล้วใน VBA ก็มีฟังก์ชั่นพื้นฐานหลายๆ อย่างให้ใช้โดยไม่เกี่ยวกับฟังก์ชั่นใน Excel เลย! บางตัวก็คล้ายกับฟังก์ชั่นใน Excel บางตัวก็ไม่เหมือนเลย เช่น LEN (นับจำนวนอักขระ), Cstr (แปลงให้เป็น Text), Datepart ( ดึงเอาส่วนของวันที่ออกมา เช่น วัน เดือน ปี), Instr (หาว่าอักขระที่ต้องการอยู่ตำแหน่งที่เท่าไหร่ของคำ) เป็นต้น

    แม้จะมีฟังก์ชั่นให้เลือกเยอะแยะ แต่มันก็ไม่เยอะเท่าใน Excel แน่นอน! ข่าวดีคือ ใน VBA เราสามารถเรียกใช้ฟังก์ชั่นของ Excel ได้ด้วย โดยการใช้คำสั่งที่ชื่อว่า WorksheetFunction ในรูปแบบ Application.WorksheetFunction.ชื่อฟังก์ชั่นในExcel(argument) เพียงเท่านี้คุณก็สามารถดึงพลังของ Excel มาช่วยใน VBA ได้อีกเยอะแยะ

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

    Concept 9 : ติดปัญหาไม่ต้องกลัว ใช้เครื่องมือ Debug สิ

    การทำงานใน VBA นั้น แทบไม่มีทางที่คุณจะเขียน Code ทีเดียวแล้วใช้ได้เลยแบบไม่ผิดพลาด สิ่งสำคัญคือ ถ้าเกิด Error ขึ้นแล้วเราจะต้องหาทางแก้ไข

    311_0

    credit รูป : http://university.utest.com/writing-quality-bug-reports-and-utest-etiquette/

    ซึ่ง VBA ก็มีเครื่องมือช่วยเหลือดีๆ มาช่วยมากมาย โดยเฉพาะเครื่องมือในหมวด Debug ( Bug เป็นศัพท์คอมพิวเตอร์ หมายถึงความผิดพลาดของโปรแกรม ดั้งนั้น Debug จึงหมายถึงการกำจัดข้อผิดพลาดนั่นเอง)

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

    ซึ่งเมื่อแก้ไขข้อผิดพลาดได้แล้ว ก็สามารถลอง Run โปรแกรมใหม่ เพื่อตรวจดูว่าข้อผิดพลาดหายไปรึยัง? (หรือมีข้อผิดพลาดใหม่เพิ่มมาอีก!)

    ปัญหาที่อาจจะพบได้บ่อยๆ และควรระวังไว้

    • รูปแบบของ Error ในการเขียนโปรแกรม : มี 3 รูปแบบใหญ่ๆ คือ
      • Error แบบจะๆ เขียนรูปแบบผิด ทำให้ Run ไม่ได้ : แบบนี้มันจะเตือนเราจะๆ เลย โดนเตือนก็แก้ไป เปิดหาวิธีการเขียนที่ถูกต้องตามเว็บ ตามหนังสือ หรือใน Help ก็ได้ ไม่ต้องคิดมากครับ
      • Run ได้แล้ว แต่ไปหยุดชะงักที่บางที่ : แบบนี้เจอที่ผิดแล้วค่อยแก้ไขไป ด้วยการ Debug จะช่วยได้ครับ
      • Run ได้ฉลุย แต่ผลลัพธ์ผิดโดยสิ้นเชิง : แบบนี้เรียกว่าผิดที่แนวคิดและตรรกะตั้งแต่แรก ต้องทบทวนความเข้าใจกันใหม่เลยทีเดียว
    • VBA เมื่อ Run Code ไปแล้วจะ Undo ไม่ได้! : ข้อนี้เป็นข้อจำกัดของ VBA เลย ที่ว่าเมื่อทำงานตามคำสั่งไปแล้ว หากเราไม่พอใจ เราจะไม่สามารถ Undo ได้เลย หากเผลอสั่งลบไป ก็จะหายไปเลยตลอดกาล!
      • ทางแก้ไข : หมุ่น Save Excel ไว้ก่อนจะ Run Code VBA เสมอ (Save ไหว้หลาย Version ได้ก็ดี 555)
    • มีการย้ายที่ Cell แล้ว Error : มีการเขียน VBA อ้างอิงกับ Cell อันนึงไว้โดยใช้ Cell Reference แต่ภายหลัง Cell นั้นถูกย้ายที่ใน Sheet Excel (ไม่ว่าจะ Cut/Insert/Delete) ผลคือ VBA ยังอ้างอิงไปยังที่เก่าอยู่ทำให้เกิด Error ได้
      • สาเหตุ : การเขียน Code ใน VBA มันไม่ฉลาดเหมือนสูตรใน Formula Bar ที่ว่าหากเราย้ายที่ Cell อ้างอิงแล้วสูตรจะย้ายตามให้โดยอัตโนมัติ เพราะ VBA จะยึดตามสิ่งที่เราเขียนไว้ ไม่มีการเปลี่ยนแปลง Code ให้เด็ดขาด
      • ทางแก้ไข : ให้ใช้การอ้างอิงไปที่ Defined name แทนการอ้างไปที่ Cell Reference เพราะ Defined Name มันเป็นส่วนหนึ่งของ Excel เองที่มีความฉลาดในการย้ายที่ Cell อยู่แล้ว

    Concept 10 : ความสามารถของ VBA ขึ้นกับจินตนาการของคุณ!

    จริงๆ Concept หลักๆ ของ VBA ก็ไม่พ้น 9 ข้อข้างบนอย่างที่ผมบอกไปแหละครับ มีแค่นี้จริงๆ แต่การที่เราจะสร้างโปรแกรม VBA เจ๋งๆ ขึ้นมาได้นั้น มันขึ้นอยู่กับความคิดของเรามากกว่า ว่าจะแก้ปัญหาที่พบเจอด้วยวิธีไหนดี?

    imagination

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

    ดังนั้นอย่าหยุดพัฒนาครับ ใครยังไม่ได้มีโอกาสลองใช้ VBA ก็เริ่มลองได้เลยครับ ไม่มีอะไรยากเกินความพยายาม!

    Step ต่อไป?

    ทั้งหมดในบทความนี้เป็นเพียง Concept ปูพื้นฐานทางความคิดก่อนครับ ตอนถัดๆ ไปจะมีตัวอย่างให้เห็นถาพชัดขึ้นนะ (โดยใช้ concepts ที่บอกนี่แหละ) อย่าลืมติดตามกันต่อนะครับ ^^

  • สร้างตารางสรุปยอดผ่อนเงินกู้ ด้วย Data Table

    สร้างตารางสรุปยอดผ่อนเงินกู้ ด้วย Data Table

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

    ก่อนอื่นให้สร้างการคำนวณยอดผ่อนต่องวดของซักสถานการณ์นึงให้ได้ก่อน ซึ่งเราจะใช้สูตร PMT ในการคำนวณดังภาพ

    =PMT(rate,nper,pv,[fv],[type])
    =PMT(อัตราดอกเบี้ยต่องวด,จำนวนงวดผ่อน,เงินต้น ให้ใส่ติดลบ เพราะ cash flow คนละทิศกัน)
    หมายเหตุ: ตัวอื่นเป็น optional ไม่ต้องใส่ก็ได้ครับ

    pmt-1

    จากนั้นเราก็สร้างตารางสรุป ว่าจะให้ค่าเปลี่ยนไปอย่างไรบ้าง โดยช่องหัวมุมให้ Link สูตรไปยังคำตอบ (B6) ให้เรียบร้อยก่อน

    (more…)
  • เวลาของคุณมีค่าเท่าไหร่? สอนวิเคราะห์ด้วย Data Table เบื้องต้น

    เวลาของคุณมีค่าเท่าไหร่? สอนวิเคราะห์ด้วย Data Table เบื้องต้น

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

    นี่คือประโยคเริ่มต้นในคำนำของ หนังสือ Excel Level Up! ที่ผมเขียนไว้ ซึ่งเป็นเรื่องที่ผมเน้นมากมาโดยตลอด และมันคือวัตถุประสงค์ของการทำ inwexcel ออกมาเลยล่ะ!

    แล้วทำไมผมต้องเน้นนักเน้นหนาเรื่องการลดเวลาในการทำงาน?

    ก็เพราะเวลาเป็นหนึ่งในทรัพยากรที่ค่าที่สุดนั่นเอง! แถมเวลาคุณจะยิ่งมีค่าเยอะมากขึ้นเรื่อยๆ ตามกาลเวลาด้วย…
    ยิ่งคุณรวยมากขึ้น เวลาก็จะยิ่งมีค่ามากขึ้นไปเรื่อยๆ จนถึงขนาดมี Joke ที่บอกว่า ถ้า บิล เกตส์ ทำเงินตกพื้น $1,000 เค้าก็ไม่จำเป็นต้องก้มเก็บ เพราะว่ารายได้เค้ามากถึงวินาทีละ $250 นั่นเอง (แป๊ปเดียวก็ได้คืนแล้ว!)

    ดังนั้นเวลาของ Bill Gates จึงมีคุณค่าอยู่ที่ $250 ต่อวินาทีนั่นเอง…

    คุณค่าจริงๆ ของคนเรานั้นมากกว่าค่าจ้างนะ

    สมมติว่ามีคนจ้างคุณทำงานด้วยเงิน ชม.ละ 100 บาท แปลว่าคุณค่าที่คุณสร้างให้นายจ้างได้จริง จะต้องมากกว่า 100 แน่นอน เพราะถ้าจ้างแล้วไม่กำไร เค้าจะจ้างทำไม? อีกไม่นานคงต้องเลิกจ้างแล้วล่ะ… ดังนั้นเวลา 1 ชม. ของคุณย่อมมีคุณค่ามากกว่า 100 บาทที่เป็นค่าจ้างของคุณจริงมั้ยครับ?

    ผมจึงขอเรียกค่าจ้างของคุณ ว่าเป็นคุณค่าขั้นต่ำของคุณแล้วกัน

    แล้วเวลาของคุณมีค่าขั้นต่ำเท่าไหร่ล่ะ?

    คุณค่าเวลาของพวกเรา โดยเฉพาะมนุษย์เงินเดือน ก็จะคิดจากค้าจ้างซึ่งเป็นรายได้ต่อเดือน
    สมมติว่า ผมเงินเดือนประมาณ 22,000 บาท จะคิดเป็นรายได้ต่อชั่วโมงดังนี้

    สมมติทำงาน 22 วัน/เดือน x 8 ชม./วัน = 22,000/22/8 = 125 บาท / ชม. หรือ คิดใน Excel ได้ดังนี้

    your-time-value-1fix2

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

    ถ้าการคำนวณไม่ซับซ้อนมาก เราอาจเขียนสูตรให้อยู่บรรทัดเดียวกัน แล้วลาก Copy สูตรลงมาได้แบบนี้

    your-time-value-2

    ซึ่งยิ่งถ้าข้อมูลมีหลาย Step ก็จะเปลืองที่ค่อนข้างมาก

    ดังนั้น วันนี้ผมมีวิธีทำอีกแบบนึงมาเสนอ นั่นก็คือ ใช้เครื่องมือ Data Table มาช่วยนั่นเอง

    (more…)

  • VLOOKUP หลายเงื่อนไข ง่ายนิดเดียว!

    VLOOKUP หลายเงื่อนไข ง่ายนิดเดียว!

    มีหลายคนถามผมมาบ่อยมาก ว่าถ้าเราอยากจะ VLOOKUP หลายเงื่อนไข (Lookup_Value มี 2 ช่องขึ้นไป) ต้องทำยังไงดี? ตัวผมเองก็ดันไม่ได้เขียนตัวอย่างนี้ไว้ในหนังสือซะด้วยสิ ก็เลยขอมาเขียนในนี้ให้อ่านกันฟรีๆ เลยแล้วกัน!

    *สำหรับคนที่อยากรู้วิธี VLOOKUP คำเดียว แต่ได้ผลลัพธ์กลับมาหลายค่า ให้ดูตาม link นี้แทนครับ

    VLOOKUP หลายเงื่อนไขหรือมี Lookup_value หลายตัวได้ด้วยเหรอ?

    ผมจะบอกว่า ไอ้ lookup_value ของ VLOOKUP เนี่ย มันมีได้แค่ตัวเดียวแหละครับ
    ก็มันมี Argument เดียวไงจำได้มั้ย?
    มันเขียนว่า =VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

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

    คำตอบก็คือ…มันมี Trick ครับ ถ้าคิดให้ดีๆ

    เราสามารถเอาค่าที่เราต้องการจะ Lookup ที่มีหลายๆ เงื่อนไขจับมัดเป็น Lookup_Value ก้อนเดียวก็ได้นี่นา

    ถ้ารู้แบบนี้แล้ว จะกลัวอะไรครับ? มาลองดูตัวอย่างจริงกันเลยดีกว่า!

    สมมติเรามีข้อมูลแบบนี้ครับ

    vlookup-multiple-1fix

    เราต้องการเอาข้อมูลอ้างอิงข้างบน มาสรุปเป็นตารางข้างล่าง  ซึ่งจะเห็นว่าเราไม่สามารถใช้ VLOOKUP ค่า A B C ตรงๆ ได้ เพราะการ Lookup แบบ Exact Match ถ้าเจอค่าซ้ำกันมันจะได้ค่าแรกสุดกลับมาเสมอ

    วิธีแก้ก็คือ ต้องทำให้ค่าที่ Lookup ไม่ซ้ำกันนั่นเอง โดยการจับค่ามามัดรวมกันเป็นค่าเดียว เช่น เอา สินค้า กับ คนขายมาเชื่อมกัน

    ซึ่งวิธีเชื่อมเราก็ใช้เครื่องหมาย & มาเชื่อมง่ายๆ นี่แหละครับ แต่ที่สำคัญต้องเชื่อมแล้วไม่ซ้ำกับบรรทัดอื่นนะครับ

    vlookup-multiple-2

    ข้อควรระวัง 1

    แต่วิธีนี้อาจมีความเสี่ยงตรงที่ ถ้าค่าที่เราเอามาเชื่อมกันแล้วมันอาจไปซ้ำกับค่าอื่นได้ เช่น

    • เชื่อม AA กับ ข ==> AAข
    • เชื่อม A กับ Aข ==> AAข
      ซึ่งออกมาเหมือนกันทั้งที่ตั้งต้นคนละอันเลย!

    ดังนั้นผมแนะนำให้ตอนเชื่อมตั่นด้วยสัญลักษณ์แปลกๆ เช่น | เสมอ ซึ่งป้องกันค่าไม่ให้ซ้ำกันโดยไม่ตั้งใจได้ เช่น

    • เชื่อม AA กับ ข ==> AA|ข
    • เชื่อม A กับ Aข ==> A|Aข
      ออกมาเป็นคนละอันกัน ซึ่งถูกต้อง!

    ดังนั้นคอลัมน์พิเศษของผมจึงออกมาเป็นแบบนี้

    vlookup-multiple-3

    ทีนี้เราก็สามารถ VLookup ได้แล้วล่ะครับ

    =VLOOKUP($C13&”|”&D$12,$B$2:$E$9,4,0)

    ซึ่ง $C13&”|”&D$12 ก็คือ สินค้า|คนขาย นั่นเอง

    VLOOKUP หลายเงื่อนไข

    ตัวที่ออกมาเป็น #N/A แสดงว่าไม่อยู่ในตารางข้างบน ซึ่งเราก็สามารถแปลงให้เป็น 0 ได้ โดยการใช้ IFERROR ซ้อนไปให้แสดง 0 แทน เป็นต้น

    vlookup-multiple-5

    แค่นี้ก็สามารถได้ผลลัพธ์ตามที่ต้องการแล้วครับ

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

    เทคนิคเสริมและข้อควรระวัง! กรณีข้อมูลที่สรุปเป็นตัวเลข

    ขอบคุณ คุณ Songsak YO Kitthawonarcheep มากครับ ที่เข้ามาเตือนในเพจ Facebook เกี่ยวกับตัวอย่างข้างบน ซึ่งอาจผิดได้ในบางกรณี

    กรณีที่ข้อมูลที่ต้องการนำมาสรุปผลเป็นข้อมูลตัวเลข หรือบางทีข้อมูลดิบอาจมี Lookup_Value หลายบรรทัดซ้ำกัน เช่น มีสินค้า A กับ คนขาย นาย ก คู่กันหลายบรรทัด (ทำให้ค่า Lookup_Value ไม่ใช่ค่า unique อย่างแท้จริง) การใช้ VLOOKUP ทำให้ได้มาแต่ค่าแรก ซึ่งจะทำให้ผลสรุปผิดได้

    วิธีที่ดีกว่าในกรณีที่ข้อมูลเป็นตัวเลขแบบนี้ คือ การใช้พวก SUMIF หรือ SUMIFS มาช่วยแทน (คิดเหมือน Pivot Table) เช่นตามรูปนี้ครับ

    vlookup-multiple-6

    สังเกตว่าได้ค่าเท่ากับวิธี VLOOKUP ข้างบนเป๊ะเลย (ถ้าค่า Lookup_Value ซ้ำกันหลายบรรทัด วิธีนี้จะถูกต้องกว่า เพราะ VLOOKUP จะได้แต่ค่าบนสุดทำให้ผลออกมาน้อยเกินจริง) คำนวณเร็วกว่า แถมไม่ต้องมาดัก Error ด้วย เจ๋งจริงๆ ครับ

    เพียงแต่วิธีนี้มีข้อจำกัด คือ ใช้ได้เฉพาะกับข้อมูลที่เป็นตัวเลขเท่านั้น ถ้าข้อมูลเป็น Text ต้องใช้พวก VLOOKUP มาช่วย แล้วถ้ามี Text ซ้ำกันหลายบรรทัด ก็ต้องพยายามทำให้ไม่ซ้ำแหละครับ ต้องเพิ่มคอลัมน์เพื่อให้มันไม่ซ้ำให้ได้ แค่นั้นเอง

  • 10 ข้อคิดจากเกมออนไลน์ ใช้พัฒนาความก้าวหน้าทักษะ Excel

    10 ข้อคิดจากเกมออนไลน์ ใช้พัฒนาความก้าวหน้าทักษะ Excel

    ใครว่าเกมไร้สาระ ผมขอเถียงเลยด้วยบทความนี้ ข้อคิดจากเกมดีๆ นั้นมีมากมาย มีอะไรบ้างมาดูกันครับ!

    Life is a Game

    ผมเห็นด้วยเต็มๆ กับคำพูดนี้ โดยเฉพาะอย่างยิ่งช่วงที่ผมเริ่มฝึกฝนการใช้ Excel ใหม่ๆ ผมรู้สึกว่าผมกำลังเล่นเกม Online RPG อยู่ชัดๆ

    มันทำให้ผมนึกย้อนกลับสมัยที่ผมเรียนมหาวิทยาลัย (ประมาณปี 2001…) ช่วงนั้นเกมออนไลน์ที่ชื่อว่า Ragnarok Online กำลังดังมากๆ  และผมก็เป็นหนึ่งคนที่ติดเกมนี้เข้าอย่างจัง ซึ่งพอมาถึงในยุคปัจจุบันแล้วมองย้อนกลับไป ยิ่งเห็นชัดว่าการพัฒนาของตัวละครของเราในเกมมันเหมือนกับการพัฒนาตัวเองในชีวิตจริงมากแค่ไหน

    ซึ่งผมขอสรุปข้อคิดดีๆ ที่ได้จากการเล่นเกมมาให้ ว่าเราจะเอามาปรับใช้กับการพัฒนาทักษะของเราในชีวิตจริง รวมถึงเรื่องของการพัฒนาฝีมือ Excel ของเราได้ยังไง มีอะไรบ้าง มาดูกันเลย!

    10 ข้อคิดจากเกม

    1. ค้นหาเป้าหมายของชีวิต

    question

    Credit รูป : http://rostory.irowiki.org/letters/friends/page2/

    ในเกม Online RPG นั้นมีลักษณะเด่นอย่างหนึ่งที่ต่างจากเกมทั่วไป นั่นก็คือ มันไม่มีเป้าหมายที่ชัดเจนที่จะบอกว่าเราต้องทำอะไรถึงจะเรียกว่า “ชนะเกม” ได้ แต่ละคนต้องหาเป้าหมายของตัวเอง กำหนดชีวิตตัวเองว่าวันๆ จะทำอะไรบ้าง?

    บางคนก็คิดเป้าหมายว่าต้องจัดการ Boss ให้ได้ บางคนก็อาจตั้งเป้าว่าต้องพัฒนาตัวเองให้เก่งจนไปถึง Level 99 ให้ได้ บางคนอาจแค่อยากเจอเพื่อนดีๆ มิตรภาพดีๆ ก็พอแล้ว

    marriage_3-fix

    Credit รูป : http://www.playragnarok.com/news/updatedetail.aspx?id=144

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

    แต่ที่สำคัญที่สุดคือ คุณควรจะต้องมีเป้าหมาย และเป้าหมายที่ดีควรทำให้คุณตื่นเต้นหรือมีความสุข และอยากจะก้าวไปให้ถึงเป้าหมายนั้นในทุกๆ วัน ดังนั้น ถ้ายังไม่มี อย่าลืมคิด Mission ของคุณด้วย!

    2. สายอาชีพ

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

    Job_tree_girl

    Credit รูป : http://www.class2-juti.com/feed/3.html

    ซึ่งการใช้ Excel ก็มีลักษณะคล้ายๆ สายอาชีพเช่นกัน แต่ผมขอเรียกว่า “สายทักษะ” แทน และมันก็มีสายทักษะขั้นสูงด้วย ซึ่งผมขอแบ่งออกเป็น 4 ทักษะขั้นสูงดังนี้

    excel-class
    • Master of VBA : เน้นการแก้ปัญหาด้วยการเขียนโปรแกรมเป็นหลัก ซึ่งคนสายนี้จะทำสิ่งมหัศจรรย์ที่คนทั่วไปมักร้องว้าว! เพราะ VBA ทำได้ทุกอย่างที่คนนั่งถึกๆ ทำได้เหมือนกับเสกเวทย์มนตร์ และยังสามารถทำในสิ่งที่การเขียนสูตรทำไม่ได้อีกด้วย แต่ติดข้อจำกัดตรงที่เป็นกลุ่มทักษะที่ต้องการ Skill ต่างไปจากทักษะ Excel ดั้งเดิมมากที่สุด ทำให้เรียนรู้ยาก และในบางสถานการณ์จะถูกห้ามใช้พลัง VBA โดยสิ้นเชิงเลย (บางทีคนก็ไม่ยอมให้สร้างไฟล์ที่มี VBA)
    • Master of Array Formula : สายที่เน้นการใช้สูตรคำนวณ เก่งการใช้สูตรในการแก้ปัญหามาก สามารถใช้ Array Formula ได้อย่างคล่องแคล่ว คนกลุ่มนี้สามารถรับภารกิจลุยไปได้เกือบทุกพื้นที่ เพราะไม่มีความน่ากลัวแอบแฝงเหมือนกลุ่มนักเขียนโปรแกรม (ไม่ติดข้อจำกัดเรื่องที่ว่าห้ามใช้ VBA)
    • Master of Power Tool : สายนี้เน้นการวิเคราะห์ข้อมูลเป็นหลัก ชอบลุยกับข้อมูลจำนวนมาก  มีความเชี่ยวชาญด้านการใช้พวก Power Query, Power Pivot, DAX Formula/DAX Pattern ซึ่งเป็นสุดยอดเครื่องมือในการวิเคราะห์ข้อมูลที่ Excel มีมาให้ด้วย รวมถึง Power BI ที่รวมทุกอย่างที่กล่าวมา ซึ่งแนวโน้มความต้องการในยุคนี้น่าจะมาแรงมากจากความต้องการเรื่องของ Big Data
    • Master of Visualization : สายนี้เน้นการสร้างแผนภูมิ กราฟ หรืออะไรก็ได้ที่ทำให้ข้อมูลที่เดิมดูเข้าใจยาก กลับดูง่ายขึ้น ซึ่งนอกจากทักษะด้าน Excel โดยรวมที่ดีแล้ว คนกลุ่มนี้จะต้องมีทักษะด้านการนำเสนอที่ดีด้วย ซึ่งยิ่งข้อมูลเยอะ ยิ่งต้องอาศัยการย่อยเพื่อนำเสนอที่ดี ดังนั้น
    • Super Novice : เน้นใช้ความรู้พื้นฐานของ Excel ทำงานเพียงอย่างเดียว แต่ใช้อย่างลึกซึ้ง พยายามขุดความสามารถที่มีของ Excel ดั้งเดิมออกมาอย่างเต็มที่ คนที่มาสายนี้มักมีความเฉลียวค่อนข้างสูง และรู้จักการพลิกแพลงเพื่อหาคำตอบเป็นอย่างดี เช่น ไม่จำเป็นต้องหาคำตอบด้วยวิธีตรงๆ ซึ่งอาจต้องใช้ VBA หรือ Array Formula แต่คนสายนี้อาจแค่สร้างคอลัมน์ช่วย (Helper Column) สุดท้ายก็ทำงานได้เหมือนกัน
    • สายอื่นๆ :  คุณคิดว่ามีอะไรบ้างช่วย Comment บอกทีครับ ^^

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

    อย่างไรก็ตาม เรื่องของ Demand/Supply ก็เป็นอีกหนึ่งปัจจัยที่ต้องคำนึงถึง เพราะหากสุดท้ายในโลกที่คุณอยู่มีสายอาชีพ/สายทักษะที่คุณเลือกเต็มไปหมดเลย Supply ก็จะเยอะเกินความต้องการ บางทีคุณไปเลือกเป็นสายอาชีพที่ไม่ค่อยมีคนเลือก อาจจะเป็นที่ต้องการมากกว่าก็ได้

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

    3. Skill Tree

    การจะมุ่งไปสู่สายอาชีพต่างๆ ได้จะมีสิ่งที่เรียกว่า Skill Tree ซึ่งเป็นเหมือนแผนที่ คอยบอกว่าหากคุณต้องการจะพัฒนาทักษะเจ๋งๆ ในปลายทางแล้ว คุณจะต้องผ่านทักษะอะไรก่อนบ้าง 

    acolyte

    Credit รูป : http://scottandmona.com/photographyyku/.c/9/1/Ro%20Skill%20Tree.html 

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

    skill-tree-comparison3

    แต่ในความเป็นจริงแล้วการจัดทักษะมันมองลึกลงไปกว่านี้ได้อีกเยอะ เช่น การใช้ IF อาจต้องแบ่งเป็นหลาย Level ตั้งแต่ การเข้าใจ Logic TRUE/FALSE, การเขียน IF ขั้นเดียว, การผสม TRUE/FALSE หลายๆตัวเข้าด้วยกัน, การเขียน IF ซ้อน IF เป็นต้น

    ซึ่งทุกฟังก์ชั่น ทุก Skill สามารถลงลึกไปได้หลาย Level เช่นเดียวกัน โดยเฉพาะเวลาขึ้นสายทักษะขั้นสุดยอดอย่างพวก VBA, Array Formula, PowerPivot ยังมีเรื่องที่ต้องเรียนรู้อีกเป็นพวง (เหมือนกับการขึ้น Job ใหม่ในเกมนั่นแหละครับ)

    4. เก็บประสบการณ์

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

    คุณจะเก่งขึ้นได้โดยการสู้กับศัตรูเพื่อเก็บค่าประสบการณ์ (แท่งสีฟ้าๆ 2 อันล่างในรูป) ซึ่งถ้าเก็บได้มากพอก็จะเกิดปรากฏการณ์ที่เรียกว่า Level up! ขึ้น แล้วคุณก็จะเก่งกว่าเดิมพอสมควรเลยล่ะ!

    levelup

    Credit รูป : http://rostory.irowiki.org/lockeypoo/friends/

    ในการฝึก Excel ก็เช่นกัน มันไม่มีใครเก่งมาตั้งแต่แรกหรอกครับ คนเราต้องค่อยๆ ฝึกฝน เจอปัญหาง่ายๆ ก่อน พอเก็บประสบการณ์มากพอก็สามารถที่จะลองลุยปัญหาที่ยากขึ้นเรื่อยๆได้

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

    จุดต่างที่สำคัญในประเด็นนี้คือ ในเกมไม่ว่าจะฝึกอะไรก็ตาม เราก็สามารถเลือกไป Level Up ทักษะอีกอย่างที่ต้องการได้

    แต่ในชีวิตจริง อยาก Level Up! เรื่องไหนก็ต้องฝึกฝนเรื่องนั้น เช่น ใน Excel คุณอยากเก่งเรื่อง VLOOKUP คงไม่สามารถไปฝึกจากการเขียน IF บ่อยๆ ได้หรอกนะครับ!

    5. ทุกการฝึกฝนมีค่าเสมอ

    Up-Stat

    Credit รูป : http://reg.ragnarok.in.th/ro_guide/chap2/chap2_5.html

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

    แต่ผมอยากให้คิดไว้เสมอว่า “ทุกการฝึกฝนมีค่าเสมอ” แม้ปัญหาที่คุณกำลังแก้อยู่ จะไม่ได้ทำให้คุณ Level Up! ทันที แต่ผมมั่นใจว่าคุณต้องได้รับค่าประสบการณ์ไปสะสมเรียบร้อยแล้วแน่นอน ซึ่งถ้าสะสมมากพอ การ Level Up! จะต้องเกิดขึ้นอย่างแน่นอน

    ดังนั้นให้คุณจินตนาการเลยว่า ทุกครั้งที่คุณฝึกฝนตัวเอง แต้มตัวเลขประสบการณ์บนหัวของคุณมันจะค่อยๆ เด้งเพิ่มขึ้นอย่างแน่นอน !! รอวันที่จะ Level Up! ได้เลย

    6. เพื่อนและมิตรภาพ

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

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

    CPlvwJgUcAA5Hv5

    credit รูป : https://twitter.com/hashtag/ชุบทีมีใบ

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

    party-wolf

    Credit รูป : http://www.robrowser.com/blog/party-system-just-landed

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

    เช่น ใช้พวก AND คู่กับ IF หรือ สูตร INDEX คู่กับ MATCH ก็เข้าขากันได้ดีทีเดียว

    mix-function

    7. การเตรียมตัวในแต่ละศึก

    ในเกมก่อนที่เราจะออกไปลุยเก็บประสบการณ์ในฉากต่างๆ หรือใน Dungeon ก็ตาม เราจะต้องรู้ก่อนว่าศัตรูหรือปัญหาที่เราจะเจอนั้นมีลักษณะเป็นยังไง แพ้ทางอะไร เรามีอะไรที่จะไปสู้ด้วยได้ และควรจะสู้ด้วยวิธีไหนถึงจะมีประสิทธิภาพ เข้ากับคำคมที่ว่า “รู้เขา รู้เรา” นั่นแหละครับ ซึ่งนอกจากจะรู้แล้ว ก็ต้องเตรียมอาวุธและอุปกรณ์ต่างๆ ให้พร้อมด้วย เช่น เตรียม Shortcut คำสั่ง/item ที่ใช้บ่อยๆ ไว้เลย เวลาใช้ก็กดปุ่มง่ายๆ

    prepare2

    Credit รูป : http://www.roguides.co.in/2010/08/pvp-champion-build-guide-using.html

    qat

    ซึ่งใน Excel เราก็สามารถเตรียมเรื่องแบบนี้ได้เหมือนกันครับ คุณสามารถศึกษาก่อนได้ว่า เจ้านายหรือลูกค้าคุณชอบงานแบบไหน คุณจะได้ทำงานได้ถูกใจ เพราะแต่ละคนก็ชอบไม่เหมือนกัน

    รวมถึงคุณจะต้องทำงานแบบไหนบ่อยๆ คุณก็ควรจะเตรียม Quick Access Toolbar ซึ่งจะกดเรียกใช้ง่ายมาก ทั้งใช้ Mouse หรือ Keyboard Alt+1,2,3,4… ก็ได้ หรือจะเรียนรู้ Shortcut อื่นๆ ให้พร้อมกับการทำงานนั้นๆ ให้มากที่สุด เพื่อที่ว่าเมื่อเจอศัตรูหรือปัญหา จะได้กดท่าไม้ตายต่างๆ กระหน่ำโจมตีได้อย่างรวดเร็ว

    8. รางวัลที่ได้จากการจัดการศัตรู

    mvp

    Credit รูป : https://forums.warpportal.com/index.php?/topic/157495-ragnarok-player-history-archive/

    ในเกมเวลาที่เราจัดการกับศัตรูได้ สุดท้ายก็จะได้ประสบการณ์มาเพื่อให้ตัวเอง Level Up! และอาจได้ Item เจ๋งๆ ติดไม้ติดมือมาด้วย

    ถ้าเราลงมือคนเดียว เราก็ได้ผลลัพธ์นั้นคนเดียวแน่นอน แต่ถ้าเราไปลุยกับเพื่อนเป็น Party คนที่ลงมือจัดการกับปัญหามากที่สุด จะได้ค่าประสบการณ์มากที่สุดและได้รับ Item ชิ้นพิเศษไป

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

    9. จะใช้ของดี ตัวเราเองก็ต้องเจ๋งด้วย

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

    Build-Champion-MVP-Ragnarok

    credit รูป : http://ragnarokgameplay.blogspot.com/2014/07/build-champion-full-mvp-ragnarok.html

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

    ในชีวิตจริงก็เหมือนกันครับ หนังสือบางเล่ม สัมมนาบางคอร์ส อาจทำให้คุณบรรลุ Excel ขั้นสูงสุดได้ แต่ถ้าคุณมีความรู้พื้นฐานไม่พอ คุณก็ไม่สามารถใช้ประโยชน์จาก Item ชิ้นนั้นได้อย่างเต็มที่ ดังนั้นเราต้องอย่าลืมพัฒนาทักษะของตัวเราให้พร้อมและเลือก item ให้เหมาะกับระดับของตัวเองด้วย

    10. วิธีการเดินทางสำคัญไม่แพ้เป้าหมาย

    เมื่อคุณผจญภัยในโลกแห่งเกม Online RPG ไปซักพัก หลายคนจะเริ่มรู้สึกว่าตัวเองพัฒนาช้าเกินไป เลยเริ่มจะทำอะไรที่ผิดกฎเกณฑ์ของเกมที่ตั้งไว้ ถ้าโชคดียังไม่มีใครจับได้ก็ดีไป แต่ถ้าโชคร้ายคุณอาจจะถูกแบน อดเล่นเกมนั้นไปอีกตลอดกาล

    ในชีวิตจริงของคนเรา มีสิ่งยั่วยุมากมายให้ทำในวิธีที่ไม่เหมาะสม ผมอยากจะให้ทุกคนใจแข็งไว้ อย่าไปหลงในความโลภที่มาหลอกล่อคุณ ให้คุณตั้งมั่นในความตั้งใจและในเป้าหมายของตัวเองไว้ แล้วลงมือทำมันด้วยวิธีที่ถูกต้องตามกฎเกณฑ์ของสังคม และถูกต้องตามหลักศีลธรรมเท่านั้น

    1016401_809976285685816_475014996_n

    Credit รูป : http://ratemyserver.net/index.php?page=detailedlistserver&serid=16985&url_sname=Kazue%20RO

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

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

    หากคุณมีข้อคิดดีๆ ที่ประทับใจจากการเล่นเกม อย่าลืมเอามาแชร์กันบ้างนะครับ อยากฟังจริงๆ ^^

  • สารพัดวิธีนับข้อมูลแบบไม่ซ้ำกันในคอลัมน์

    สารพัดวิธีนับข้อมูลแบบไม่ซ้ำกันในคอลัมน์

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

    สถานการณ์ของเราคือ…

    สมมติว่าเรามีข้อมูลอยู่ตารางหนึ่ง เป็นตารางการขายของในช่วงเดือนที่ผ่านมา…
    ลักษณะข้อมูลคือ 1 บรรทัดเป็น 1 order ซึ่งแต่ละ order ก็จะมี Sales นักขายกำกับอยู่ว่าชื่ออะไร

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

    สมมติข้อมูลเป็นแบบนี้ (มีแค่ 10 บรรทัดพอ) => distinct-count

    distinct-data

    ถ้าเราเจอปัญหาแบบนี้ จะแก้ไขได้ยังไงมาดูกันครับ!

    (more…)

  • วันที่ 23 ตค. นี้ เชิญ Level Up! กันได้ทั่วประเทศ !

    วันที่ 23 ตค. นี้ เชิญ Level Up! กันได้ทั่วประเทศ !

    – หนังสือ Excel Level Up! วางแผงที่ร้านหนังสือชั้นนำทั่วประเทศ
    – ที่งานหนังสือ เวลา 17:00-18:00 ผมไปแจกลายเซ็นที่บูธร้านนายอินทร์ Q26 โซน C ชั้น 2
    ใครสะดวกก็เชิญมารับพลัง Level Up! ได้เลยนะครับ!
    – ใครไม่สะดวกไป ก็สั่ง Online ได้ ครับ

     

  • วิธีการสร้าง Filter มากกว่า 1 ตารางใน 1 Sheet

    วิธีการสร้าง Filter มากกว่า 1 ตารางใน 1 Sheet

    table-filter-0

    ปกติแล้วถ้าเรา [Home]–>Editting –> Sort & Filter –> Filter
    หรือว่าจะกดจาก [Data]–> Sort & Filter –> Filter ก็ตาม
    เราจะสามารถทำได้ทีละตารางต่อ 1 sheet เท่านั้นครับ (พอเลือกอีกอัน อันแรกก็จะหายไป)

    คำถาม คือ เราสามารถทำ Filter มากกว่า 1 ตารางต่อ 1 Sheet ได้หรือไม่?

    คำตอบ คือ แม้เราใช้ Filter ตรงๆ ไม่ได้ แต่เราใช้เครื่องมืออื่นมาช่วยได้ นั่นก็คือ การใช้เครื่องมือ Table นั่นเองครับ

    table-filter

    วิธีทำก็ง่านแสนง่ายครับ นั้นก็คือ ให้คลิ๊กเลือกช่องที่อยู่ในตารางที่เราต้องการจะ Filter แล้วกด Ctrl+T เพื่อสร้าง Table แต่อย่าลืมเช็คความครอบคลุมให้ดีก่อนกด Ok ล่ะ โดยคุณสามารถทำวิธีนี้กี่ตารางก็ได้ตามใจชอบครับ

    ที่นี้คุณก็จะสามารถสร้างตารางที่มีหัว Filter ได้มากกว่า 1 อันต่อ 1 sheet แล้วล่ะครับ!!

  • Intro to Excel Slide

    เป็น Slide ที่ใช้สอนเพื่อปูพื้นฐาน Excel ให้กับนักศึกษาจบใหม่ และผู้ที่สนใจ ใน Event CareerVisa Boot Camp – Excel Training ที่จัดโดย CareerVisa Thailand ครับ เอามา Post เผื่อแฟนเพจคนอื่นๆด้วย

  • Fuzzy Lookup สะกดผิดก็ Lookup หาเจอ!

    Fuzzy Lookup สะกดผิดก็ Lookup หาเจอ!

    คุณเคยมีปัญหาต้องใช้ VLOOKUP ในการ Map ข้อมูล แต่คำค้นหา (lookup_value) สะกดผิด เลยไม่ตรงกับค่าในตารางอ้างอิงมั๊ยครับ?

    ใน VLOOKUP นั้น ถึงแม้จะมีโหมด Approximate Match ก็ตาม แต่ความสามารถของมันไม่สามารถหาคำใกล้เคียงได้เหมือนชื่อมันหรอกนะครับ การจะ Lookup คำแบบสะกดผิดได้ต้องใช้วิธีอื่น เช่น เขียน VBA ซึ่งค่อนข้างยากมาก

    แต่ผมมีข่าวดีมาบอก คือ เราสามารถใช้ Add-in ที่ชื่อ Fuzzy Lookup ของ Microsoft มาแก้ปัญหานี้ได้ครับ ฟรีด้วย!

    • ก่อนอื่น คุณต้องไปดาวน์โหลด add-in ดังกล่าวก่อนที่ https://www.microsoft.com/en-us/download/details.aspx?id=15011
    • จากนั้นลงโปรแกรม แล้วปิด-เปิด Excel ใหม่
    • จากนั้นพอเข้า Excel แล้วมันจะมี Ribbon ขึ้นมาใหม่ 1 อัน ชื่อว่า “Fuzzy Lookup” ดังภาพ

    Fuzzy Lookup สะกดผิดก็ Lookup หาเจอ! 21

    วิธีการใช้มีดังนี้

    fuzzy-2

    • ให้แปลงตารางทั้งฝั่งตารางอ้างอิง และฝั่งคำค้นหาให้เป็น Table ซะก่อน โดยเลือกข้อมูลช่องใดช่องหนึ่งแล้วกด Ctrl+T เช่น คลิ๊ก A1 กด Ctrl+T จากนั้นคลิ๊ก D1 กด Ctrl+T

    fuzzy-3

    fuzzy-4

    จากนั้น ให้เลือก Cell ที่ต้องการแสดงผลลัพธ์ แล้วไปเลือก Fuzzy Lookup ใน Ribbon

    • เลือกตารางที่จะให้เชื่อมกัน (ถ้าตั้งชื่อไว้ก่อนตอนสร้าง Table จะช่วยให้ไม่งง)
    • จากนั้นเลือกคอลัมน์ที่จะให้เชื่อมกัน
    • จากนั้นกดปุ่มตรงกลาง

    fuzzy-5

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

    fuzzy-6

    จากนั้นกด Go มันจะแสดงผลลัพธ์ในที่ที่ Active Cell อยู่ ถ้าเลือก Similarity ก็จะมีคะแนนความแม่นออกมาด้วย
    หากผลออกมาน้อยเกินไป ลองปรับระดับความแม่นให้ลดลงได้ครับ

    fuzzy-7

    นี่คือวิธีใช้คร่าวๆ ของเครื่องมือนี้ครับ ซึ่งข้อดีคือ Lookup ข้อมูลที่สะกดผิดได้ด้วย แต่ข้อเสียคือ ต้องมากดเครื่องมือทุกครั้ง (เพราะไม่ใช่สูตร) ซึ่งผมว่าอย่างน้อยมันดีกว่าเรามานั่งดูด้วยตาแล้วแก้ข้อมูลให้ถูกต้องเองก่อน Map ข้อมูลด้วย VLOOKUP แน่นอนครับ