บทความนี้ผมตั้งใจจะให้เป็นบทความที่จะสอน 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-6fix

ตัวอย่างที่ 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 ครับ

 

Categories: Array Formula