LAMBDA สร้าง custom function ที่ใช้ซ้ำได้โดยไม่ต้องเขียน VBA กำหนด parameter และ calculation แล้วบันทึกผ่าน Name Manager (Ctrl+F3) ด้วยชื่อที่จดจำง่าย เรียกใช้เหมือนฟังก์ชันมาตรฐาน สูตรอยู่ที่เดียว แก้ไขที่เดียวมีผลทั้ง workbook ใช้ร่วมกับ helper functions (MAP, REDUCE, SCAN, BYROW, BYCOL, MAKEARRAY) สร้างสูตร dynamic array ขั้นสูงได้ รองรับ recursive LAMBDA เรียกตัวเองซ้ำจนถึงเงื่อนไข แทนที่สูตรยาวๆ ด้วย custom function ที่อ่านง่าย
=LAMBDA([parameter1, parameter2, ...], calculation)
=LAMBDA([parameter1, parameter2, ...], calculation)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| parameter1 | Name | Optional | parameter ตัวแรก ตั้งชื่ออะไรก็ได้ (เช่น x, price, quantity) ไม่ใช้จุดในชื่อ ไม่ควรขึ้นต้นด้วยตัวเลข parameter จะรับค่าจากการเรียกใช้ custom function หรือจาก helper functions เช่น MAP, REDUCE | |
| parameter2 | Name | Optional | parameter ตัวที่สอง (ถ้ามี) สามารถมี parameter เพิ่มเติมได้ไม่จำกัด (สูงสุด 253 parameters) ทุก parameter ต้องประกาศก่อน calculation รองรับ cell reference, string, number, array หรือ data type อื่นๆ | |
| … | Name | Optional | parameter เพิ่มเติม (optional) สามารถมีได้หลายตัวตามความต้องการ ไม่จำกัดจำนวนจนถึง 253 parameters ทุก parameter ต้องประกาศก่อน calculation argument สุดท้าย | |
| calculation | Formula | Yes | สูตรคำนวณที่ใช้ parameters มาประมวลผล ต้องเป็น argument สุดท้ายเสมอ ต้อง return ค่าผลลัพธ์ออกมา สามารถใช้ฟังก์ชันอื่นๆ ภายใน calculation ได้ รวมถึง LET สำหรับประกาศตัวแปรภายใน |
แทนที่การพิมพ์สูตรซ้ำๆ เช่น แปลงหน่วยอุณหภูมิ คำนวณภาษี VAT คำนวณ discount ด้วย custom function ที่เรียกใช้ง่าย เช่น =TaxVAT(1000) แทนการพิมพ์ =1000*1.07 ทุกครั้ง
แยกสูตรยาวๆ ที่อ่านยากออกเป็น custom functions หลายตัว แต่ละตัวทำงานชัดเจน สูตรหลักอ่านง่ายขึ้น เช่น =CalculateProfit(revenue, cost) แทนสูตรยาว 10 บรรทัด แก้ไขที่เดียวมีผลทั้ง workbook
ใช้ LAMBDA ร่วมกับ MAP, REDUCE, SCAN, BYROW, BYCOL สร้างฟังก์ชันที่ประมวลผล array ทีละ element หรือทีละแถว/คอลัมน์ เช่น filter ข้อมูลด้วยเงื่อนไขซับซ้อน หรือ transform ข้อมูลทีละ row แบบอัตโนมัติ
สร้าง LAMBDA ที่เรียกตัวเองซ้ำๆ จนกว่าจะถึงเงื่อนไขหยุด เช่น ลบช่องว่างซ้ำซ้อนออกทั้งหมดทีละตัว คำนวณ factorial, Fibonacci หรือ pattern อื่นที่ต้อง loop ซ้ำ ต้องมีเงื่อนไขหยุดเสมอเพื่อป้องกัน infinite loop
สร้างชุด custom functions มาตรฐานสำหรับองค์กร เช่น ฟังก์ชันคำนวณ commission ตาม rule บริษัท แชร์ workbook ให้ทีมใช้ custom functions เดียวกัน ทำให้ทีมทำงานสม่ำเสมอและแก้ไขง่าย
LAMBDA(x, x*2)(10)=LAMBDA(x, x*2)(10)
20
Ctrl+F3 → New → Name: Double → Refers to: =LAMBDA(x, x*2) จากนั้นเรียกใช้: =Double(25)Ctrl+F3 → New → Name: Double → Refers to: =LAMBDA(x, x*2)
จากนั้นเรียกใช้: =Double(25)
50
Name: CelsiusToFahrenheit → Refers to: =LAMBDA(celsius, celsius*9/5+32) เรียกใช้: =CelsiusToFahrenheit(100)Name: CelsiusToFahrenheit → Refers to: =LAMBDA(celsius, celsius*9/5+32)
เรียกใช้: =CelsiusToFahrenheit(100)
212
Name: BoxVolume → Refers to: =LAMBDA(length, width, height, length*width*height) เรียกใช้: =BoxVolume(5, 3, 2)Name: BoxVolume → Refers to: =LAMBDA(length, width, height, length*width*height)
เรียกใช้: =BoxVolume(5, 3, 2)
30
Name: CircleArea → Refers to: =LAMBDA(radius, LET(r_squared, radius^2, r_squared*PI())) เรียกใช้: =CircleArea(5)Name: CircleArea → Refers to: =LAMBDA(radius, LET(r_squared, radius^2, r_squared*PI()))
เรียกใช้: =CircleArea(5)
78.54
MAP({10, 20, 30, 40, 50}, LAMBDA(v, v*1.07))=MAP({10, 20, 30, 40, 50}, LAMBDA(v, v*1.07))
{10.7, 21.4, 32.1, 42.8, 53.5}
REDUCE(0, {5, 10, 15, 20}, LAMBDA(accumulator, value, accumulator+value))=REDUCE(0, {5, 10, 15, 20}, LAMBDA(accumulator, value, accumulator+value))
50
สมมติ A1:C3 มีตัวเลข: 10, 20, 30 40, 50, 60 70, 80, 90 =BYROW(A1:C3, LAMBDA(row, SUM(row)))สมมติ A1:C3 มีตัวเลข:
10, 20, 30
40, 50, 60
70, 80, 90
=BYROW(A1:C3, LAMBDA(row, SUM(row)))
{60; 150; 240}
Name: RemoveExtraSpaces → Refers to: =LAMBDA(text, IF(ISERROR(FIND(" ", text)), text, RemoveExtraSpaces(SUBSTITUTE(text, " ", " ")))) เรียกใช้: =RemoveExtraSpac…Name: RemoveExtraSpaces → Refers to:
=LAMBDA(text, IF(ISERROR(FIND(" ", text)), text, RemoveExtraSpaces(SUBSTITUTE(text, " ", " "))))
เรียกใช้: =RemoveExtraSpaces("Hello World")
"Hello World"
Name: CalculateCommission → Refers to: =LAMBDA(sales, LET( tier1, IF(sales10000, IF(sales50000, (sales-50000)*0.12, 0), tier1 + tier2 + tier3 ) ) เรียกใช้: =Cal…Name: CalculateCommission → Refers to:
=LAMBDA(sales,
LET(
tier1, IF(sales<=10000, sales*0.05, 500),
tier2, IF(sales>10000, IF(sales<=50000, (sales-10000)*0.08, 3200), 0),
tier3, IF(sales>50000, (sales-50000)*0.12, 0),
tier1 + tier2 + tier3
)
)
เรียกใช้: =CalculateCommission(65000)
6800
LAMBDA เป็นสูตร Excel ปกติที่ทำงานบน Formula Bar ได้ทันทีโดยไม่ต้องเปิด VBA Editor ไฟล์ไม่ต้องบันทึกเป็น .xlsm ไม่มีปัญหา macro security และไม่ต้องเรียนรู้ภาษา VBA ผู้ใช้ Excel ทั่วไปสร้างได้โดยไม่ต้องเป็น programmer แต่มีข้อจำกัดคือทำได้แค่สูตรคำนวณ ไม่สามารถควบคุม UI, event handling หรือเชื่อมต่อ external API เหมือน VBA
ได้ครับ ถ้าผู้รับใช้ Excel 365 หรือ Excel 2024 Named LAMBDA ที่สร้างผ่าน Name Manager จะติดไปกับไฟล์อัตโนมัติ ผู้รับเปิดไฟล์แล้วเรียกใช้ custom function ได้เลย
.
แต่ถ้าผู้รับใช้ Excel 2021, 2019 หรือเก่ากว่า จะขึ้น #NAME? error เพราะเวอร์ชันเหล่านั้นไม่รองรับ LAMBDA 😅 แนะนำให้แจ้งผู้รับว่าต้องใช้ Excel 365 หรือ 2024
ทดสอบสูตรก่อนด้วย inline LAMBDA เช่น =LAMBDA(x, x*2)(10) → 20 ถ้าถูกต้องแล้ว กด Ctrl+F3 เปิด Name Manager กด New ใส่ชื่อ (เช่น Double) ใน Refers to ใส่ =LAMBDA(x, x*2) ไม่ต้องมี (10) ต่อท้าย กด OK เสร็จแล้วเรียกใช้ได้ทั่ว workbook ด้วย =Double(5) ข้อควรระวัง: ชื่อต้องขึ้นต้นด้วยตัวอักษร ไม่มีช่องว่าง ไม่ซ้ำกับฟังก์ชันมาตรฐาน
Recursive LAMBDA คือ LAMBDA ที่เรียกตัวเองซ้ำๆ จนกว่าจะถึงเงื่อนไขหยุด ใช้สำหรับ pattern ที่ต้องทำซ้ำจนได้ผลลัพธ์ เช่น ลบตัวอักษรที่ไม่ต้องการออกทีละตัว คำนวณ factorial (5! = 5×4×3×2×1) หรือลบช่องว่างซ้ำซ้อนออกทั้งหมด
.
ต้องมีเงื่อนไข IF ที่หยุด recursion เสมอ มิฉะนั้นจะเกิด infinite loop และ Excel จะ error #NUM! (เกิน limit การเรียกซ้ำ) 😅 ใช้เมื่อ loop ปกติทำไม่ได้หรือยากต่อการเขียน
ใช้ LET ภายใน LAMBDA เพื่อประกาศตัวแปรชั่วคราว (temporary variables) ลดการคำนวณซ้ำ เช่น =LAMBDA(x, LET(sq, x^2, sq*PI())) คำนวณ x^2 ครั้งเดียวเก็บในตัวแปร sq แล้วนำไปใช้ต่อ
.
ถ้าใช้ x^2 หลายจุดในสูตรเดียวกัน LET จะคำนวณครั้งเดียวแล้ว reuse ผลลัพธ์ ทำให้เร็วขึ้นและอ่านง่ายขึ้น โดยเฉพาะ LAMBDA ที่มี calculation ซับซ้อนหรือมีการคำนวณซ้ำ LET ช่วยจัดระเบียบโค้ดและเพิ่มประสิทธิภาพ 😎
ตั้งได้ แต่ไม่แนะนำครับ เพราะ Excel จะให้ความสำคัญกับฟังก์ชันมาตรฐานก่อน custom function ของคุณจะไม่ถูกเรียกใช้ เช่น ถ้าตั้งชื่อว่า SUM แล้วเรียก =SUM(A1:A10) Excel จะใช้ฟังก์ชัน SUM มาตรฐานแทนที่ LAMBDA ของคุณ
.
ควรตั้งชื่อที่ไม่ซ้ำกันและสื่อความหมายชัดเจน เช่น MySUM, SumWithTax, CustomSum เป็นต้น ชื่อที่ดีช่วยให้เข้าใจฟังก์ชันโดยไม่ต้องเปิด Name Manager ดู 😎
รองรับเฉพาะ Excel for Microsoft 365 และ Excel 2024 เท่านั้น ไม่มีใน Excel 2021, 2019, 2016, 2013 หรือเวอร์ชันเก่ากว่า ถ้าต้องการใช้ LAMBDA ต้อง subscribe Microsoft 365 หรืออัปเกรดเป็น Excel 2024 (perpetual license) Excel 2021 แม้จะเป็นเวอร์ชันใหม่ แต่ไม่มี LAMBDA เพราะ Microsoft จำกัด dynamic array features ให้เฉพาะ 365 และ 2024 เท่านั้น
LAMBDA แก้ปัญหา 3 ข้อครับ:
.
(1) สูตรซับซ้อนซ้ำกันหลายเซลล์ แก้ไขยากเพราะต้องแก้ทุกเซลล์ LAMBDA แก้ไขที่เดียวมีผลทุกที่
(2) สูตรยาว 10 บรรทัดอ่านยาก LAMBDA แทนด้วยชื่อสั้นๆ อ่านง่าย
(3) ทำงานร่วมกับคนอื่นยาก ต้องอธิบายสูตร LAMBDA ตั้งชื่อชัดเจนแล้วทีมเรียกใช้ได้เลย
.
โดยเฉพาะองค์กรใหญ่ที่ต้องการ function library สำหรับทั้งทีม LAMBDA ทำให้ทีมทำงานสม่ำเสมอและบำรุงรักษาง่าย 😎
LAMBDA ประมวลผลเท่ากับสูตร Excel ธรรมดา ไม่ช้ากว่า แต่ถ้า LAMBDA ซับซ้อนหรือเรียกใช้กับข้อมูลขนาดใหญ่ (เช่น MAP กับ array นับหมื่นเซลล์) อาจช้าได้
.
แนะนำให้ใช้ LET ภายใน LAMBDA เพื่อเก็บผลลัพธ์ชั่วคราวแทนการคำนวณซ้ำ และใช้ helper functions (MAP, REDUCE, SCAN) ที่เหมาะสมแทนการ nested IF หลายชั้น ถ้าต้องการประสิทธิภาพสูงสุดสำหรับข้อมูลขนาดใหญ่มาก ควรใช้ Power Query แทน
LAMBDA ช่วยให้คุณสร้าง custom function ของตัวเองได้โดยไม่ต้องเขียน VBA หรือ macro กำหนด parameter ที่รับค่าเข้ามา และ calculation ที่จะประมวลผล จากนั้นบันทึกผ่าน Name Manager ด้วยชื่อที่จดจำง่าย เรียกใช้ซ้ำได้ทั้ง workbook เหมือนฟังก์ชันมาตรฐานของ Excel
.
เหมาะสำหรับสูตรที่ใช้บ่อยหรือสูตรซับซ้อนที่ต้องการจัดระเบียบให้อ่านง่าย ทำงานร่วมกับ helper functions (MAP, REDUCE, SCAN, BYROW, BYCOL, MAKEARRAY) สร้างสูตร dynamic array ขั้นสูงได้
.
รองรับ recursive LAMBDA สำหรับ pattern ที่เรียกตัวเองซ้ำๆ มีตั้งแต่ Excel 365 และ Excel 2024