---
title: LAMBDA – สร้างฟังก์ชันที่กำหนดเอง
url: https://www.thepexcel.com/functions/excel/logical/lambda/
type: function-explainer
program: Excel
syntax: "=LAMBDA([parameter1, parameter2, ...], calculation)"
date: 2025-12-18
scores:
  popularity: 9
  difficulty: 8
  usefulness: 10
---

# LAMBDA – สร้างฟังก์ชันที่กำหนดเอง

> สร้างฟังก์ชันที่กำหนดเองได้โดยไม่ต้องเขียนโค้ด

## คำอธิบาย

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 ที่อ่านง่าย

## Syntax

```excel
=LAMBDA([parameter1, parameter2, ...], calculation)
```

**excel**

```excel
=LAMBDA(x, x*2)(10)
```

Inline test: ทดสอบ LAMBDA ที่คูณ 2 โดยเรียกใช้ทันทีด้วย argument 10 ได้ผลลัพธ์ 20

**excel**

```excel
ชื่อ: Double | Refers to: =LAMBDA(x, x*2)
```

Named LAMBDA: บันทึกใน Name Manager แล้วเรียกใช้ได้ด้วย =Double(5) ทั่ว workbook

**excel**

```excel
=MAP(A1:A10, LAMBDA(v, v*2))
```

ใช้กับ MAP: Apply LAMBDA กับทุก element ใน array A1:A10 คูณ 2 ทุกค่า

**excel**

```excel
=REDUCE(0, A1:A10, LAMBDA(acc, val, acc+val))
```

ใช้กับ REDUCE: รับ 2 parameters (accumulator และ value) บวกสะสมทีละค่า

**excel**

```excel
=BYROW(A1:C5, LAMBDA(row, SUM(row)))
```

ใช้กับ BYROW: รับข้อมูลทั้ง row เป็น array คำนวณผลรวมแต่ละแถว

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| parameter1 | No | Name |  | parameter ตัวแรก ตั้งชื่ออะไรก็ได้ (เช่น x, price, quantity) ไม่ใช้จุดในชื่อ ไม่ควรขึ้นต้นด้วยตัวเลข parameter จะรับค่าจากการเรียกใช้ custom function หรือจาก helper functions เช่น MAP, REDUCE |
| parameter2 | No | Name |  | parameter ตัวที่สอง (ถ้ามี) สามารถมี parameter เพิ่มเติมได้ไม่จำกัด (สูงสุด 253 parameters) ทุก parameter ต้องประกาศก่อน calculation รองรับ cell reference, string, number, array หรือ data type อื่นๆ |
| ... | No | Name |  | parameter เพิ่มเติม (optional) สามารถมีได้หลายตัวตามความต้องการ ไม่จำกัดจำนวนจนถึง 253 parameters ทุก parameter ต้องประกาศก่อน calculation argument สุดท้าย |
| calculation | Yes | Formula |  | สูตรคำนวณที่ใช้ parameters มาประมวลผล ต้องเป็น argument สุดท้ายเสมอ ต้อง return ค่าผลลัพธ์ออกมา สามารถใช้ฟังก์ชันอื่นๆ ภายใน calculation ได้ รวมถึง LET สำหรับประกาศตัวแปรภายใน |

## เคสการใช้งาน

### สร้างฟังก์ชันคำนวณที่ใช้บ่อย

แทนที่การพิมพ์สูตรซ้ำๆ เช่น แปลงหน่วยอุณหภูมิ คำนวณภาษี VAT คำนวณ discount ด้วย custom function ที่เรียกใช้ง่าย เช่น =TaxVAT(1000) แทนการพิมพ์ =1000*1.07 ทุกครั้ง

_เหมาะกับ:_ formula-optimization

### จัดระเบียบสูตรซับซ้อน

แยกสูตรยาวๆ ที่อ่านยากออกเป็น custom functions หลายตัว แต่ละตัวทำงานชัดเจน สูตรหลักอ่านง่ายขึ้น เช่น =CalculateProfit(revenue, cost) แทนสูตรยาว 10 บรรทัด แก้ไขที่เดียวมีผลทั้ง workbook

