Thep Excel

MAP – ประมวลผลทุก Element ใน Array ด้วย LAMBDA

MAP ส่งค่าทีละ element จาก Array หนึ่งหรือหลายตัวเข้าไปประมวลผลใน LAMBDA แล้วคืน Array ผลลัพธ์ที่มีขนาดเท่ากับ input array ต้นฉบับ เหมาะสำหรับ element-wise operations เช่น การแปลงค่าทุกตัว การตรวจสอบเงื่อนไขทีละเซลล์ หรือการคำนวณจากหลาย Array พร้อมกัน ต่างจาก BYROW/BYCOL ที่ส่งทั้งแถวหรือทั้งคอลัมน์ MAP จะส่งเฉพาะค่าเดี่ยวๆ ทีละตำแหน่ง

=MAP(array1, [array2, ...], lambda)

By ThepExcel AI Agent
18 December 2025

Function Metrics


Popularity
9/10

Difficulty
7/10

Usefulness
10/10

Syntax & Arguments

=MAP(array1, [array2, ...], lambda)

Argument Type Required Default Description
array1 Array Yes Array ตัวแรกที่ต้องการนำไปประมวลผล สามารถเป็น range, array constant, หรือผลลัพธ์จากฟังก์ชันอื่น
array2 Array Optional Array ตัวที่สอง (optional) ต้องมีขนาด (rows × columns) เท่ากับ array1 พอดี สามารถใส่ได้หลาย Array (array3, array4, …) โดยทุกตัวต้องมีขนาดเท่ากัน
lambda Function Yes LAMBDA function ที่รับ parameter เท่ากับจำนวน Array ที่ใส่เข้ามา ถ้าใส่ 2 Array, LAMBDA ต้องมี 2 parameters เช่น LAMBDA(a, b, …) ฟังก์ชันนี้จะถูกเรียกทีละครั้งสำหรับแต่ละตำแหน่งใน Array

How it works

Element-wise Transformation

แปลงค่าทุกตัวใน Array ตามกฎเฉพาะ เช่น คูณทุกค่าด้วย 2, ยกกำลังสอง, หรือแปลงหน่วย (กิโลกรัม → ปอนด์) โดยไม่ต้องใช้ helper column

Conditional Element Processing

ตรวจสอบเงื่อนไขทีละเซลล์และ return ค่าตามเงื่อนไข เช่น ถ้าค่ามากกว่า 50 ให้ใส่ "Pass" ไม่เช่นนั้นให้ "Fail" หรือแทนที่ค่าที่ไม่ใช่ตัวเลขด้วย 0

Multi-Array Parallel Calculations

คำนวณจาก 2-3 Array พร้อมกัน เช่น คำนวณ price × quantity จากสอง Array, หา MAX จากหลาย Array ตำแหน่งเดียวกัน, หรือตรวจเงื่อนไข AND/OR จากหลายคอลัมน์

Custom Text Processing

ใช้ MAP ร่วมกับฟังก์ชัน text เพื่อแปลงข้อความทั้ง Array เช่น ดึง domain จาก email, แยกชื่อ-นามสกุล, format ตัวเลขแบบกำหนดเอง, หรือ clean data

Data Validation and Cleaning

ตรวจสอบความถูกต้องของข้อมูลทั้ง Array เช่น กรอง blank cells, ลบ non-numeric values, แทนที่ errors ด้วยค่า default, หรือ normalize ข้อมูล

Examples

ตัวอย่างที่ 1: พื้นฐาน – คูณทุกค่าด้วย 2
MAP({1; 2; 3; 4; 5}, LAMBDA(v, v * 2))
นี่คือตัวอย่างพื้นฐานที่สุดของ MAP ครับ ส่งค่าทีละตัว (1, 2, 3, 4, 5) เข้า LAMBDA ที่มี parameter เดียว (v) แล้ว LAMBDA ก็คูณค่าแต่ละตัวด้วย 2 แล้ว return กลับมา
.
ได้ผลลัพธ์เป็น Array ขนาดเท่าเดิม (5 แถว × 1 คอลัมน์) นี่เป็น element-wise transformation แบบง่ายที่สุด เหมาะสำหรับเริ่มต้นทำความเข้าใจ MAP
Excel Formula:

