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 ที่อ่านง่าย
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| [parameter1]ไม่บังคับ | Name | parameter ตัวแรก ตั้งชื่ออะไรก็ได้ (เช่น x, price, quantity) ไม่ใช้จุดในชื่อ ไม่ควรขึ้นต้นด้วยตัวเลข parameter จะรับค่าจากการเรียกใช้ custom function หรือจาก helper functions เช่น MAP, REDUCE |
| [parameter2]ไม่บังคับ | Name | parameter ตัวที่สอง (ถ้ามี) สามารถมี parameter เพิ่มเติมได้ไม่จำกัด (สูงสุด 253 parameters) ทุก parameter ต้องประกาศก่อน calculation รองรับ cell reference, string, number, array หรือ data type อื่นๆ |
| […]ไม่บังคับ | Name | parameter เพิ่มเติม (optional) สามารถมีได้หลายตัวตามความต้องการ ไม่จำกัดจำนวนจนถึง 253 parameters ทุก parameter ต้องประกาศก่อน calculation argument สุดท้าย |
| calculation | Formula | สูตรคำนวณที่ใช้ parameters มาประมวลผล ต้องเป็น argument สุดท้ายเสมอ ต้อง return ค่าผลลัพธ์ออกมา สามารถใช้ฟังก์ชันอื่นๆ ภายใน calculation ได้ รวมถึง LET สำหรับประกาศตัวแปรภายใน |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
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
แทนที่การพิมพ์สูตรซ้ำๆ เช่น แปลงหน่วยอุณหภูมิ คำนวณภาษี 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 ที่รับ parameter x แล้วคูณด้วย 2 จากนั้นเรียกใช้ทันทีด้วย (10) ได้ผลลัพธ์ 20
วิธีนี้ใช้สำหรับทดสอบว่าสูตร LAMBDA ทำงานถูกต้องก่อนบันทึกลงใน Name Manager วงเล็บแรก (x, x*2) คือ definition ของ LAMBDA วงเล็บที่สอง (10) คือการเรียกใช้ function ด้วย argument 10
เปิด Name Manager ด้วย Ctrl+F3 กด New ตั้งชื่อว่า Double ใน Refers to ใส่ =LAMBDA(x, x*2) บันทึก จากนั้นเรียกใช้ได้ทั่ว workbook ด้วย =Double(25) ได้ผลลัพธ์ 50
ข้อสังเกต: เมื่อบันทึกลง Name Manager ไม่ต้องมี (10) ต่อท้าย เพราะเป็นแค่ definition ไม่ใช่การเรียกใช้ 😎
สร้าง custom function แปลง Celsius เป็น Fahrenheit ใช้สูตร (C × 9/5) + 32 บันทึกชื่อว่า CelsiusToFahrenheit เรียกใช้ด้วย =CelsiusToFahrenheit(100) ได้ 212°F ใช้แทนการจำสูตรแปลงหน่วย ชื่อฟังก์ชันบอกความหมายชัดเจน เรียกใช้ง่ายและอ่านง่าย
สร้างฟังก์ชันคำนวณปริมาตรกล่องรับ 3 parameters (length, width, height) คูณกันได้ปริมาตร เรียกใช้ด้วย =BoxVolume(5, 3, 2) ได้ 30 ตัวอย่างแสดงการรับหลาย parameters ลำดับต้องตรงกับการประกาศใน LAMBDA ตั้งชื่อ parameter ให้สื่อความหมายชัดเจนเพื่ออ่านง่าย
ใช้ LET ภายใน LAMBDA เพื่อประกาศตัวแปร r_squared = radius^2 แล้วนำไปคูณกับ PI() ประโยชน์คือถ้าใช้ radius^2 หลายครั้งในสูตรเดียวกัน LET จะคำนวณครั้งเดียวแล้ว reuse ผลลัพธ์ ทำให้เร็วขึ้นและอ่านง่ายขึ้น เรียกใช้ด้วย =CircleArea(5) ได้พื้นที่วงกลม 78.54
MAP ส่งทุกค่าใน array {10, 20, 30, 40, 50} เข้า LAMBDA ทีละตัว LAMBDA รับเป็น parameter v แล้วคูณ 1.07 (เพิ่ม VAT 7%)
MAP return array ใหม่ขนาดเท่าเดิมที่ทุกค่าผ่าน LAMBDA แล้ว ใช้สำหรับ apply การคำนวณเดียวกันกับหลายค่าพร้อมกัน ไม่ต้อง copy สูตรลงแต่ละเซลล์ 😎
REDUCE บวกสะสมค่าใน array {5, 10, 15, 20} เริ่มจาก initial value 0 LAMBDA รับ 2 parameters: accumulator (ค่าสะสม) และ value (ค่าปัจจุบัน) บวกกันแล้วเก็บเป็น accumulator ใหม่
รอบที่ 1: 0+5=5 รอบที่ 2: 5+10=15 รอบที่ 3: 15+15=30 รอบที่ 4: 30+20=50 REDUCE return ค่าเดียวหลังจากประมวลผลครบทุก element
BYROW ส่งข้อมูลแต่ละแถวใน A1:C3 เข้า LAMBDA ทีละแถว parameter row เป็น array ของแถวนั้นๆ เช่น แถวแรก row = {10, 20, 30} LAMBDA คำนวณ SUM(row) ได้ 60
แถวที่สอง SUM({40, 50, 60}) = 150 แถวที่สาม SUM({70, 80, 90}) = 240 BYROW return array แนวตั้ง {60; 150; 240} ใช้สำหรับประมวลผลข้อมูลทีละแถวอัตโนมัติ
Recursive LAMBDA เรียกตัวเองซ้ำจนกว่าจะไม่เจอช่องว่างซ้ำซ้อน (double space) ตรวจสอบด้วย FIND(" ", text) ถ้าไม่เจอ (ISERROR=TRUE) return text ออกมา
ถ้าเจอ แทนที่ double space ด้วย single space แล้วเรียก RemoveExtraSpaces ซ้ำอีกครั้ง วน loop จนกว่าจะไม่มี double space เหลือ
ข้อควรระวัง: ต้องมีเงื่อนไขหยุดเสมอ (ในที่นี้คือ ISERROR) ไม่เช่นนั้นจะเกิด infinite loop 😅
สร้างฟังก์ชันคำนวณ commission แบบ progressive tiers: 0-10,000 ได้ 5%, 10,001-50,000 ได้ 8%, 50,001 ขึ้นไปได้ 12% ใช้ LET ประกาศตัวแปร tier1, tier2, tier3 แล้วบวกรวมกัน
ขาย 65,000: tier1=500 (10,000×5%), tier2=3,200 (40,000×8%), tier3=1,800 (15,000×12%) รวม 5,500
ฟังก์ชันนี้ซับซ้อนถ้าเขียนในเซลล์ธรรมดา แต่ LAMBDA + LET ทำให้อ่านง่ายและใช้ซ้ำได้ทั่ว workbook แก้ไข rate ที่เดียวมีผลทั้งไฟล์ 😎
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 จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
BYCOL ส่งแต่ละคอลัมน์ทั้งคอลัมน์เข้า LAMBDA แล้ว return ผลลัพธ์เป็น Array แถวเดียว ต่างจาก MAP ที่ส่งทีละเซลล์ และ BYROW ที่ส่งทีละแถว ทำให้สามารถคำนวณ SUM, MAX, AVERAGE ของทุกคอลัมน์พร้อมกันในสูตรเดียว แทนที่จะต้องเขียนสูตรซ้ำหลายครั้ง ซึ่งช่วยลดโอกาสเกิดข้อผิดพลาดและทำให้แก้ไข logic ได้ง่ายกว่ามาก เหมาะสำหรับงาน dashboard summary, quality checking และการวิเคราตลัพธ์ทีละคอลัมน์แบบเป็นระบบ
BYROW เป็น LAMBDA Helper Function ที่ประมวลผลข้อมูลทีละแถว โดยส่งแต่ละแถวทั้งหมด (เป็น array) เข้าไปใน LAMBDA แล้ว return ผลลัพธ์เป็นคอลัมน์เดียว ที่เจ๋งคือ BYROW รองรับทั้ง short-form syntax (=BYROW(array, SUM)) สำหรับการ aggregate ง่ายๆ และ custom LAMBDA สำหรับ logic ซับซ้อนที่ต้องตรวจสอบหลายคอลัมน์พร้อมกัน เช่น ตรวจว่านักเรียนผ่านทุกวิชา (MIN>=50) หรือรวมข้อความหลายคอลัมน์ด้วย TEXTJOIN ต่างจาก MAP ที่ทำงานทีละ cell และ BYCOL ที่ทำงานทีละคอลัมน์ BYROW ทำให้คุณเขียน logic ครั้งเดียว แล้วประมวลผลทุกแถวพร้อมกันทันที
LET ช่วยให้คุณกำหนดชื่อตัวแปร (Named Variables) ภายในสูตร Excel เพื่อเก็บค่าหรือผลลัพธ์การคำนวณ จากนั้นนำชื่อเหล่านั้นมาใช้ซ้ำในสูตรเดียวกัน
.
ทำให้สูตรที่ซับซ้อนอ่านง่ายขึ้นเยอะ ลดข้อผิดพลาดจากการเขียนซ้ำ และเพิ่มความเร็วเพราะแต่ละการคำนวณจะทำงานเพียงครั้งเดียว ไม่ว่าจะถูกอ้างอิงกี่ครั้งก็ตาม
MAKEARRAY สร้าง Dynamic Array ตามขนาดที่กำหนด (rows × cols) โดยใช้ LAMBDA function คำนวณค่าในแต่ละเซลล์ตามตำแหน่ง row และ column index (เริ่มที่ 1) ต่างจาก SEQUENCE ที่สร้างเฉพาะตัวเลขเรียงลำดับ MAKEARRAY สามารถสร้างข้อมูลได้หลากหลายรูปแบบตามการคำนวณที่กำหนดใน LAMBDA เช่น ตารางสูตรคูณ matrix ทางคณิตศาสตร์ pattern ข้อความ หรือค่าสุ่ม เหมาะสำหรับสร้าง dataset ขนาดใหญ่ที่มีรูปแบบเฉพาะ หรือ lookup table แบบ dynamic โดย LAMBDA จะถูกเรียกทำงานสำหรับทุกเซลล์ใน array ผลลัพธ์ ทำให้สร้างข้อมูลจำนวนมากได้อย่างรวดเร็วด้วยสูตรเดียว
MAP ส่งค่าทีละ element จาก Array หนึ่งหรือหลายตัวเข้าไปประมวลผลใน LAMBDA แล้วคืน Array ผลลัพธ์ที่มีขนาดเท่ากับ input array ต้นฉบับ เหมาะสำหรับ element-wise operations เช่น การแปลงค่าทุกตัว การตรวจสอบเงื่อนไขทีละเซลล์ หรือการคำนวณจากหลาย Array พร้อมกัน ต่างจาก BYROW/BYCOL ที่ส่งทั้งแถวหรือทั้งคอลัมน์ MAP จะส่งเฉพาะค่าเดี่ยวๆ ทีละตำแหน่ง
REDUCE เป็นฟังก์ชัน Helper ที่ทำงานร่วมกับ LAMBDA เพื่อวนลูปประมวลผลข้อมูลใน Array โดยรับค่าเริ่มต้น (initial_value) และส่งค่าเข้า LAMBDA ทีละ element เพื่อคำนวณค่าสะสม (accumulator) ที่สืบเนื่องจากรอบก่อนหน้า แล้ว return ผลลัพธ์สุดท้ายเพียงค่าเดียว ต่างจาก SCAN ที่ return Array ของทุกขั้นตอน REDUCE เหมาะสำหรับการสร้าง custom aggregation ที่ซับซ้อนกว่าฟังก์ชันมาตรฐาน
SCAN วนลูปผ่าน array โดยใช้ LAMBDA function คำนวณค่าสะสม (accumulator) และ return array ที่แสดงค่าสะสมในทุกขั้นตอนของการคำนวณ ต่างจาก REDUCE ที่ return เฉพาะค่าสุดท้าย SCAN เหมาะสำหรับ Running Total, Running Maximum/Minimum, การคำนวณดอกเบี้ยทบต้น หรือการแสดงผลลัพธ์แบบต่อเนื่องที่ต้องการเห็นทุกขั้นตอนของการเปลี่ยนแปลง ใช้งานได้ใน Excel 365 และ Excel 2024
SWITCH ประเมินนิพจน์หรือค่าหนึ่งค่า แล้วเปรียบเทียบกับรายการค่าที่กำหนดตามลำดับ เมื่อพบค่าที่ตรงกันจะส่งคืนผลลัพธ์ที่เชื่อมโยงทันที หากไม่ตรงกับค่าใดเลยสามารถกำหนด default value ได้ เหมาะสำหรับแทนที่ nested IF หลายชั้นด้วยไวยากรณ์ที่อ่านง่ายกว่ามาก
COPILOT เป็นฟังก์ชันแรกใน Excel ที่ใช้ AI (GPT-4.1-mini) ประมวลผลข้อมูลและสร้างข้อความตามคำสั่งที่กำหนด เหมาะสำหรับสรุปข้อมูล จัดหมวดหมู่ และสร้าง content อัตโนมัติ
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่