_เหมาะกับ:_ code-organization

### สร้าง Dynamic Array Function

ใช้ LAMBDA ร่วมกับ MAP, REDUCE, SCAN, BYROW, BYCOL สร้างฟังก์ชันที่ประมวลผล array ทีละ element หรือทีละแถว/คอลัมน์ เช่น filter ข้อมูลด้วยเงื่อนไขซับซ้อน หรือ transform ข้อมูลทีละ row แบบอัตโนมัติ

_เหมาะกับ:_ array-processing

### Recursive Pattern (Pattern ซ้ำๆ)

สร้าง LAMBDA ที่เรียกตัวเองซ้ำๆ จนกว่าจะถึงเงื่อนไขหยุด เช่น ลบช่องว่างซ้ำซ้อนออกทั้งหมดทีละตัว คำนวณ factorial, Fibonacci หรือ pattern อื่นที่ต้อง loop ซ้ำ ต้องมีเงื่อนไขหยุดเสมอเพื่อป้องกัน infinite loop

_เหมาะกับ:_ recursion

### สร้าง Function Library สำหรับทีม

สร้างชุด custom functions มาตรฐานสำหรับองค์กร เช่น ฟังก์ชันคำนวณ commission ตาม rule บริษัท แชร์ workbook ให้ทีมใช้ custom functions เดียวกัน ทำให้ทีมทำงานสม่ำเสมอและแก้ไขง่าย

_เหมาะกับ:_ team-collaboration

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: Foundation - ทดสอบ LAMBDA แบบ Inline

```excel
=LAMBDA(x, x*2)(10)
```

**ผลลัพธ์:** `20`

สร้าง LAMBDA ที่รับ parameter x แล้วคูณด้วย 2 จากนั้นเรียกใช้ทันทีด้วย (10) ได้ผลลัพธ์ 20
.
วิธีนี้ใช้สำหรับทดสอบว่าสูตร LAMBDA ทำงานถูกต้องก่อนบันทึกลงใน Name Manager วงเล็บแรก (x, x*2) คือ definition ของ LAMBDA วงเล็บที่สอง (10) คือการเรียกใช้ function ด้วย argument 10

### 2. ตัวอย่างที่ 2: Foundation - Named LAMBDA ง่ายๆ

```excel
Ctrl+F3 → New → Name: Double → Refers to: =LAMBDA(x, x*2)
จากนั้นเรียกใช้: =Double(25)
```

**ผลลัพธ์:** `50`

เปิด Name Manager ด้วย Ctrl+F3 กด New ตั้งชื่อว่า Double ใน Refers to ใส่ =LAMBDA(x, x*2) บันทึก จากนั้นเรียกใช้ได้ทั่ว workbook ด้วย =Double(25) ได้ผลลัพธ์ 50
.
ข้อสังเกต: เมื่อบันทึกลง Name Manager ไม่ต้องมี (10) ต่อท้าย เพราะเป็นแค่ definition ไม่ใช่การเรียกใช้ 😎

### 3. ตัวอย่างที่ 3: Practical - แปลงหน่วยอุณหภูมิ

```excel
Name: CelsiusToFahrenheit → Refers to: =LAMBDA(celsius, celsius*9/5+32)
เรียกใช้: =CelsiusToFahrenheit(100)
```

**ผลลัพธ์:** `212`

สร้าง custom function แปลง Celsius เป็น Fahrenheit ใช้สูตร (C × 9/5) + 32 บันทึกชื่อว่า CelsiusToFahrenheit เรียกใช้ด้วย =CelsiusToFahrenheit(100) ได้ 212°F ใช้แทนการจำสูตรแปลงหน่วย ชื่อฟังก์ชันบอกความหมายชัดเจน เรียกใช้ง่ายและอ่านง่าย

### 4. ตัวอย่างที่ 4: Practical - หลาย Parameters

```excel
Name: BoxVolume → Refers to: =LAMBDA(length, width, height, length*width*height)
เรียกใช้: =BoxVolume(5, 3, 2)
```

**ผลลัพธ์:** `30`