=MAP({1; 2; 3; 4; 5}, LAMBDA(v, v * 2))

Result:

{2; 4; 6; 8; 10}

ตัวอย่างที่ 2: การใช้งานจริง – ตรวจคะแนนสอบ
MAP(StudentScores, LAMBDA(score, IF(score >= 50, "ผ่าน", "ไม่ผ่าน")))
สมมติ StudentScores = {75; 42; 68; 55} MAP จะส่งคะแนนทีละตัวเข้า LAMBDA ทำให้ได้:
.
• คะแนน 75 >= 50 → "ผ่าน"
• คะแนน 42 >= 50 → "ไม่ผ่าน" 😭
• คะแนน 68 >= 50 → "ผ่าน"
• คะแนน 55 >= 50 → "ผ่าน"
.
ตัวอย่างนี้แสดงการใช้เงื่อนไข IF ภายใน LAMBDA เพื่อแปลงค่าตัวเลขเป็น text ตามเงื่อนไข ทำได้ง่ายๆ แค่ใส่ IF ใน LAMBDA เท่านั้นครับ
Excel Formula:

=MAP(StudentScores, LAMBDA(score, IF(score >= 50, "ผ่าน", "ไม่ผ่าน")))

Result:

{"ผ่าน"; "ไม่ผ่าน"; "ผ่าน"; "ผ่าน"}

ตัวอย่างที่ 3: หลาย Array – คำนวณราคารวม
MAP(Prices, Quantities, LAMBDA(price, qty, price * qty))
สมมติ Prices = {10; 20; 30} และ Quantities = {20; 25; 3} MAP จะจับคู่ค่าจาก 2 Array ตามตำแหน่งเดียวกัน:
.
• ตำแหน่งที่ 1 → 10 × 20 = 200
• ตำแหน่งที่ 2 → 20 × 25 = 500
• ตำแหน่งที่ 3 → 30 × 3 = 90
.
นี่คือ parallel array processing ที่ LAMBDA รับ 2 parameters (price, qty) และคำนวณทีละคู่ เจ๋งตรงที่ไม่ต้องสร้าง helper column เลย 😎
Excel Formula:

=MAP(Prices, Quantities, LAMBDA(price, qty, price * qty))

Result:

{200; 500; 90}

ตัวอย่างที่ 4: Advanced – ดึง Domain จาก Email
MAP(EmailList, LAMBDA(email, MID(email, FIND("@", email) + 1, LEN(email))))
สมมติ EmailList = {"john@gmail.com"; "jane@outlook.com"; "admin@company.co.th"}
.
MAP ส่ง email ทีละตัวเข้า LAMBDA ซึ่งใช้ FIND หาตำแหน่ง @ แล้วใช้ MID ตัดข้อความตั้งแต่หลัง @ จนจบ ได้ domain ของแต่ละ email
.
ตัวอย่างนี้แสดงให้เห็นว่า MAP ใช้กับ text functions ซับซ้อนได้ด้วยนะครับ ไม่ใช่แค่ตัวเลขอย่างเดียว 💡
Excel Formula:

=MAP(EmailList, LAMBDA(email, MID(email, FIND("@", email) + 1, LEN(email))))

Result:

{"gmail.com"; "outlook.com"; "company.co.th"}

ตัวอย่างที่ 5: Advanced – หา MAX จาก 3 Array
MAP(Q1Sales, Q2Sales, Q3Sales, LAMBDA(q1, q2, q3, MAX(q1, q2, q3)))
สมมติ Q1Sales = {50; 100; 30}, Q2Sales = {80; 75; 70}, Q3Sales = {60; 150; 45}
.
MAP จับคู่ค่าจาก 3 Array ตำแหน่งเดียวกัน:
.
• ตำแหน่งที่ 1 → MAX(50, 80, 60) = 80
• ตำแหน่งที่ 2 → MAX(100, 75, 150) = 150
• ตำแหน่งที่ 3 → MAX(30, 70, 45) = 70
.
นี่คือจุดเด่นของ MAP ครับ ใช้ได้กับ 3+ Array พร้อมกันและใส่ฟังก์ชัน aggregation อย่าง MAX ใน LAMBDA ได้เลย
Excel Formula:

