MAKEARRAY สร้าง Dynamic Array ตามขนาดที่กำหนด (rows × cols) โดยใช้ LAMBDA function คำนวณค่าในแต่ละเซลล์ตามตำแหน่ง row และ column index (เริ่มที่ 1) ต่างจาก SEQUENCE ที่สร้างเฉพาะตัวเลขเรียงลำดับ MAKEARRAY สามารถสร้างข้อมูลได้หลากหลายรูปแบบตามการคำนวณที่กำหนดใน LAMBDA เช่น ตารางสูตรคูณ matrix ทางคณิตศาสตร์ pattern ข้อความ หรือค่าสุ่ม เหมาะสำหรับสร้าง dataset ขนาดใหญ่ที่มีรูปแบบเฉพาะ หรือ lookup table แบบ dynamic โดย LAMBDA จะถูกเรียกทำงานสำหรับทุกเซลล์ใน array ผลลัพธ์ ทำให้สร้างข้อมูลจำนวนมากได้อย่างรวดเร็วด้วยสูตรเดียว
=MAKEARRAY(rows, cols, lambda)
=MAKEARRAY(rows, cols, lambda)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| rows | Number | Yes | จำนวนแถวของ Array ที่ต้องการสร้าง ต้องเป็นจำนวนเต็มบวก มากกว่าหรือเท่ากับ 1 ถ้าน้อยกว่า 1 หรือไม่ใช่ตัวเลขจะได้ #VALUE! error | |
| cols | Number | Yes | จำนวนคอลัมน์ของ Array ที่ต้องการสร้าง ต้องเป็นจำนวนเต็มบวก มากกว่าหรือเท่ากับ 1 ถ้าน้อยกว่า 1 หรือไม่ใช่ตัวเลขจะได้ #VALUE! error | |
| lambda | Function | Yes | LAMBDA function ที่รับ 2 parameters: (1) row index และ (2) column index โดย index เริ่มต้นที่ 1 (ไม่ใช่ 0) และ return ค่าที่จะใส่ในเซลล์ตำแหน่งนั้น LAMBDA ต้องมี parameter ครบ 2 ตัวเสมอ แม้จะไม่ได้ใช้ในการคำนวณก็ตาม |
ใช้ MAKEARRAY สร้างตารางสูตรคูณขนาดใดก็ได้ทันที เช่น 12×12 หรือ 20×20 สำหรับใช้ในการเรียนการสอนคณิตศาสตร์ ครูสามารถปรับขนาดตารางตามความต้องการได้อย่างรวดเร็ว
สร้างข้อมูลสุ่มหลักพัน-หลักหมื่นเซลล์เพื่อทดสอบสูตร performance หรือ model โดยไม่ต้องพิมพ์ข้อมูลเอง ประหยัดเวลาและสร้างข้อมูลที่มีความหลากหลายสูง
สร้าง Identity Matrix, Distance Matrix, Correlation Matrix หรือ Matrix รูปแบบอื่นๆ สำหรับการคำนวณทาง Linear Algebra สถิติ และวิทยาศาสตร์ข้อมูล
สร้างตารางอ้างอิงที่มีการคำนวณซับซ้อน เช่น tax bracket table, discount tier table หรือ pricing matrix ที่ค่าในแต่ละเซลล์คำนวณจากตำแหน่งและเงื่อนไขต่างๆ
สร้าง visual pattern เช่น checkerboard, gradient, spiral หรือ fractal pattern สำหรับใช้ใน data visualization หรือการออกแบบ dashboard ที่ต้องการ pattern พิเศษ
MAKEARRAY(2, 3, LAMBDA(r, c, "X"))=MAKEARRAY(2, 3, LAMBDA(r, c, "X"))
{"X","X","X";"X","X","X"}
MAKEARRAY(5, 1, LAMBDA(r, c, r))=MAKEARRAY(5, 1, LAMBDA(r, c, r))
{1;2;3;4;5}
MAKEARRAY(3, 3, LAMBDA(r, c, r*c))=MAKEARRAY(3, 3, LAMBDA(r, c, r*c))
{1,2,3;2,4,6;3,6,9}
MAKEARRAY(4, 4, LAMBDA(r, c, IF(r=c, 1, 0)))=MAKEARRAY(4, 4, LAMBDA(r, c, IF(r=c, 1, 0)))
{1,0,0,0;0,1,0,0;0,0,1,0;0,0,0,1}
MAKEARRAY(3, 4, LAMBDA(r, c, "R"&r&"C"…=MAKEARRAY(3, 4, LAMBDA(r, c, "R"&r&"C"&c))
{"R1C1","R1C2","R1C3","R1C4";"R2C1","R2C2","R2C3","R2C4";"R3C1","R3C2","R3C3","R3C4"}
MAKEARRAY(6, 6, LAMBDA(r, c, IF(MOD(r+c, 2)=0, "■", "□")))=MAKEARRAY(6, 6, LAMBDA(r, c, IF(MOD(r+c, 2)=0, "■", "□")))
{"□","■","□","■","□","■";"■","□","■","□","■","□";...}
MAKEARRAY(10, 5, LAMBDA(r, c, RANDBETWEEN(1, 100)))=MAKEARRAY(10, 5, LAMBDA(r, c, RANDBETWEEN(1, 100)))
{43,87,12,65,29;91,33,58,76,14;...}
MAKEARRAY(5, 5, LAMBDA(r, c, ABS(r-c)))=MAKEARRAY(5, 5, LAMBDA(r, c, ABS(r-c)))
{0,1,2,3,4;1,0,1,2,3;2,1,0,1,2;3,2,1,0,1;4,3,2,1,0}
MAKEARRAY(4, 8, LAMBDA(r, c, CHAR(RANDBETWEEN(65, 90))))=MAKEARRAY(4, 8, LAMBDA(r, c, CHAR(RANDBETWEEN(65, 90))))
{"K","M","A","X","B","F","T","L";"P","Z","D","Q","H","N","V","G";...}
MAKEARRAY(1, 7, LAMBDA(r, c, COMBIN(6, c-1)))=MAKEARRAY(1, 7, LAMBDA(r, c, COMBIN(6, c-1)))
{1,6,15,20,15,6,1}
LET( n, 10, init, {0;1}, fib, REDUCE(init, SEQUENCE(n-2), LAMBDA(acc, i, VSTACK(acc, INDEX(acc,-1) + INDEX(acc,-2)))), MAKEARRAY(n, 1, LAMBDA(r, c, INDEX(fib, r…=LET(
n, 10,
init, {0;1},
fib, REDUCE(init, SEQUENCE(n-2), LAMBDA(acc, i, VSTACK(acc, INDEX(acc,-1) + INDEX(acc,-2)))),
MAKEARRAY(n, 1, LAMBDA(r, c, INDEX(fib, r)))
)
{0;1;1;2;3;5;8;13;21;34}
LET( categories, {"Bronze","Silver","Gold","Platinum"}, thresholds, {0,100,500,1000}, MAKEARRAY(ROWS(categories), 2, LAMBDA(r, c, IF(c=1, INDEX(categories,r), I…=LET(
categories, {"Bronze","Silver","Gold","Platinum"},
thresholds, {0,100,500,1000},
MAKEARRAY(ROWS(categories), 2, LAMBDA(r, c, IF(c=1, INDEX(categories,r), INDEX(thresholds,r))))
)
{"Bronze",0;"Silver",100;"Gold",500;"Platinum",1000}
SEQUENCE สร้างเฉพาะตัวเลขเรียงลำดับ (1, 2, 3, …) โดยกำหนด start value และ step ได้
.
ส่วน MAKEARRAY ใช้ LAMBDA function คำนวณค่าแต่ละเซลล์ได้อิสระตาม row/column index ทำให้สร้างข้อมูลได้หลากหลายกว่ามาก เช่น ข้อความ สูตรคูณ ค่าสุ่ม หรือการคำนวณที่ซับซ้อน
.
ส่วนตัวผมคิดว่า… ถ้าต้องการแค่ตัวเลขเรียงลำดับธรรมดา ใช้ SEQUENCE จะง่ายและเร็วกว่า แต่ถ้าต้องการ logic พิเศษหรือข้อมูลที่ไม่ใช่ตัวเลขเรียง MAKEARRAY คือตัวเลือกที่ดีกว่าครับ 😎
เริ่มที่ 1 (1-based indexing) ครับ เช่น เซลล์มุมซ้ายบนสุดจะได้ r=1, c=1 ไม่ใช่ r=0, c=0
.
ดังนั้น =MAKEARRAY(2, 3, LAMBDA(r, c, r*c)) จะได้ {1,2,3;2,4,6} ไม่ใช่ {0,0,0;0,0,0}
.
ต้องระวังเรื่องนี้ถ้าคุณเคยใช้ภาษา programming ที่เริ่มนับจาก 0 (เช่น Python, JavaScript) เพราะ Excel ใช้ 1-based indexing ในทุก function อ่ะนะ ผมเองก็เคยงงตอนแรกๆ เหมือนกัน 555
สาเหตุหลัก 3 ข้อครับ:
.
**(1) rows หรือ cols น้อยกว่า 1 หรือไม่ใช่ตัวเลข** → ตรวจสอบว่าใส่ค่าเป็นจำนวนเต็มบวกหรือไม่
.
**(2) LAMBDA ไม่ได้รับ parameter ครบ 2 ตัว** → ต้องประกาศ (r, c) ครบเสมอ แม้ไม่ได้ใช้ในการคำนวณ เช่น ใช้ LAMBDA(r, c, “X”) ไม่ใช่ LAMBDA(“X”)
.
**(3) การคำนวณภายใน LAMBDA เกิด error** → เช่น หารด้วยศูนย์ หรือ INDEX เกินขอบเขต
.
💡 **Tip:** ใช้ Evaluate Formula (Alt+M+V) เพื่อดูว่า error เกิดที่ไหน ผมใช้วิธีนี้ debug บ่อยมากครับ
ใช้ได้ครับ แต่ต้องประกาศ parameter ครบ 2 ตัวเสมอ
.
เช่น =MAKEARRAY(3, 3, LAMBDA(r, c, “X”)) จะเติม “X” ทุกเซลล์ แม้ไม่ได้ใช้ r และ c ในการคำนวณ
.
หรือ =MAKEARRAY(5, 5, LAMBDA(r, c, RANDBETWEEN(1,100))) ก็ไม่ได้ใช้ r, c แต่ต้องประกาศไว้
.
ถ้าไม่ประกาศ parameter ครบจะได้ #VALUE! error ทันที นี่คือข้อกำหนดของ MAKEARRAY ที่ LAMBDA ต้องรับ parameter 2 ตัวเสมอครับ แม้จะไม่ได้ใช้ก็ตาม 😅
MAKEARRAY เป็น LAMBDA Helper Function ที่มีใน Excel for Microsoft 365, Excel 2024 และ Excel for the web เท่านั้นครับ
.
ไม่มีใน Excel 2021, 2019, 2016 หรือเวอร์ชันเก่ากว่า
.
ถ้าคุณใช้ Excel เวอร์ชันเก่า จะเห็น #NAME? error เมื่อใช้ MAKEARRAY เพราะ Excel ไม่รู้จัก function นี้
.
ต้อง upgrade เป็น Microsoft 365 subscription หรือ Excel 2024 ถึงจะใช้ได้ (ต้องยอมรับว่า LAMBDA functions เหล่านี้เจ๋งจริงๆ คุ้มค่า upgrade ครับ 😎)
ได้ครับ แต่มีข้อจำกัดและข้อควรระวัง:
.
**(1) Limit ของ Excel Worksheet** → Dynamic Array รองรับสูงสุดประมาณ 1 ล้านเซลล์ (rows × cols ≤ 1,048,576)
.
**(2) Performance อาจช้า** → ถ้า Array ใหญ่มาก (เช่น 1000×1000) จะทำให้ไฟล์ช้าลงเพราะทุกเซลล์ต้องคำนวณผ่าน LAMBDA
.
**(3) Function ซับซ้อนยิ่งช้า** → ถ้าใช้ function ที่หนักใน LAMBDA (เช่น VLOOKUP, XLOOKUP) จะยิ่งช้า
.
💡 **แนะนำ:** ทดสอบด้วยขนาดเล็กก่อน (เช่น 10×10) แล้วค่อยขยายขนาดทีละน้อย ผมเคยสร้าง 5000×5000 แล้ว Excel แทบค้างเลยครับ 😭
ขึ้นอยู่กับว่าใช้ function อะไรใน LAMBDA ครับ
.
**ถ้าใช้ volatile function** (เช่น RANDBETWEEN, RAND, NOW, TODAY) → ค่าจะเปลี่ยนทุกครั้งที่ workbook recalculate (กด F9 หรือมีการแก้ไขเซลล์ใดๆ)
.
**ถ้าใช้ function ธรรมดา** (เช่น r*c หรือ IF(r=c,1,0)) → ค่าจะคงที่ไม่เปลี่ยนแปลง
.
💡 **Tip:** ถ้าต้องการให้ค่าสุ่มคงที่ หลังจากสร้างด้วย RANDBETWEEN แล้ว ให้ Copy ผลลัพธ์ → Paste Values เพื่อแปลงเป็นค่าแบบคงที่ (ผมใช้วิธีนี้บ่อยมากเวลาสร้าง test data ครับ)
ได้ครับ คุณสามารถอ้างอิง Named Range หรือ Table ภายใน LAMBDA ได้ตามปกติ
.
**ตัวอย่างที่ 1:** =MAKEARRAY(Rows, Cols, LAMBDA(r, c, INDEX(DataTable, r, c))) → สร้าง Array โดยดึงค่าจาก Table
.
**ตัวอย่างที่ 2:** =MAKEARRAY(5, 3, LAMBDA(r, c, VLOOKUP(INDEX(IDList, r), ProductTable, c+1, FALSE))) → ดึงข้อมูลจากหลาย column ตาม ID list
.
วิธีนี้เจ๋งมากเวลาต้องการทำ dynamic report หรือ dashboard ครับ ผมใช้บ่อยมากตอนทำงานกับ Table ใน Excel 😎
**MAP** → ใช้กับ array ที่มีอยู่แล้ว และประมวลผลแต่ละค่าใน array นั้น
.
**MAKEARRAY** → สร้าง array ใหม่จากศูนย์โดยใช้ row/column index คำนวณค่า
.
**ตัวอย่างเปรียบเทียบ:**
– =MAP({1,2,3}, LAMBDA(x, x*2)) → ใช้ MAP เพราะมี array {1,2,3} อยู่แล้ว
– =MAKEARRAY(3,1,LAMBDA(r,c,r*2)) → ใช้ MAKEARRAY เพราะสร้าง array ใหม่จากตำแหน่ง
.
สรุปง่ายๆ คือ… ใช้ MAP เมื่อต้องการ**แปลงข้อมูลเดิม** ใช้ MAKEARRAY เมื่อต้องการ**สร้างข้อมูลใหม่** ครับ 😎
เคยเจอมั้ยครับ… ตอนต้องสร้างข้อมูลทดสอบหลักร้อยหลักพันแถว แล้วต้องนั่งพิมพ์เองทีละเซลล์ เหนื่อยมากกกก 😭
.
MAKEARRAY เกิดมาเพื่อแก้ปัญหานี้แหละครับ 🚀
.
MAKEARRAY สร้าง Dynamic Array ขนาดที่กำหนด (rows × cols) โดยใช้ LAMBDA function คำนวณค่าในแต่ละเซลล์ตามตำแหน่ง row และ column ต่างจาก SEQUENCE ที่สร้างเฉพาะตัวเลขเรียงลำดับ MAKEARRAY สามารถสร้างข้อมูลที่ซับซ้อนได้มากกว่า 😎
.
เช่น สร้างตารางสูตรคูณ, matrix คำนวณ, pattern พิเศษ, หรือแม้แต่ข้อมูลสุ่มหลักพันแถวก็ได้ ด้วยสูตรเดียว! 💡
.
โดย LAMBDA จะถูกเรียกทำงานสำหรับทุกเซลล์ในผลลัพธ์ ทำให้สร้างข้อมูลจำนวนมากได้อย่างรวดเร็ว เหมาะสำหรับสร้าง dataset ทดสอบ lookup table หรือข้อมูลที่มีรูปแบบเฉพาะ
.
ส่วนตัวผมใช้ MAKEARRAY บ่อยมากตอนต้องสร้างข้อมูลทดสอบครับ ประหยัดเวลาได้เป็นชั่วโมงเลย 😅
.
รองรับใน Excel 365 และ Excel 2024 เท่านั้นนะครับ