สร้างฟังก์ชันคำนวณปริมาตรกล่องรับ 3 parameters (length, width, height) คูณกันได้ปริมาตร เรียกใช้ด้วย =BoxVolume(5, 3, 2) ได้ 30 ตัวอย่างแสดงการรับหลาย parameters ลำดับต้องตรงกับการประกาศใน LAMBDA ตั้งชื่อ parameter ให้สื่อความหมายชัดเจนเพื่ออ่านง่าย

### 5. ตัวอย่างที่ 5: Practical - ใช้ LET ภายใน LAMBDA

```excel
Name: CircleArea → Refers to: =LAMBDA(radius, LET(r_squared, radius^2, r_squared*PI()))
เรียกใช้: =CircleArea(5)
```

**ผลลัพธ์:** `78.54`

ใช้ LET ภายใน LAMBDA เพื่อประกาศตัวแปร r_squared = radius^2 แล้วนำไปคูณกับ PI() ประโยชน์คือถ้าใช้ radius^2 หลายครั้งในสูตรเดียวกัน LET จะคำนวณครั้งเดียวแล้ว reuse ผลลัพธ์ ทำให้เร็วขึ้นและอ่านง่ายขึ้น เรียกใช้ด้วย =CircleArea(5) ได้พื้นที่วงกลม 78.54

### 6. ตัวอย่างที่ 6: Advanced - ใช้กับ MAP

```excel
=MAP({10, 20, 30, 40, 50}, LAMBDA(v, v*1.07))
```

**ผลลัพธ์:** `{10.7, 21.4, 32.1, 42.8, 53.5}`

MAP ส่งทุกค่าใน array {10, 20, 30, 40, 50} เข้า LAMBDA ทีละตัว LAMBDA รับเป็น parameter v แล้วคูณ 1.07 (เพิ่ม VAT 7%)
.
MAP return array ใหม่ขนาดเท่าเดิมที่ทุกค่าผ่าน LAMBDA แล้ว ใช้สำหรับ apply การคำนวณเดียวกันกับหลายค่าพร้อมกัน ไม่ต้อง copy สูตรลงแต่ละเซลล์ 😎

### 7. ตัวอย่างที่ 7: Advanced - ใช้กับ REDUCE (2 parameters)

```excel
=REDUCE(0, {5, 10, 15, 20}, LAMBDA(accumulator, value, accumulator+value))
```

**ผลลัพธ์:** `50`

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

### 8. ตัวอย่างที่ 8: Advanced - ใช้กับ BYROW

```excel
สมมติ A1:C3 มีตัวเลข:
10, 20, 30
40, 50, 60
70, 80, 90

=BYROW(A1:C3, LAMBDA(row, SUM(row)))
```

**ผลลัพธ์:** `{60; 150; 240}`

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} ใช้สำหรับประมวลผลข้อมูลทีละแถวอัตโนมัติ

### 9. ตัวอย่างที่ 9: Advanced - Recursive LAMBDA (เรียกตัวเองซ้ำ)

```excel
Name: RemoveExtraSpaces → Refers to:
=LAMBDA(text, IF(ISERROR(FIND("  ", text)), text, RemoveExtraSpaces(SUBSTITUTE(text, "  ", " "))))

เรียกใช้: =RemoveExtraSpaces("Hello    World")
```

**ผลลัพธ์:** `"Hello World"`

Recursive LAMBDA เรียกตัวเองซ้ำจนกว่าจะไม่เจอช่องว่างซ้ำซ้อน (double space) ตรวจสอบด้วย FIND("  ", text) ถ้าไม่เจอ (ISERROR=TRUE) return text ออกมา
.
ถ้าเจอ แทนที่ double space ด้วย single space แล้วเรียก RemoveExtraSpaces ซ้ำอีกครั้ง วน loop จนกว่าจะไม่มี double space เหลือ
.
ข้อควรระวัง: ต้องมีเงื่อนไขหยุดเสมอ (ในที่นี้คือ ISERROR) ไม่เช่นนั้นจะเกิด infinite loop 😅

### 10. ตัวอย่างที่ 10: Advanced - Real-World (คำนวณ Commission แบบซับซ้อน)

```excel
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`