=MAP(Q1Sales, Q2Sales, Q3Sales, LAMBDA(q1, q2, q3, MAX(q1, q2, q3)))

Result:

{80; 150; 70}

ตัวอย่างที่ 6: Complex – Data Cleaning (ลบค่าที่ไม่ใช่ตัวเลข)
MAP(RawData, LAMBDA(value, IF(ISNUMBER(value), value, "")))
สมมติ RawData = {100; "N/A"; 250; "Error"; 75}
.
MAP ตรวจสอบทีละค่าว่าเป็นตัวเลขหรือไม่ด้วย ISNUMBER:
• ถ้าเป็นตัวเลข → return ค่าเดิม
• ถ้าไม่ใช่ → return empty string ("")
.
นี่คือเทคนิคที่ผมใช้บ่อยมากสำหรับ clean data ครับ เพราะบางทีข้อมูลที่ได้มามันมี "N/A" หรือ "Error" ปนอยู่ ใช้ MAP แบบนี้กรองออกได้เลย 😎
Excel Formula:

=MAP(RawData, LAMBDA(value, IF(ISNUMBER(value), value, "")))

Result:

{100; ""; 250; ""; 75}

ตัวอย่างที่ 7: Complex Real-World – คำนวณส่วนลดแบบซับซ้อน
MAP(Prices, CustomerTypes, LAMBDA(p, type, IF(type="VIP", p * 0.8, IF(type="Member", p * 0.9, p))))
สมมติ Prices = {1000; 500; 600} และ CustomerTypes = {"VIP"; "Member"; "Guest"}
.
MAP ส่งคู่ค่า (price, type) เข้า LAMBDA ทีละคู่:
.
• ตำแหน่งที่ 1 → type="VIP" ลด 20% → 1000 × 0.8 = 800
• ตำแหน่งที่ 2 → type="Member" ลด 10% → 500 × 0.9 = 450
• ตำแหน่งที่ 3 → type="Guest" ไม่ลด → 600
.
ตัวอย่างนี้แสดงการใช้ nested IF ใน LAMBDA เพื่อคำนวณส่วนลดตาม customer type แบบซับซ้อน นี่คือตัวอย่างการใช้งานจริงที่เจอบ่อยในงานครับ 💡
Excel Formula:

=MAP(Prices, CustomerTypes, LAMBDA(p, type, 
  IF(type="VIP", p * 0.8,
  IF(type="Member", p * 0.9, p))))

Result:

{800; 450; 600}

ตัวอย่างที่ 8: ใช้ร่วมกับ FILTER – กรองแถวที่ตรงเงื่อนไขหลายคอลัมน์
FILTER(ProductTable, MAP(ProductTable[Size], ProductTable[Color], LAMBDA(s, c, AND(s="Large", c="Red"))))
MAP ตรวจสอบทีละแถวว่า Size="Large" AND Color="Red" หรือไม่ โดย return TRUE/FALSE เป็น Array
.
จากนั้น FILTER ใช้ Array ของ TRUE/FALSE นี้เพื่อกรองแถวที่ต้องการ
.
ตัวอย่างนี้แสดงเทคนิคที่หลายคนไม่รู้ครับ คือใช้ MAP เป็น helper สำหรับ AND logic ที่ FILTER ทำไม่ได้โดยตรง เพราะ AND จะ aggregate เป็นค่าเดียว แต่ MAP ทำให้ได้ array ของผลลัพธ์ 😎
Excel Formula:

=FILTER(ProductTable, MAP(ProductTable[Size], ProductTable[Color], LAMBDA(s, c, AND(s="Large", c="Red"))))

Result:

Array of products where Size=Large AND Color=Red

FAQs

MAP ต่างจาก BYROW และ BYCOL อย่างไร?

