Tag: Dynamic Array

  • การใช้ฟังก์ชัน RANDARRAY ใน Excel

    ภาพรวม

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

    รูปแบบการใช้งาน (Syntax)

    =RANDARRAY([rows],[columns],[min],[max],[whole_number])
    จำเป็น?อาร์กิวเมนต์คำอธิบาย
    ไม่ใส่ก็ได้[row]ตัวเลขจำนวนแถวที่เราต้องการ ถ้าไม่ระบุจะได้ 1 แถว
    ไม่ใส่ก็ได้[column]ตัวเลขจำนวนคอลัมภ์ที่เราต้องการ ถ้าไม่ระบุจะได้ 1 คอลัมภ์
    ไม่ใส่ก็ได้[min]ตัวเลขระบุจำนวนที่ค่าน้อยสุดที่ต้องการ ถ้าไม่ระบุจะได้เลยทศนิยม หรือ 0.xxxxxx
    ไม่ใส่ก็ได้[max]ตัวเลขระบุจำนวนที่ค่ามากสุดที่ต้องการ ถ้าไม่ระบุค่ามากสุดคือ 0.999999
    ไม่ใส่ก็ได้[whole_number]ตัวเลขระบุจะกำหนดให้สุ่มค่าเป็นจำนวนเต็มไหม? หากต้องการให้ระบุเป็น TRUE ถ้าไม่ระบุจะเป็น FALSE

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

    ที่จริงแล้ว ฟังก์ชันนี้ใช้ได้อย่างตรงไปตรงมา คือ จะได้เลขที่สุ่มขึ้นมา โดยที่คุณไม่ต้องคิดเอง และไม่ต้องใช้ Autofill ลากเพิ่มเหมือนการใช้ฟังก์ชัน RAND และ RANDBETWEEN

    สำหรับไฟล์ตัวอย่างสามารถดูและดาวน์โหลด ได้เลยครับ (File > Save As > Download a Copy)

    ตามรูปแบบการใช้งานด้านบน ⬆️ หากเราอยากได้ข้อมูล 4 แถว 3 คอลัมภ์ สูตรก็จะเป็น

    =RANDARRAY(4,3)

    โดยผลลัพธ์จะได้ค่าระหว่าง 0 กับ 1 มาตามจำนวนแถวและคอลัมภ์ที่เราระบุไว้ดังภาพ

    ที่นี้สมมติว่าเราอยากได้ค่าระหว่าง 0 ถึง 10,000 สูตรเราก็จะต้องเพิ่มมาเป็น

    =RANDARRAY(4,3,0,10000)

    และผลก็จะออกมาเป็นดังภาพนี้

    ซึ่ง 2 ตัวอย่างด้านบนเราก็จะยังได้ค่าที่มีทศนิยมอยู่ด้วยเสมอ เพราะเราไม่ได้ระบุว่า จะเอาเป็นจำนวนเต็ม (whole number) โดยสูตรก็จะกลายเป็น

    =RANDARRAY(4,3,0,10000,TRUE)

    และผลจะเป็นดังนี้

    สิ่งที่ควรทราบ

    • หากคุณใช้แบบไม่ระบุจำนวนแถวและคอลัมภ์ให้ RANDARRAY() คุณจะได้ผลลัพธ์มาค่าเดียว เหมือนกับใช้ฟังก์ชัน RAND() โดยค่าที่ได้จะอยู่ระหว่าง 0 กับ 1
    • หากคุณระบุแถวและคอลัมภ์ แต่ไม่ระบุค่าต่ำสุดและค่าสูงสุด ผลลัพธ์ที่ได้จะมีค่าอยู่ระหว่าง 0 กับ 1
    • ⚠️ หากคุณค่าต่ำสุดที่คุณกำหนดนั้น มีค่ามากกว่าค่าสูงสุดที่คุณกำหนดไว้ จะแสดงเป็น #VALUE!
    • 💡หากอยากได้ค่าที่เป็นจำนวนเต็ม อย่าลืมระบุอาร์กิวเมนต์สุดท้ายเป็น TRUE
    • RANDARRAY เป็นฟังก์ชันแบบ dynamic array ดังนั้นผลลัพธ์ที่ได้จะเริ่มจากเซลล์ที่เราใส่สูตรไปและไหล (spill) ลงด้านล่างไปจนกว่าจะได้จำนวนแถวที่เราระบุไป รวมถึงไปด้านซ้ายไปจนกว่าจะถึงความกว้างของคอลัมภ์ที่เราระบุไว้ ⚠️หากมีข้อมูลอยู่แล้วจะแสดง error เป็น #SPILL!
    • RANDARRAY ทำงานเหมือนฟังก์ชัน RAND กับ RANDBETWEEN แต่คุณไม่จำเป็นต้อง copy ไปใส่เซลล์อื่น
    • ⚠️ ไม่แนะนำให้ใช้ฟังก์ชันนี้ เป็นค่าที่ไฟล์อื่นอ้างอิง หรือ LOOKUP กับค่าที่ได้จากสุ่มนี้ เพราะมีโอกาสสูงมากที่คุณจะเห็น #REF!

    สรุป

    ฟังก์ชันนี้ใช้สุ่มตัวเลขให้เรา ซึ่งจะเหมาะสำหรับการทำไฟล์ตัวอย่าง (mock-up) ให้คนในทีมงานหรือหัวหน้าเห็นภาพ report ว่าจะออกมาประมาณไหน ก่อนที่จะได้ report จากข้อมูลจริงซึ่งอาจจำเป็นต้องรอ

  • การใช้ฟังก์ชัน SORT ใน Excel

    การเรียงลับดับข้อมูลใน Excel ไม่ใช้เรื่องใหม่ 😊 แต่ที่อาจจะดูใหม่คงจะเป็นการมีฟังก์ชันเรียงลำดับข้อมูลให้เราเรียกใช้และให้ข้อมูลกลับมาแบบ dynamic (เปลี่ยนไปตามข้อมูลต้นฉบับ) นี่พึ่งจะมีให้ใช้ใน Excel 2021

    นั่นคือ ตั้งแต่ก่อนพวกเราต้องทำแบบ manual คือไปที่ Data > Sort หรือผ่าน VBA มาตลอด 😂

    ภาพรวม

    ฟังก์ชัน SORT ใช้ดึงเอาข้อมูลออกมาจาก range หรือ array ที่เรามีอยู่มาเรียงลำดับใหม่ในแบบที่เราต้องการ

    รูปแบบการใช้งาน (syntax)

    =SORT(array,[sort_index],[sort_order],[by_col])
    จำเป็น?อาร์กิวเมนต์คำอธิบาย
    ต้องใส่arrayข้อมูลที่เราต้องการและจะนำมาเรียงลำดับ อาจจะเป็น range หรือ array ที่ได้มาจากพวกฟังก์ชัน dynamic array ทั้งหลาย
    ไม่ใส่ก็ได้[sort_index]ตัวเลขใช้ระบุแถวหรือคอลัมภ์ที่เราจะให้เรียงลำดับ
    ไม่ใส่ก็ได้[sort_order]ตัวเลขใช้ระบุวิธีการจัดลำดับ โดย ใช้ 1 หากต้องการเรียงจากน้อยไปมาก และให้ใช้ -1 เมื่อต้องการให้เรียงจากมากไปน้อย
    ไม่ใส่ก็ได้[by_col]ใช้ระบุว่าให้ดูข้อมูลไปตามแนวคอลัมภ์หรือไม่? FALSE – ให้เรียงลำดับตามแถว หรือไม่ระบุก็จะได้วิธีการเรียงลำดับแบบนี้TRUE – ให้เรียงลำดับตามคอลัมภ์ กรณีนี้คือ ข้อมูลที่เราจะเรียงลำดับ กระจายไปตา่มแนวของคอลัมภ์

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

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

    หากต้องการไฟล์ตัวอย่างสามารถ เปิดดูและดาวน์โหลด ได้เลย

    สูตรที่ใช้ใน F2 จะเป็นแบบนี้ โดยข้อมูลอยู่ในตารางชื่อ tblPeopleTestScore

    =SORT(tblPeopleTestScore[#Data],4,-1,FALSE)

    โดยที่

    • array ข้อมูลต้นฉบับที่เราใส่เข้าไปคือ tblPeopleTestScore[#Data]
    • โดยเราจะจัดเรียงข้อมูลชุดใหม่จากคอลัมภ์ที่ 4 หรือ post_test นับเริ่มจาก 1
    • ให้เรียงลำดับจากมากไปน้อย จึงใส่ -1
    • และช่องสุดท้ายใส่ FALSE เพราะข้อมูลเราไหลลงไปตามแถว หรือที่จริงแล้วจะไม่ใส่ก็ได้

    มาดูอีกตัวอย่าง เป็นข้อมูลเดียวกันเลย เพียงแค่ข้อมูลถูกวางมาแบบไหลจากซ้ายไปขวา หรือไปตามแนวคอลัมภ์ ดังนั้นเวลาจะเรียงตามคะแนน post test สูตรก็จะเป็น

    =SORT($A$1:$J$4,4,-1,TRUE)

    ดุังภาพนี้

    💡สังเกตว่ากรณีนี้ สูตรที่ผมใช้จะไม่ได้เป็นแบบ table นะครับ เพราะถ้าข้อมูลมาแบบนี้ จะไม่เป็นไปตามวิธีการวางข้อมูลแบบ table ดังนั้นเราจะใช้การอ้างอิง range ตามปกติ

    สิ่งที่ควรทราบ

    • ถ้าเราไม่ระบุอาร์กิวเมนต์ที่ไม่บังคับ ไม่ว่าจะเป็น
      • sort_index ให้ Excel จะใช้แถวที่ 1 หรือไม่ก็คอลัมภ์ที่ 1 หากอาร์กิวเมนต์สุดท้ายเป็น TRUE
      • sort_order ปกติ Excel จะเรียงจากน้อยไปหามากให้
      • by_col ปกติจะเรียงไปตามแถว ยกเว้นเราจะระบุเป็น TRUE
    • คำว่าเรียงลำดับจากน้อยไปมาก หรือจากมากไปน้อย นั้นจะหมายถึงตามลำดับใน ASCII code และ มอก. 620 นะ 💡แต่ถ้าเป็นเลขไทยลำดับจะมาก่อน ถึงแม้ว่าลำดับใน มอก. 620 จะมากกว่าอักขระ และจะให้ค่ากลับมาเป็นเลขอารบิก 😂 ก็คือ Excel น่าจะมีฟังก์ชันแปลงให้อีกทีแหละ
    • ฟังก์ชัน SORT จะเรียงข้อมูลได้เฉพาะตามที่มีอยู่ใน array หรือ range ที่ระบุให้เท่านั้น หากคุณต้องการจัดเรียงข้อมูลตามค่าที่อยู่นอก array ที่ระบุให้ แนะนำให้ไปใช้ฟังก์ชัน SORTBY แทน เพราะเป็นฟังก์ชันที่มีความยืดหยุ่นกว่า
    • ฟังก์ชัน SORT เป็นหนึ่งในฟังก์ชันแบบ dynamic array ดังนั้นคุณอาจเจอ #SPILL! ได้ อ่านข้อแนะนำการใช้งานได้จาก วิธีแก้ SPILL error ใน Excel
    • คุณสามารถใส่ array หรือ range ที่แบบที่มี
      • 1 คอลัมภ์หลายแถว
      • 1 แถว หลายคอลัมภ์
      • หรือหลายแถวและหลายคอลัมภ์
      ก็ได้

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

    ฟังก์ชัน SORT ก็จะช่วยเราได้เยอะเลย เพราะข้อมูลแหล่งเดียวแต่เราได้รูปแบบที่ต้องการเลย ไม่ต้องไปไล่คลิกและ copy-paste หลายขั้นตอน

  • ฟังก์ชัน dynamic array ใน Excel

    หนึ่งในคำถามที่ผมพบอยู่บ่อย ๆ สำหรับคนใช้ Excel คือ

    อยากให้ VLOOKUP ได้ผลลัพธ์หลายค่า จากคำค้นหาคำเดียว ทำยังไง?

    ซึ่งคำถามนี้ก็รวมไปถึง XLOOKUP ซึ่งเป็นฟังก็ชันน้องใหม่ที่แนะนำให้ใช้แทน VLOOKUP สำหรับผู้ใช้ Excel รุ่นใหม่ๆ ด้วย

    เพราะหลาย ๆ คนอยากให้ VLOOKUP หรือ XLOOKUP แล้วได้ข้อมูลที่ตรงกับเงื่อนไข (match) ออกมาทั้งหมด หรือได้ทุกค่าที่ตรง

    คำตอบง่ายสุดคือ ไม่ได้ เพราะ 2 ฟังก์ชันนี้ไม่ได้ออกแบบมาเพื่องานนี้

    แต่ก็ไม่ใช่ว่ามันจะทำไม่ได้ซะทีเดียว แต่มันต้องใช้สูตรที่ค่อนข้างจะมีซับซ้อนน่ะ และเราจะไม่อธิบายในที่นี้ 😂 แต่แนะนำให้ไปอ่านในวิธีการใช้งานฟังก์ชัน FILTER แทน เพราะนี่คือ คำตอบจริง ๆ ที่คุณค้นหาอยู่ เพียงแค่บังเอิญว่ามันมีใช้แค่ใน Excel 365

    วันนี้เราจะมาพูดถึงฟังก์ชันประเภท dynamic array ใน Excel กัน และ FILTER() ก็เป็นหนึ่งในฟังก์ชันประเภทนี้

    ภาพรวม

    หากจะถามว่า “ฟังก์ชัน dynamic array คืออะไร? ” คำตอบง่าย ๆ คือ

    ฟังก์ชันที่ให้ค่ากลับคืนมาได้มากกว่า 1 ค่า หรือที่เรียกเป็นภาษาอังกฤษว่า array ซึ่งมันคือ รายการข้อมูลชุดหนึ่งนั่นเอง

    โดยฟังก์ชันกลุ่มนี้เริ่มมีให้ใช้ราว ๆ ปี 2020 ในกลุ่มผู้ใช้งาน Excel ในชุดแอป Microsoft 365

    ซึ่งแตกต่างจากฟังก์ชันเดิม ๆ ในเอกซ์เซลที่จะคืนค่าหรือให้ผลลัพธ์กลับมาให้เรา “เพียงค่าเดียว” เท่านั้น

    โดยโพสต์ก่อนหน้านี้ ผมค่อนข้างจะพูดถึงฟังก์ชันกลุ่มนี้บ่อย เลยคิดว่า จะจับกลุ่มรวมไว้ในโพสต์นี้เลย

    โดย dynamic array ถือว่าเป็นจุดเปลี่ยนของการใช้งาน Excel ไปอีกขั้นหนึ่ง เพราะตั้งแต่ก่อน เราไม่แทบจะไม่สามารถกรอง (filter) เอาข้อมูลได้ง่าย ๆ เลย ยกเว้นจะใช้วิธีแบบทำเอง (manual) หรือไม่ก็ใช้โค้ด VBA

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

    รายชื่อ

    ฟังก์ชันเริ่มมีใช้งานคำอธิบาย
    FILTER2020ใช้สำหรับกรองเอาเฉพาะข้อมูลจากชุดข้อมูลที่ตรงตามเงื่อนไขที่เรากำหนด
    SORT2020ใช้สำหรับจัดเรียงข้อมูลในรูปแบบที่ต้องการ ไม่ว่าจะเป็นเรียงจากน้อยไปมากหรือมากไปน้อย
    SORTBY2020จัดเรียงข้อมูล โดยอ้างอิงจากอีกคอลัมน์หนึ่ง
    SEQUENCE2020ใช้สร้างลำดับตัวเลขที่ต่อเนื่องกันในตาราง
    UNIQUE2020ใช้เพื่อดึงค่าที่ไม่ซ้ำกันจากช่วงข้อมูลที่กำหนด
    RANDARRAY2020สร้างอาร์เรย์ตัวเลขสุ่มภายในขอบเขตที่เรากำหนดให้
    XLOOKUP2020ใช้สำหรับค้นหาข้อมูลในตารางหรือช่วงข้อมูล โดยสามารถค้นหาได้ทั้งจากด้านบน-ลงล่างและล่าง-ขึ้นบน (⚠️ปกติจะไม่ให้ให้ dynamic array กลับมา แต่ทำได้บางกรณี)

    หวังว่าบทความนี้จะช่วยให้เข้าใจ dynamic array ได้มากขึ้นนะครับ 😊 ถึงแม้จะสั้นหน่อย แต่อยากให้เขียนเกี่ยวกับอะไรเพิ่มเติม ให้ comment ไว้ได้เลย 💗