สร้างฟังก์ชันคำนวณ 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 ที่เดียวมีผลทั้งไฟล์ 😎

## หมายเหตุเพิ่มเติม

💡 **วิธีสร้าง Named LAMBDA ทีละขั้น:**

1. **ทดสอบสูตรก่อน**: พิมพ์สูตรปกติทดสอบว่าทำงานถูกต้อง เช่น `=10*2` → 20
2. **แปลงเป็น inline LAMBDA**: `=LAMBDA(x, x*2)(10)` → 20 ทดสอบว่า LAMBDA ทำงานถูกต้อง
3. **เปิด Name Manager**: กด `Ctrl+F3` หรือไปที่ Formulas tab → Name Manager
4. **สร้าง New Name**: กด New → ใส่ชื่อ เช่น "Double"
5. **ใส่สูตร LAMBDA**: ใน Refers to ใส่ `=LAMBDA(x, x*2)` (ไม่มี `(10)` ต่อท้าย)
6. **เพิ่ม Comment (แนะนำ)**: ใส่คำอธิบาย parameter และวัตถุประสงค์ใน Comment field
7. **บันทึก**: กด OK
8. **เรียกใช้**: พิมพ์ `=Double(5)` ในเซลล์ใดก็ได้ → 10
.
ส่วนตัวผมแนะนำให้ใส่ Comment ทุกครั้งครับ เพราะถ้าผ่านไปสักพักจะลืมว่า parameters แต่ละตัวคืออะไร 😅

---

**Helper Functions ที่ใช้กับ LAMBDA:**

| Function | LAMBDA รับ Parameters | Return Type | ใช้เมื่อ |
|----------|----------------------|-------------|---------|
| **MAP** | 1 parameter (value) | Array ขนาดเท่าเดิม | Apply การคำนวณเดียวกันกับทุก element |
| **REDUCE** | 2 parameters (accumulator, value) | ค่าเดียว | บวกสะสม หรือประมวลผลข้อมูลทีละตัวเก็บผลลัพธ์สะสม |
| **SCAN** | 2 parameters (accumulator, value) | Array ขนาดเท่าเดิม | เหมือน REDUCE แต่ return ผลลัพธ์ทุกขั้น (running total) |
| **BYROW** | 1 parameter (row array) | Column array | ประมวลผลข้อมูลทีละแถว (เช่น SUM แต่ละแถว) |
| **BYCOL** | 1 parameter (column array) | Row array | ประมวลผลข้อมูลทีละคอลัมน์ (เช่น AVERAGE แต่ละคอลัมน์) |
| **MAKEARRAY** | 2 parameters (row_index, col_index) | Array ตาม rows×cols | สร้าง array ใหม่จาก pattern หรือการคำนวณ |

**ตัวอย่างการใช้:**
```
MAP: =MAP(A1:A5, LAMBDA(v, v*1.07))
REDUCE: =REDUCE(0, A1:A5, LAMBDA(a, v, a+v))
SCAN: =SCAN(0, A1:A5, LAMBDA(a, v, a+v))
BYROW: =BYROW(A1:C5, LAMBDA(r, AVERAGE(r)))
BYCOL: =BYCOL(A1:C5, LAMBDA(c, MAX(c)))
MAKEARRAY: =MAKEARRAY(3, 3, LAMBDA(r, c, r*c))
```

---

**ข้อจำกัดและข้อควรระวัง:**

1. **ชื่อ parameter ห้ามมีจุด**: ใช้ `price_per_unit` แทน `price.per.unit`
2. **ชื่อ parameter ห้ามขึ้นต้นด้วยตัวเลข**: ใช้ `value1` แทน `1value`
3. **ชื่อ parameter ห้ามใช้ cell reference**: ใช้ `num_1` แทน `num1` (เพราะ num1 อาจสับสนกับเซลล์)
4. **Recursive ต้องมีเงื่อนไขหยุด**: ถ้าไม่มี IF หยุด loop จะเกิด #NUM! error
5. **Maximum 253 parameters**: ถ้าต้องการมากกว่านี้ให้ใช้ array หรือ range แทน
6. **ไม่มี Intellisense tooltip**: ต้องจำ parameters เอง แนะนำให้เขียน comment ใน Name Manager
7. **Case-sensitive ใน Name Manager**: "MYFUNCTION" กับ "myfunction" ถือเป็นคนละตัว แต่การเรียกใช้ไม่ case-sensitive