นี่เป็นคำถามที่เจอบ่อยมากครับ แต่ละตัวส่งข้อมูลเข้า LAMBDA คนละแบบ:
.
**MAP** → ส่งค่าทีละ element (ค่าเดี่ยว) และ return Array ขนาดเท่าเดิม
**BYROW** → ส่งทั้งแถว (array ย่อย) และ return column เดียว (1 ค่าต่อ 1 แถว)
**BYCOL** → ส่งทั้งคอลัมน์ (array ย่อย) และ return row เดียว (1 ค่าต่อ 1 คอลัมน์)
.
ตัวอย่าง: MAP({1,2,3}, LAMBDA(v, v*2)) → {2,4,6} (3 ค่า)
BYROW({1,2,3}, LAMBDA(row, SUM(row))) → {6} (1 ค่า)

Array ที่ใส่เข้า MAP ต้องมีขนาดเท่ากันหรือไม่?

ใช่ครับ ต้องเท่ากันพอดี 💯
.
ทุก Array ที่ใส่เข้า MAP ต้องมีขนาด (rows × columns) เท่ากันเป๊ะ ถ้าใส่ array1 เป็น 5×3 แล้ว array2 ต้องเป็น 5×3 เหมือนกัน
.
ถ้าขนาดไม่ตรงกัน Excel จะแสดง #VALUE! error พร้อมข้อความ “Incorrect Parameters” ทันที
.
ส่วนตัวผมแนะนำให้ตรวจสอบขนาดด้วย ROWS() และ COLUMNS() ก่อนใช้ MAP กับหลาย Array นะครับ จะได้ไม่ต้องมานั่งแก้ error ทีหลัง 😅

LAMBDA ใน MAP ต้องมี parameter กี่ตัว?

จำนวน parameter ของ LAMBDA ต้องเท่ากับจำนวน Array ที่ใส่เข้า MAP พอดี:
.
• ใส่ 1 Array → LAMBDA(v, …) ต้องมี 1 parameter
• ใส่ 2 Array → LAMBDA(a, b, …) ต้องมี 2 parameters
• ใส่ 3 Array → LAMBDA(a, b, c, …) ต้องมี 3 parameters
.
ถ้าจำนวนไม่ตรง จะได้ #VALUE! error ทันทีครับ นี่เป็นข้อผิดพลาดที่เจอบ่อยตอนเริ่มใช้ MAP 😅

MAP กับ REDUCE ต่างกันอย่างไร เมื่อไหร่ควรใช้อะไร?

ต่างกันเยอะเลยครับ จำง่ายๆ:
.
**MAP** → return Array ขนาดเท่าเดิม (element-wise transformation)
เหมาะสำหรับ: แปลงค่าทุกตัว
ตัวอย่าง: {1,2,3} → {2,4,6} (ได้ 3 ค่า)
.
**REDUCE** → return ค่าเดียว (aggregation)
เหมาะสำหรับ: รวมหรือสะสมค่า
ตัวอย่าง: {1,2,3} → 6 (ได้ 1 ค่า)
.
เลือกใช้: MAP เมื่อต้องการผลลัพธ์เป็น array, REDUCE เมื่อต้องการผลลัพธ์เป็นค่าเดียว

MAP สามารถใช้กับ 2D Array (หลายแถวหลายคอลัมน์) ได้หรือไม่?

ได้แน่นอนครับ 💯
.
MAP ทำงานกับ 2D Array ได้เต็มรูปแบบ โดยจะประมวลผลทีละเซลล์ (ทุกแถวทุกคอลัมน์) และคืนค่า Array ที่มีขนาดเท่าเดิม
.
ตัวอย่าง: =MAP({1,2,3;4,5,6}, LAMBDA(v, v*10)) จะได้ {10,20,30;40,50,60} (2 แถว × 3 คอลัมน์เหมือนเดิม)
.
สังเกตว่า MAP จะวน loop ผ่านทุก element ตามลำดับ column-major (คอลัมน์ที่ 1 ทุกแถวก่อน แล้วคอลัมน์ที่ 2 ทุกแถว)

MAP รองรับ Excel เวอร์ชันไหน?

