MAP ส่งค่าทีละ element จาก Array หนึ่งหรือหลายตัวเข้าไปประมวลผลใน LAMBDA แล้วคืน Array ผลลัพธ์ที่มีขนาดเท่ากับ input array ต้นฉบับ เหมาะสำหรับ element-wise operations เช่น การแปลงค่าทุกตัว การตรวจสอบเงื่อนไขทีละเซลล์ หรือการคำนวณจากหลาย Array พร้อมกัน ต่างจาก BYROW/BYCOL ที่ส่งทั้งแถวหรือทั้งคอลัมน์ MAP จะส่งเฉพาะค่าเดี่ยวๆ ทีละตำแหน่ง
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| array1 | Array | Array ตัวแรกที่ต้องการนำไปประมวลผล สามารถเป็น range, array constant, หรือผลลัพธ์จากฟังก์ชันอื่น |
| [array2]ไม่บังคับ | Array | Array ตัวที่สอง (optional) ต้องมีขนาด (rows × columns) เท่ากับ array1 พอดี สามารถใส่ได้หลาย Array (array3, array4, …) โดยทุกตัวต้องมีขนาดเท่ากัน |
| lambda | Function | LAMBDA function ที่รับ parameter เท่ากับจำนวน Array ที่ใส่เข้ามา ถ้าใส่ 2 Array, LAMBDA ต้องมี 2 parameters เช่น LAMBDA(a, b, …) ฟังก์ชันนี้จะถูกเรียกทีละครั้งสำหรับแต่ละตำแหน่งใน Array |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
MAP เป็น LAMBDA Helper Function ที่ใช้ประมวลผลข้อมูลทีละ element (ทีละค่า) จาก Array หนึ่งหรือหลายตัว โดยส่งค่าแต่ละตำแหน่งเข้าไปใน LAMBDA function เพื่อคำนวณ แล้ว return Array ผลลัพธ์ที่มีขนาดเท่ากับ Array ต้นฉบับ
.
ที่เจ๋งคือ MAP ต่างจาก BYROW/BYCOL ตรงที่มันส่งเฉพาะค่าเดี่ยวๆ ทีละตำแหน่ง ไม่ใช่ส่งทั้งแถวหรือทั้งคอลัมน์ ทำให้เหมาะมากสำหรับการแปลงค่าทุกตัวใน Array แบบ element-wise transformations 😎
.
ไม่ว่าจะเป็นการคูณทุกค่าด้วยตัวเลข การตรวจสอบเงื่อนไขทุกเซลล์ การแปลงข้อมูลแบบกำหนดเอง หรือแม้แต่การคำนวณจาก Array หลายตัวพร้อมกันก็ได้ครับ
.
MAP รองรับการใช้หลาย Array input ได้ (ต้องมีขนาดเท่ากันทุกตัว) ซึ่งทำให้เราสามารถทำ parallel processing หรือเปรียบเทียบข้อมูลจากหลายแหล่งได้อย่างมีประสิทธิภาพเลยครับ 💡
แปลงค่าทุกตัวใน Array ตามกฎเฉพาะ เช่น คูณทุกค่าด้วย 2, ยกกำลังสอง, หรือแปลงหน่วย (กิโลกรัม → ปอนด์) โดยไม่ต้องใช้ helper column
ตรวจสอบเงื่อนไขทีละเซลล์และ return ค่าตามเงื่อนไข เช่น ถ้าค่ามากกว่า 50 ให้ใส่ "Pass" ไม่เช่นนั้นให้ "Fail" หรือแทนที่ค่าที่ไม่ใช่ตัวเลขด้วย 0
คำนวณจาก 2-3 Array พร้อมกัน เช่น คำนวณ price × quantity จากสอง Array, หา MAX จากหลาย Array ตำแหน่งเดียวกัน, หรือตรวจเงื่อนไข AND/OR จากหลายคอลัมน์
ใช้ MAP ร่วมกับฟังก์ชัน text เพื่อแปลงข้อความทั้ง Array เช่น ดึง domain จาก email, แยกชื่อ-นามสกุล, format ตัวเลขแบบกำหนดเอง, หรือ clean data
ตรวจสอบความถูกต้องของข้อมูลทั้ง Array เช่น กรอง blank cells, ลบ non-numeric values, แทนที่ errors ด้วยค่า default, หรือ normalize ข้อมูล
นี่คือตัวอย่างพื้นฐานที่สุดของ MAP ครับ ส่งค่าทีละตัว (1, 2, 3, 4, 5) เข้า LAMBDA ที่มี parameter เดียว (v) แล้ว LAMBDA ก็คูณค่าแต่ละตัวด้วย 2 แล้ว return กลับมา
ได้ผลลัพธ์เป็น Array ขนาดเท่าเดิม (5 แถว × 1 คอลัมน์) นี่เป็น element-wise transformation แบบง่ายที่สุด เหมาะสำหรับเริ่มต้นทำความเข้าใจ MAP
สมมติ StudentScores = {75; 42; 68; 55} MAP จะส่งคะแนนทีละตัวเข้า LAMBDA ทำให้ได้:
• คะแนน 75 >= 50 → "ผ่าน"
• คะแนน 42 >= 50 → "ไม่ผ่าน" 😭
• คะแนน 68 >= 50 → "ผ่าน"
• คะแนน 55 >= 50 → "ผ่าน"
ตัวอย่างนี้แสดงการใช้เงื่อนไข IF ภายใน LAMBDA เพื่อแปลงค่าตัวเลขเป็น text ตามเงื่อนไข ทำได้ง่ายๆ แค่ใส่ IF ใน LAMBDA เท่านั้นครับ
สมมติ 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 เลย 😎
สมมติ EmailList = {"john@gmail.com"; "jane@outlook.com"; "admin@company.co.th"}
MAP ส่ง email ทีละตัวเข้า LAMBDA ซึ่งใช้ FIND หาตำแหน่ง @ แล้วใช้ MID ตัดข้อความตั้งแต่หลัง @ จนจบ ได้ domain ของแต่ละ email
ตัวอย่างนี้แสดงให้เห็นว่า MAP ใช้กับ text functions ซับซ้อนได้ด้วยนะครับ ไม่ใช่แค่ตัวเลขอย่างเดียว 💡
สมมติ 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 ได้เลย
สมมติ RawData = {100; "N/A"; 250; "Error"; 75}
MAP ตรวจสอบทีละค่าว่าเป็นตัวเลขหรือไม่ด้วย ISNUMBER:
• ถ้าเป็นตัวเลข → return ค่าเดิม
• ถ้าไม่ใช่ → return empty string ("")
นี่คือเทคนิคที่ผมใช้บ่อยมากสำหรับ clean data ครับ เพราะบางทีข้อมูลที่ได้มามันมี "N/A" หรือ "Error" ปนอยู่ ใช้ MAP แบบนี้กรองออกได้เลย 😎
สมมติ 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 แบบซับซ้อน นี่คือตัวอย่างการใช้งานจริงที่เจอบ่อยในงานครับ 💡
MAP ตรวจสอบทีละแถวว่า Size="Large" AND Color="Red" หรือไม่ โดย return TRUE/FALSE เป็น Array
จากนั้น FILTER ใช้ Array ของ TRUE/FALSE นี้เพื่อกรองแถวที่ต้องการ
ตัวอย่างนี้แสดงเทคนิคที่หลายคนไม่รู้ครับ คือใช้ MAP เป็น helper สำหรับ AND logic ที่ FILTER ทำไม่ได้โดยตรง เพราะ AND จะ aggregate เป็นค่าเดียว แต่ MAP ทำให้ได้ array ของผลลัพธ์ 😎
นี่เป็นคำถามที่เจอบ่อยมากครับ แต่ละตัวส่งข้อมูลเข้า 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 ต้องมีขนาด (rows × columns) เท่ากันเป๊ะ ถ้าใส่ array1 เป็น 5×3 แล้ว array2 ต้องเป็น 5×3 เหมือนกัน
ถ้าขนาดไม่ตรงกัน Excel จะแสดง #VALUE! error พร้อมข้อความ "Incorrect Parameters" ทันที
ส่วนตัวผมแนะนำให้ตรวจสอบขนาดด้วย ROWS() และ COLUMNS() ก่อนใช้ MAP กับหลาย Array นะครับ จะได้ไม่ต้องมานั่งแก้ error ทีหลัง 😅
จำนวน 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** → 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 ได้เต็มรูปแบบ โดยจะประมวลผลทีละเซลล์ (ทุกแถวทุกคอลัมน์) และคืนค่า 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 ใช้ได้เฉพาะ **Microsoft 365** และ **Excel 2024** เท่านั้นครับ เป็นหนึ่งใน LAMBDA Helper Functions ที่ออกมาพร้อม dynamic arrays
❌ ไม่รองรับใน Excel 2021, 2019, 2016 หรือเวอร์ชันก่อนหน้า
ถ้าใช้ Excel รุ่นเก่า ต้องใช้วิธีทางเลือกเช่น helper columns หรือ array formulas แบบเดิม (Ctrl+Shift+Enter) ซึ่งจะยุ่งยากกว่านี้เยอะครับ 😅
ต่างกันครับ ในแง่ของความยืดหยุ่น:
**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 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 ครับ 💡
ฟังก์ชันที่ผู้เขียนโยงไว้กับ MAP จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
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 ครั้งเดียว แล้วประมวลผลทุกแถวพร้อมกันทันที
IF เป็นฟังก์ชันตรรกะพื้นฐานที่ใช้ตัดสินใจสองทางตามเงื่อนไข ตรวจสอบว่าเงื่อนไขเป็น TRUE หรือ FALSE แล้วคืนค่าที่แตกต่างกันไปตามผลลัพธ์ สามารถใช้ได้กับการเปรียบเทียบตัวเลข ข้อความ หรือวันที่ และเป็นพื้นฐานสำคัญของการสร้างสูตรแบบมีเงื่อนไข
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 ที่อ่านง่าย
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 ผลลัพธ์ ทำให้สร้างข้อมูลจำนวนมากได้อย่างรวดเร็วด้วยสูตรเดียว
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
COPILOT เป็นฟังก์ชันแรกใน Excel ที่ใช้ AI (GPT-4.1-mini) ประมวลผลข้อมูลและสร้างข้อความตามคำสั่งที่กำหนด เหมาะสำหรับสรุปข้อมูล จัดหมวดหมู่ และสร้าง content อัตโนมัติ
ฟังก์ชันที่สร้างเมทริกซ์เอกลักษณ์ (Identity Matrix) ขนาด n x n โดยมีเลข 1 ตามแนวเส้นทแยงมุมและเลข 0 ที่ตำแหน่งอื่น ใช้สำหรับการคำนวณพีชคณิตเชิงเส้นและการดำเนินการทางคณิตศาสตร์เมทริกซ์
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่