---

**Best Practices สำหรับการสร้าง LAMBDA:**

✅ **ตั้งชื่อสื่อความหมาย**: ใช้ `CalculateTax` แทน `CalcT` หรือ `Func1`
✅ **เพิ่ม Comment ใน Name Manager**: อธิบาย parameters และวัตถุประสงค์เพื่อให้ทีมเข้าใจ
✅ **ทดสอบก่อนบันทึก**: ใช้ inline LAMBDA ทดสอบด้วยข้อมูลจริงก่อนบันทึกลง Name Manager
✅ **ใช้ LET ลดการคำนวณซ้ำ**: ถ้ามีค่าที่คำนวณซ้ำหลายครั้ง ใช้ LET เก็บเป็นตัวแปรชั่วคราว
✅ **แยกฟังก์ชันใหญ่ออกเป็นฟังก์ชันเล็ก**: สร้าง LAMBDA หลายตัวที่ทำงานชัดเจนแต่ละตัว แล้วเรียกใช้ร่วมกัน
✅ **Document ใน workbook**: สร้างแผ่น sheet ชื่อ "Custom Functions" เขียนคำอธิบาย parameters และตัวอย่างการใช้งาน
✅ **Validate Input**: ใช้ IF, ISNUMBER, ISTEXT ตรวจสอบ input ก่อนประมวลผล เพื่อป้องกัน error
✅ **Handle Errors**: ใช้ IFERROR หรือ IFNA ครอบไว้เพื่อ return ค่า default เมื่อเกิด error

❌ **หลีกเลี่ยง**:
- ตั้งชื่อซ้ำกับฟังก์ชันมาตรฐาน
- สร้าง LAMBDA ที่ยาวเกินไปจนอ่านยาก (แยกเป็นหลายตัว)
- ใช้ชื่อ parameter สั้นเกินไป (เช่น a, b, c) ควรใช้ชื่อสื่อความหมาย
- ลืม comment ทำให้ทีมไม่เข้าใจว่า parameters คืออะไร

---

**ตัวอย่าง LAMBDA สำหรับทีม/องค์กร:**

```
ฟังก์ชันคำนวณภาษี VAT:
Name: AddVAT
Refers to: =LAMBDA(amount, amount*1.07)
Comment: รับจำนวนเงินก่อนภาษี return จำนวนเงินรวม VAT 7%
Use: =AddVAT(1000) → 1070

ฟังก์ชันลบ VAT:
Name: RemoveVAT
Refers to: =LAMBDA(amount, amount/1.07)
Comment: รับจำนวนเงินรวม VAT return จำนวนเงินก่อนภาษี
Use: =RemoveVAT(1070) → 1000

ฟังก์ชันคำนวณ Discount:
Name: Discount
Refers to: =LAMBDA(price, percent, price*(1-percent))
Comment: รับราคาและเปอร์เซ็นต์ส่วนลด return ราคาหลังลด
Use: =Discount(1000, 0.15) → 850

ฟังก์ชันคำนวณ Profit Margin:
Name: ProfitMargin
Refers to: =LAMBDA(revenue, cost, (revenue-cost)/revenue)
Comment: รับรายได้และต้นทุน return profit margin เป็นทศนิยม
Use: =ProfitMargin(1000, 700) → 0.3 (30%)
```

---

**Version Compatibility:**

- ✅ Excel 365 (all platforms: Windows, Mac, Web)
- ✅ Excel 2024 (Windows and Mac)
- ❌ Excel 2021 ไม่รองรับ
- ❌ Excel 2019 และเก่ากว่าไม่รองรับ

## คำถามที่พบบ่อย

**Q: LAMBDA ต่างจาก VBA อย่างไร?**