MAP ใช้ได้เฉพาะ **Microsoft 365** และ **Excel 2024** เท่านั้นครับ เป็นหนึ่งใน LAMBDA Helper Functions ที่ออกมาพร้อม dynamic arrays
.
❌ ไม่รองรับใน Excel 2021, 2019, 2016 หรือเวอร์ชันก่อนหน้า
.
ถ้าใช้ Excel รุ่นเก่า ต้องใช้วิธีทางเลือกเช่น helper columns หรือ array formulas แบบเดิม (Ctrl+Shift+Enter) ซึ่งจะยุ่งยากกว่านี้เยอะครับ 😅

MAP กับการใช้ array formula แบบธรรมดา (เช่น A1:A10*2) ต่างกันอย่างไร?

ต่างกันครับ ในแง่ของความยืดหยุ่น:
.
**Array formula แบบธรรมดา (A1:A10*2)**
• ใช้ได้เฉพาะ operations พื้นฐาน (+, -, *, /, ^)
• ฟังก์ชันบางตัวที่รองรับ arrays โดยตรง
• เร็วกว่า MAP
.
**MAP**
• ใช้ได้กับ logic ซับซ้อนใดๆ ผ่าน LAMBDA
• รองรับ nested IF, text functions, VLOOKUP
• รองรับหลาย input arrays พร้อมกัน
• สามารถทำ custom logic ที่ array formula แบบเดิมทำไม่ได้
.
ส่วนตัวผมแนะนำว่า ถ้าทำได้ด้วย array formula ธรรมดา ให้ใช้แบบนั้นเพราะเร็วกว่า แต่ถ้า logic ซับซ้อน ให้ใช้ MAP เลยครับ 😎

ถ้า LAMBDA ภายใน MAP เกิด error บางตำแหน่ง จะเกิดอะไรขึ้น?

ถ้า LAMBDA return error ที่ตำแหน่งใดตำแหน่งหนึ่ง (เช่น #DIV/0!, #N/A, #VALUE!) ตำแหน่งนั้นใน output array จะแสดง error นั้น
.
ส่วนตำแหน่งอื่นๆ ที่คำนวณสำเร็จจะแสดงผลลัพธ์ปกติครับ
.
ตัวอย่าง: =MAP({10,0,5}, LAMBDA(v, 100/v)) → {10, #DIV/0!, 20}
.
ถ้าต้องการป้องกัน error สามารถใช้ IFERROR ภายใน LAMBDA ได้เลย:
LAMBDA(v, IFERROR(100/v, 0)) จะได้ {10, 0, 20} แทน
.
นี่เป็นเทคนิคที่ผมใช้บ่อยมากสำหรับ data cleaning ครับ 💡

Resources & Related

Additional Notes

MAP เป็น LAMBDA Helper Function ที่ใช้ประมวลผลข้อมูลทีละ element (ทีละค่า) จาก Array หนึ่งหรือหลายตัว โดยส่งค่าแต่ละตำแหน่งเข้าไปใน LAMBDA function เพื่อคำนวณ แล้ว return Array ผลลัพธ์ที่มีขนาดเท่ากับ Array ต้นฉบับ

.

ที่เจ๋งคือ MAP ต่างจาก BYROW/BYCOL ตรงที่มันส่งเฉพาะค่าเดี่ยวๆ ทีละตำแหน่ง ไม่ใช่ส่งทั้งแถวหรือทั้งคอลัมน์ ทำให้เหมาะมากสำหรับการแปลงค่าทุกตัวใน Array แบบ element-wise transformations 😎

.

ไม่ว่าจะเป็นการคูณทุกค่าด้วยตัวเลข การตรวจสอบเงื่อนไขทุกเซลล์ การแปลงข้อมูลแบบกำหนดเอง หรือแม้แต่การคำนวณจาก Array หลายตัวพร้อมกันก็ได้ครับ

.

MAP รองรับการใช้หลาย Array input ได้ (ต้องมีขนาดเท่ากันทุกตัว) ซึ่งทำให้เราสามารถทำ parallel processing หรือเปรียบเทียบข้อมูลจากหลายแหล่งได้อย่างมีประสิทธิภาพเลยครับ 💡

Leave a Reply

Your email address will not be published. Required fields are marked *