BYCOL ส่งแต่ละคอลัมน์ทั้งคอลัมน์เข้า LAMBDA แล้ว return ผลลัพธ์เป็น Array แถวเดียว ต่างจาก MAP ที่ส่งทีละเซลล์ และ BYROW ที่ส่งทีละแถว ทำให้สามารถคำนวณ SUM, MAX, AVERAGE ของทุกคอลัมน์พร้อมกันในสูตรเดียว แทนที่จะต้องเขียนสูตรซ้ำหลายครั้ง ซึ่งช่วยลดโอกาสเกิดข้อผิดพลาดและทำให้แก้ไข logic ได้ง่ายกว่ามาก เหมาะสำหรับงาน dashboard summary, quality checking และการวิเคราตลัพธ์ทีละคอลัมน์แบบเป็นระบบ
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| array | Array/Range | ช่วงข้อมูล (Range) หรือ Array ที่ต้องการประมวลผลทีละคอลัมน์ สามารถใช้ Table reference, Named Range หรือ cell reference ได้ |
| lambda | LAMBDA function | LAMBDA function ที่รับ 1 parameter (คอลัมน์นั้นทั้งคอลัมน์เป็น Array) แล้ว return ค่าเดียว (single value) ต่อคอลัมน์ เช่น SUM, MAX, หรือ custom calculation ถ้า return Array จะได้ #CALC! error |
BYCOL เป็น LAMBDA Helper Function ที่ทรงพลังสำหรับการประมวลผล Array แบบ column-wise (ทีละคอลัมน์) โดยส่งแต่ละคอลัมน์ทั้งคอลัมน์เข้าไปใน LAMBDA function แล้ว return ผลลัพธ์เป็น Array แถวเดียว (single row)
.
ที่เจ๋งคือ BYCOL ต่างจาก MAP ที่ส่งทีละเซลล์ และ BYROW ที่ส่งทีละแถว นะครับ ทำให้เราสามารถคำนวณ SUM, MAX, AVERAGE หรือสถิติอื่นๆ ของแต่ละคอลัมน์พร้อมกันในสูตรเดียว สร้าง summary row สำหรับตารางข้อมูลได้แบบมีประสิทธิภาพมาก 😎
.
เคยเจอมั้ยครับว่า… ต้องนั่งเขียนสูตร SUM ซ้ำๆ หลายตัวสำหรับแต่ละคอลัมน์ แล้วพอแก้ไข logic ต้องมาแก้ทุกสูตร เสียเวลามาก 😅
.
BYCOL มันแก้ปัญหานี้ได้เลยครับ แทนที่จะเขียนสูตรซ้ำหลายตัว เราก็เขียนสูตรเดียวที่ elegant และ maintainable กว่ามาก โดยเฉพาะเมื่อต้องการคำนวณค่าสถิติหรือ metric ที่เหมือนกันกับทุกคอลัมน์ใน dataset
.
ส่วนตัวผมใช้ BYCOL บ่อยมากสำหรับงาน data analysis, dashboard summary, และ quality checking เพราะมันประมวลผลข้อมูลทั้งหมดในคราวเดียว ลดโอกาสเกิด error และแก้ไข logic ได้ง่ายกว่าเยอะ 💡
คำนวณ SUM, MAX, MIN, AVERAGE, COUNT ของแต่ละคอลัมน์พร้อมกันในสูตรเดียว สำหรับสร้าง summary row ใต้ตาราง dashboard
เช็คว่าแต่ละคอลัมน์มีข้อมูลว่างกี่เซลล์ มี error กี่รายการ หรือคำนวณ fill rate (% ข้อมูลที่ไม่ว่าง) เพื่อประเมินความสมบูรณ์ของ dataset
สร้าง summary metrics แบบ horizontal (แถวเดียว) จากหลายคอลัมน์ข้อมูล เช่น quarterly sales totals, monthly revenue comparison
หา Range (MAX-MIN), Standard Deviation, Coefficient of Variation หรือ statistical measures อื่นๆ ของแต่ละคอลัมน์
สมมติข้อมูล sales data อยู่ใน 4 คอลัมน์ (Q1-Q4) แต่ละคอลัมน์มี 10 แถว
BYCOL วนลูปส่งคอลัมน์ C5:C14 เข้า LAMBDA เป็นคอลัมน์แรก จากนั้น D5:D14, E5:E14, F5:F14 ตามลำดับ
LAMBDA รับแต่ละคอลัมน์ (parameter ชื่อ col) แล้วใช้ SUM(col) คำนวณยอดรวม
ผลลัพธ์ได้ Array แถวเดียว 4 ค่า แทนที่จะเขียน SUM ซ้ำ 4 ครั้ง ง่ายกว่าเยอะครับ 😎
รูปแบบสั้น (eta lambda) เขียนแค่ชื่อ function โดยไม่ต้องใช้ LAMBDA wrapper
ใช้ได้กับ function ที่รับ argument เดียวเท่านั้น เช่น SUM, MAX, MIN, AVERAGE, COUNT, COUNTA
ผลลัพธ์เหมือนกับรูปแบบเต็ม แต่สั้นกว่าและอ่านง่ายกว่ามาก ✨
เหมาะสำหรับ simple aggregation ที่ไม่ต้องการ logic เพิ่มเติม
สมมติ Named Range "Scores" มี 4 คอลัมน์ (คะแนนวิชา Math, Science, English, History)
ใช้ BYCOL กับ MAX หาคะแนนสูงสุดของแต่ละวิชา ได้ Array แถวเดียว
ใช้ BYCOL กับ MIN หาคะแนนต่ำสุดของแต่ละวิชา ได้อีก Array แถวเดียว
ใช้ VSTACK ซ้อน 2 Array เป็นตาราง 2 แถว 4 คอลัมน์
เทคนิคนี้ใช้คำนวณหลาย metric พร้อมกันใน formula เดียว ประหยัดเวลาเยอะครับ 💡
นับว่าแต่ละคอลัมน์มีค่ามากกว่า 900 กี่รายการ
สมมติข้อมูลเป็นยอดขายรายวันของแต่ละสาขา (4 สาขา)
(col>900) สร้าง Array ของ TRUE/FALSE
Double negative (–) แปลง TRUE→1, FALSE→0
SUM นับจำนวน 1 (คือจำนวนวันที่ขายเกิน 900)
ผลลัพธ์: สาขา Q1 มี 3 วัน, Q2 มี 5 วัน, Q3 มี 7 วัน, Q4 มี 8 วัน ที่ยอดขายเกิน 900
เทคนิค double negative นี้เจ๋งมากครับ ใช้บ่อยเลยในการนับแบบมีเงื่อนไข 🔥
สมมติ Named Range "Prices" เก็บราคาสินค้า 4 หมวดหมู่ (แต่ละคอลัมน์)
หา Range (ความแตกต่างระหว่างราคาสูงสุดและต่ำสุด) ของแต่ละหมวดหมู่
LAMBDA คำนวณ MAX(c) – MIN(c) สำหรับแต่ละคอลัมน์
ผลลัพธ์แสดงว่าหมวดที่ 1 มีช่วงราคา 500 บาท, หมวดที่ 4 มีช่วงราคากว้างที่สุด (1200 บาท)
ใช้ในการวิเคราะห์ price volatility หรือ product diversity
สมมติ Named Range "Data" มี 4 คอลัมน์ แต่ละคอลัมน์มี 50 แถว
หาสัดส่วนข้อมูลที่ไม่ว่าง (Fill Rate) ของแต่ละคอลัมน์
COUNTA(c) นับเซลล์ที่มีข้อมูล
ROWS(c) นับจำนวนแถวทั้งหมด (50)
หารกันได้ ratio: 1.0 = ไม่มีช่องว่างเลย, 0.96 = ว่าง 2 เซลล์จาก 50, 0.9 = ว่าง 5 เซลล์
ใช้ตรวจสอบคุณภาพข้อมูล (data quality check) ว่าคอลัมน์ไหนมีข้อมูลขาดหาย
สมมติ Excel Table ชื่อ "SalesTable" มีคอลัมน์ Q1, Q2, Q3, Q4
ใช้ structured reference SalesTable[Q1:Q4] เลือกช่วงคอลัมน์
BYCOL ส่งแต่ละคอลัมน์ (ทั้งคอลัมน์) เข้า LAMBDA
LAMBDA คำนวณ AVERAGE ของแต่ละไตรมาส
ข้อดี: ถ้าเพิ่มแถวใน Table formula จะ auto-expand ไม่ต้องแก้สูตร
เหมาะสำหรับ dashboard ที่ข้อมูลเปลี่ยนแปลงบ่อย
สมมติ Named Range "TestScores" เก็บคะแนนสอบของ 4 ห้องเรียน
หา Standard Deviation (ค่าเบี่ยงเบนมาตรฐาน) ของแต่ละห้อง
STDEV.P() คำนวณ population standard deviation
ผลลัพธ์แสดงความกระจายของคะแนน: ห้องที่ 3 มีค่า SD ต่ำสุด (10.8) = คะแนนกระจุกตัว, ห้องที่ 2 มีค่า SD สูงสุด (15.3) = คะแนนกระจาย
ใช้วิเคราะห์ consistency ของข้อมูล
BYCOL ส่งทีละคอลัมน์ (ทั้งคอลัมน์ทีละคอลัมน์) เข้า LAMBDA แล้ว return Array แนวนอน 1 แถว (1×n)
ส่วน BYROW ส่งทีละแถว (ทั้งแถวทีละแถว) แล้ว return Array แนวตั้ง 1 คอลัมน์ (n×1)
ตัวอย่างง่ายๆ ครับ: ถ้ามี Array 5 แถว 3 คอลัมน์
– BYCOL จะวนลูป 3 รอบ (3 คอลัมน์) return Array 1×3
– BYROW จะวนลูป 5 รอบ (5 แถว) return Array 5×1
ใช้ BYCOL เมื่อต้องการสรุปทีละคอลัมน์ (เช่น quarterly totals) และ BYROW เมื่อต้องการสรุปทีละแถว (เช่น row totals)
ส่วนตัวผมคิดว่า… จำง่ายๆ ว่า BYCOL = column-wise, BYROW = row-wise ครับ 😅
MAP ส่งทีละ element (1 เซลล์) เข้า LAMBDA และ return Array ขนาดเท่าเดิม
ส่วน BYCOL ส่งทั้งคอลัมน์ (หลายเซลล์เป็น Array) และ return Array แถวเดียว
ตัวอย่าง: Array 3×4 (3 แถว 4 คอลัมน์)
– MAP: วนลูป 12 รอบ (3×4 เซลล์) return Array 3×4
– BYCOL: วนลูป 4 รอบ (4 คอลัมน์) return Array 1×4
ใช้ MAP เมื่อต้องการ transform ทุก element (เช่น multiply by 2) และ BYCOL เมื่อต้องการ aggregate แต่ละคอลัมน์ (เช่น SUM)
ง่ายๆ คือ MAP = แปลงทุกเซลล์, BYCOL = สรุปทีละคอลัมน์ครับ 💡
ใช่ครับ BYCOL คาดหวังให้ LAMBDA return ค่าเดียว (single value) ต่อคอลัมน์ เช่น SUM, MAX, COUNT, AVERAGE
ถ้า LAMBDA return Array (หลายค่า) จะได้ #CALC! error ทันที 😭
ตัวอย่างที่ถูก: LAMBDA(c, SUM(c)) → return single value ✅
ตัวอย่างที่ผิด: LAMBDA(c, SORT(c)) → return Array → #CALC! ❌
ถ้าต้องการ return Array ใช้ MAP หรือ MAKEARRAY แทนนะครับ
ใช้ได้ครับ และแนะนำให้ใช้เลยเพราะทำให้สูตร dynamic มากๆ ✨
รูปแบบ: =BYCOL(TableName[Col1:Col4], LAMBDA(c, SUM(c)))
ข้อดีเยอะมากครับ:
– Auto-expand เมื่อเพิ่มแถวใน Table
– อ่านง่ายกว่า cell reference (A1:D10)
– รองรับ dynamic data
ส่วนตัวผมใช้ Table reference เกือบทุกครั้งเลย เพราะไม่ต้องมานั่งแก้สูตรตอนข้อมูลเพิ่ม 😎
ใช้ได้ทั้ง Table reference และ Named Range ตามความเหมาะสมครับ
Short-form =BYCOL(array, SUM) ใช้ได้กับ function ที่รับ argument เดียวเท่านั้นครับ
ใช้ได้: SUM, MAX, MIN, AVERAGE, COUNT, COUNTA, STDEV, VAR ✅
ใช้ไม่ได้: SUMIF (ต้องการ 2-3 arguments), VLOOKUP (ต้องการหลาย arguments) ❌
ถ้า function ต้องการหลาย arguments หรือมี logic ซับซ้อน ต้องใช้รูปแบบเต็ม =BYCOL(array, LAMBDA(c, …)) แทนนะครับ
ส่วนตัวผมชอบใช้ short-form มากเพราะเขียนเร็วกว่า แต่ถ้า logic ซับซ้อนก็ต้องกลับไปใช้ LAMBDA แบบเต็ม 😅
BYCOL รองรับเฉพาะ:
– Microsoft 365 (subscription) ✅
– Excel 2024 ✅
– Excel for the web ✅
ไม่รองรับ: Excel 2021, Excel 2019 หรือรุ่นเก่ากว่า ❌
เป็น LAMBDA Helper Function ที่เพิ่มเข้ามาใน Excel 365 พร้อมกับ BYROW, MAP, REDUCE, SCAN, MAKEARRAY
ถ้าไฟล์เปิดใน Excel รุ่นเก่า formula จะแสดง #NAME! error ทันที 😭
เลยต้องเช็คก่อนนะครับว่าคนที่จะเปิดไฟล์ใช้ Excel เวอร์ชันไหน ไม่งั้น formula จะพังหมด
ใช้ VSTACK หรือ HSTACK รวม BYCOL หลายตัวเข้าด้วยกันครับ 😎
ตัวอย่าง:
=VSTACK(
BYCOL(Data, SUM),
BYCOL(Data, MAX),
BYCOL(Data, MIN),
BYCOL(Data, AVERAGE)
)
ได้ Array 4 แถว (แต่ละแถวคือ metric หนึ่ง) × n คอลัมน์
หรือใช้ LET สร้าง variables จะอ่านง่ายกว่า:
=LET(
sums, BYCOL(Data, SUM),
maxs, BYCOL(Data, MAX),
VSTACK(sums, maxs)
)
เหมาะสำหรับสร้าง dashboard summary table มากครับ ผมใช้เทคนิคนี้บ่อยมาก 💡
BYCOL ส่งคอลัมน์ทั้งคอลัมน์ (รวม empty cells และ errors) เข้า LAMBDA ทั้งหมดเลยครับ
การจัดการขึ้นกับ function ที่ใช้:
– SUM, AVERAGE, MAX, MIN: ignore empty cells โดย default ✅
– COUNTA: นับเฉพาะ non-empty cells
– COUNTBLANK: นับเฉพาะ empty cells
– SUM ถ้าเจอ error (เช่น #VALUE!) จะ return error ทั้งคอลัมน์ 😭
ถ้าต้องการ filter errors ออก ใช้:
=BYCOL(Data, LAMBDA(c, SUM(FILTER(c, NOT(ISERROR(c))))))
หรือใช้ AGGREGATE function ที่ ignore errors อยู่แล้ว สะดวกกว่า 💡
ฟังก์ชันที่ผู้เขียนโยงไว้กับ BYCOL จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
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 ครั้งเดียว แล้วประมวลผลทุกแถวพร้อมกันทันที
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 ผลลัพธ์ ทำให้สร้างข้อมูลจำนวนมากได้อย่างรวดเร็วด้วยสูตรเดียว
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
HSTACK เป็นฟังก์ชัน Dynamic Array ที่ใช้รวมข้อมูลจากหลายช่วงเข้าด้วยกันโดยนำมาเรียงต่อกันในแนวนอน (ต่อท้ายไปทางขวา) หากช่วงข้อมูลที่นำมารวมมีจำนวนแถวไม่เท่ากัน HSTACK จะเติมค่า #N/A ในส่วนที่ขาดหายไปให้โดยอัตโนมัติ
VSTACK เป็นฟังก์ชัน Dynamic Array ที่ใช้รวมข้อมูลจากหลายช่วงเข้าด้วยกันโดยนำมาเรียงต่อกันในแนวตั้ง (ต่อท้ายลงไปด้านล่าง) หากช่วงข้อมูลที่นำมารวมมีจำนวนคอลัมน์ไม่เท่ากัน VSTACK จะเติมค่า #N/A ในส่วนที่ขาดหายไปให้โดยอัตโนมัติ
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่