LAMBDA เป็นสูตร Excel ปกติที่ทำงานบน Formula Bar ได้ทันทีโดยไม่ต้องเปิด VBA Editor ไฟล์ไม่ต้องบันทึกเป็น .xlsm ไม่มีปัญหา macro security และไม่ต้องเรียนรู้ภาษา VBA ผู้ใช้ Excel ทั่วไปสร้างได้โดยไม่ต้องเป็น programmer แต่มีข้อจำกัดคือทำได้แค่สูตรคำนวณ ไม่สามารถควบคุม UI, event handling หรือเชื่อมต่อ external API เหมือน VBA

**Q: ส่งไฟล์ที่มี LAMBDA ให้คนอื่นใช้ได้ไหม?**

ได้ครับ ถ้าผู้รับใช้ Excel 365 หรือ Excel 2024 Named LAMBDA ที่สร้างผ่าน Name Manager จะติดไปกับไฟล์อัตโนมัติ ผู้รับเปิดไฟล์แล้วเรียกใช้ custom function ได้เลย
.
แต่ถ้าผู้รับใช้ Excel 2021, 2019 หรือเก่ากว่า จะขึ้น #NAME? error เพราะเวอร์ชันเหล่านั้นไม่รองรับ LAMBDA 😅 แนะนำให้แจ้งผู้รับว่าต้องใช้ Excel 365 หรือ 2024

**Q: วิธีสร้าง Named LAMBDA อย่างไร?**

ทดสอบสูตรก่อนด้วย 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) ข้อควรระวัง: ชื่อต้องขึ้นต้นด้วยตัวอักษร ไม่มีช่องว่าง ไม่ซ้ำกับฟังก์ชันมาตรฐาน

**Q: Recursive LAMBDA คืออะไร และใช้เมื่อไร?**

Recursive LAMBDA คือ LAMBDA ที่เรียกตัวเองซ้ำๆ จนกว่าจะถึงเงื่อนไขหยุด ใช้สำหรับ pattern ที่ต้องทำซ้ำจนได้ผลลัพธ์ เช่น ลบตัวอักษรที่ไม่ต้องการออกทีละตัว คำนวณ factorial (5! = 5×4×3×2×1) หรือลบช่องว่างซ้ำซ้อนออกทั้งหมด
.
ต้องมีเงื่อนไข IF ที่หยุด recursion เสมอ มิฉะนั้นจะเกิด infinite loop และ Excel จะ error #NUM! (เกิน limit การเรียกซ้ำ) 😅 ใช้เมื่อ loop ปกติทำไม่ได้หรือยากต่อการเขียน

**Q: LAMBDA กับ LET ใช้ร่วมกันอย่างไร?**

ใช้ LET ภายใน LAMBDA เพื่อประกาศตัวแปรชั่วคราว (temporary variables) ลดการคำนวณซ้ำ เช่น =LAMBDA(x, LET(sq, x^2, sq*PI())) คำนวณ x^2 ครั้งเดียวเก็บในตัวแปร sq แล้วนำไปใช้ต่อ
.
ถ้าใช้ x^2 หลายจุดในสูตรเดียวกัน LET จะคำนวณครั้งเดียวแล้ว reuse ผลลัพธ์ ทำให้เร็วขึ้นและอ่านง่ายขึ้น โดยเฉพาะ LAMBDA ที่มี calculation ซับซ้อนหรือมีการคำนวณซ้ำ LET ช่วยจัดระเบียบโค้ดและเพิ่มประสิทธิภาพ 😎

**Q: ตั้งชื่อ LAMBDA ซ้ำกับฟังก์ชันมาตรฐานได้ไหม?**

ตั้งได้ แต่ไม่แนะนำครับ เพราะ Excel จะให้ความสำคัญกับฟังก์ชันมาตรฐานก่อน custom function ของคุณจะไม่ถูกเรียกใช้ เช่น ถ้าตั้งชื่อว่า SUM แล้วเรียก =SUM(A1:A10) Excel จะใช้ฟังก์ชัน SUM มาตรฐานแทนที่ LAMBDA ของคุณ
.
ควรตั้งชื่อที่ไม่ซ้ำกันและสื่อความหมายชัดเจน เช่น MySUM, SumWithTax, CustomSum เป็นต้น ชื่อที่ดีช่วยให้เข้าใจฟังก์ชันโดยไม่ต้องเปิด Name Manager ดู 😎

**Q: LAMBDA รองรับ Excel เวอร์ชันไหนบ้าง?**

รองรับเฉพาะ 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 เท่านั้น

**Q: ทำไมต้องใช้ LAMBDA แทนการ copy สูตรธรรมดา?**

LAMBDA แก้ปัญหา 3 ข้อครับ:
.
(1) สูตรซับซ้อนซ้ำกันหลายเซลล์ แก้ไขยากเพราะต้องแก้ทุกเซลล์ LAMBDA แก้ไขที่เดียวมีผลทุกที่
(2) สูตรยาว 10 บรรทัดอ่านยาก LAMBDA แทนด้วยชื่อสั้นๆ อ่านง่าย
(3) ทำงานร่วมกับคนอื่นยาก ต้องอธิบายสูตร LAMBDA ตั้งชื่อชัดเจนแล้วทีมเรียกใช้ได้เลย
.
โดยเฉพาะองค์กรใหญ่ที่ต้องการ function library สำหรับทั้งทีม LAMBDA ทำให้ทีมทำงานสม่ำเสมอและบำรุงรักษาง่าย 😎

**Q: LAMBDA ช้าไหมถ้าใช้บ่อยในไฟล์ใหญ่?**

LAMBDA ประมวลผลเท่ากับสูตร Excel ธรรมดา ไม่ช้ากว่า แต่ถ้า LAMBDA ซับซ้อนหรือเรียกใช้กับข้อมูลขนาดใหญ่ (เช่น MAP กับ array นับหมื่นเซลล์) อาจช้าได้
.
แนะนำให้ใช้ LET ภายใน LAMBDA เพื่อเก็บผลลัพธ์ชั่วคราวแทนการคำนวณซ้ำ และใช้ helper functions (MAP, REDUCE, SCAN) ที่เหมาะสมแทนการ nested IF หลายชั้น ถ้าต้องการประสิทธิภาพสูงสุดสำหรับข้อมูลขนาดใหญ่มาก ควรใช้ Power Query แทน

## ฟังก์ชันที่เกี่ยวข้อง

- [LET – กำหนดตัวแปรในสูตรเพื่อเพิ่มความเร็วและความชัดเจน](https://www.thepexcel.com/functions/excel/logical/let/)
- [MAP – ประมวลผลทุก Element ใน Array ด้วย LAMBDA](https://www.thepexcel.com/functions/excel/logical/map/)
- [REDUCE – รวมผลลัพธ์จาก Array เป็นค่าเดียว](https://www.thepexcel.com/functions/excel/logical/reduce/)
- [SCAN – คำนวณและแสดงผลลัพธ์สะสมทุกขั้นตอน](https://www.thepexcel.com/functions/excel/logical/scan/)
- [BYROW – ประมวลผลทีละแถวด้วย LAMBDA](https://www.thepexcel.com/functions/excel/logical/byrow/)
- [BYCOL – ประมวลผลทีละคอลัมน์ด้วย LAMBDA](https://www.thepexcel.com/functions/excel/logical/bycol/)
- [MAKEARRAY – สร้าง Array ด้วย LAMBDA แบบกำหนดเอง](https://www.thepexcel.com/functions/excel/logical/makearray/)
- [ISOMITTED – เช็คว่า Argument หายไป (LAMBDA)](https://www.thepexcel.com/functions/excel/information/isomitted/)

## แหล่งข้อมูลเพิ่มเติม

- [Microsoft Support: LAMBDA function](https://support.microsoft.com/en-us/office/lambda-function-bd212d27-1cd1-4321-a34a-ccbf254b8b67) _(official)_
- [ExcelJet: Excel LAMBDA function](https://exceljet.net/functions/lambda-function) _(guide)_
- [Ablebits: Excel LAMBDA function - how to write, calculate and use](https://www.ablebits.com/office-addins-blog/excel-lambda-function-write-calculate-use/) _(tutorial)_

---

_Source: [https://www.thepexcel.com/functions/excel/logical/lambda/](https://www.thepexcel.com/functions/excel/logical/lambda/)_
