Chia sẻ
"BYROW áp dụng LAMBDA cho từng hàng, BYCOL cho từng cột. Tính MAX, SUM, COUNT, TEXTJOIN mỗi hàng/cột chỉ với 1 công thức spill."
BYCOL và BYROW là LAMBDA helper functions — áp dụng một hàm LAMBDA cho từng cột hoặc từng hàng trong mảng. Tính MAX mỗi cột, SUM mỗi hàng, đếm unique mỗi cột — tất cả chỉ với 1 công thức, không cần copy xuống/sang.
BYROW — Áp Dụng Hàm Theo Từng Hàng
Cú pháp
=BYROW(array, lambda)
array — Mảng dữ liệu (nhiều hàng)
lambda — Hàm LAMBDA nhận 1 hàng, trả về 1 giá trị
LAMBDA(row, <tính toán trên row>)Cách hoạt động
// Bảng điểm B2:D5 (3 cột: Toán, Lý, Hóa):
// | 8 | 7 | 9 |
// | 6 | 8 | 7 |
// | 9 | 9 | 8 |
// | 7 | 6 | 9 |
// Tính trung bình mỗi hàng (mỗi học sinh):
=BYROW(B2:D5, LAMBDA(row, AVERAGE(row)))
// Kết quả (cột E):
// | 8.0 |
// | 7.0 |
// | 8.67|
// | 7.33|
// 1 công thức → 4 kết quả, spill tự động!Ví dụ: MAX, MIN, COUNT mỗi hàng
// Điểm cao nhất mỗi học sinh:
=BYROW(B2:D5, LAMBDA(r, MAX(r)))
// Đếm số điểm >= 8 mỗi học sinh:
=BYROW(B2:D5, LAMBDA(r, COUNTIF(r, ">=8")))
// Ghép tất cả điểm thành chuỗi:
=BYROW(B2:D5, LAMBDA(r, TEXTJOIN(", ", TRUE, r)))
// "8, 7, 9" | "6, 8, 7" | ...BYCOL — Áp Dụng Hàm Theo Từng Cột
Cú pháp
=BYCOL(array, lambda)
array — Mảng dữ liệu (nhiều cột)
lambda — Hàm LAMBDA nhận 1 cột, trả về 1 giá trị
LAMBDA(col, <tính toán trên col>)Cách hoạt động
// Cùng bảng điểm B2:D5:
// Tính trung bình mỗi MÔN (mỗi cột):
=BYCOL(B2:D5, LAMBDA(col, AVERAGE(col)))
// Kết quả (hàng 6):
// | 7.5 | 7.5 | 8.25 |
// Toán TB 7.5, Lý TB 7.5, Hóa TB 8.25Ví dụ: Thống kê nâng cao theo cột
// Điểm cao nhất mỗi môn:
=BYCOL(B2:D5, LAMBDA(c, MAX(c)))
// | 9 | 9 | 9 |
// Đếm unique mỗi cột:
=BYCOL(B2:D5, LAMBDA(c, SUM(1/COUNTIF(c, c))))
// Standard deviation mỗi môn:
=BYCOL(B2:D5, LAMBDA(c, ROUND(STDEV(c), 2)))BYROW vs BYCOL — So Sánh
Tiêu chí | BYROW | BYCOL |
|---|---|---|
Hướng xử lý | Từng HÀNG (→) | Từng CỘT (↓) |
LAMBDA nhận | 1 vector hàng | 1 vector cột |
Kết quả | Cột kết quả (n hàng × 1 cột) | Hàng kết quả (1 hàng × m cột) |
Ví dụ | TB mỗi học sinh | TB mỗi môn |
Excel thường | Phải copy công thức xuống | Phải copy công thức sang |
BYROW/BYCOL | 1 công thức, spill cả cột | 1 công thức, spill cả hàng |
Ứng Dụng Thực Tế
1. Tìm giá trị lớn nhất trong từng hàng và highlight
// Mảng dữ liệu B2:F10 (5 cột doanh số theo vùng):
// Tìm vùng có doanh số cao nhất mỗi tháng:
=BYROW(B2:F10, LAMBDA(r,
INDEX({"Bắc","Trung","Nam","ĐNÁ","Tây Nguyên"},
MATCH(MAX(r), r, 0))
))
// Kết quả: tên vùng có doanh số cao nhất từng tháng
// "Nam" | "Bắc" | "ĐNÁ" | ...2. Đếm ô trống mỗi cột (data quality check)
// Kiểm tra dữ liệu trống mỗi cột:
=BYCOL(A2:G100, LAMBDA(c, COUNTBLANK(c)))
// Kết quả: | 0 | 3 | 12 | 0 | 5 | 1 | 0 |
// Cột C có 12 ô trống → cần xem lại!
// Tính % hoàn thành mỗi cột:
=BYCOL(A2:G100, LAMBDA(c,
TEXT(1 - COUNTBLANK(c)/ROWS(c), "0%")
))3. Kết hợp BYROW + HSTACK (tạo summary table)
// Bảng B2:D5 (Toán, Lý, Hóa):
// Tạo bảng tóm tắt: Min, Max, Avg mỗi học sinh:
=BYROW(B2:D5, LAMBDA(r,
HSTACK(MIN(r), MAX(r), ROUND(AVERAGE(r), 1))
))
// Kết quả 4×3:
// Min | Max | Avg
// 7 | 9 | 8.0
// 6 | 8 | 7.0
// 8 | 9 | 8.7
// 6 | 9 | 7.34. Normalize dữ liệu (0-1 scaling mỗi cột)
// Min-Max Normalization theo từng cột:
=BYCOL(B2:D100, LAMBDA(c,
(c - MIN(c)) / (MAX(c) - MIN(c))
))
// LƯU Ý: LAMBDA trả về mảng → không dùng BYCOL!
// BYCOL yêu cầu LAMBDA trả về 1 SCALAR.
// Cách đúng — dùng MAP + BYCOL cho header:
// Header: Min mỗi cột
=BYCOL(B2:D100, LAMBDA(c, MIN(c)))
// Header: Max mỗi cột
=BYCOL(B2:D100, LAMBDA(c, MAX(c)))Quy Tắc Quan Trọng
LAMBDA phải trả về 1 giá trị scalar — không được trả về mảng. Nếu cần trả về mảng, dùng MAP hoặc MAKEARRAY thay thế.
Kết quả spill tự động — BYROW trả về cột, BYCOL trả về hàng. Đảm bảo vùng bên cạnh trống để tránh #SPILL!
Hiệu năng — BYROW/BYCOL chậm hơn built-in functions vì gọi LAMBDA nhiều lần. Với dữ liệu >10,000 hàng, ưu tiên SUMIFS thay vì BYROW(..., LAMBDA(r, SUM(r))).
Chỉ Excel 365 / 2024+ — không có trong Excel 2019/2021. Kiểm tra trước khi chia sẻ file.
Câu Hỏi Thường Gặp (FAQ)
BYROW khác gì so với copy SUM xuống?
Kết quả giống nhau, nhưng BYROW là 1 công thức duy nhất cho TẤT CẢ hàng, tự spill. Thêm/xóa hàng trong array → kết quả tự cập nhật. Không cần copy/paste hay kéo fill handle.
BYCOL có thể dùng IF lồng không?
Có! Ví dụ: =BYCOL(B2:D5, LAMBDA(c, IF(AVERAGE(c)>=8, "Giỏi", "TB"))). LAMBDA bên trong có thể chứa bất kỳ logic nào, miễn trả về scalar.
Nên dùng BYROW hay MMULT cho tổng hàng?
MMULT(array, SEQUENCE(COLUMNS(array),,1,0)) chạy nhanh hơn BYROW(array, LAMBDA(r, SUM(r))) cho dataset lớn. Nhưng BYROW dễ đọc, dễ maintain và linh hoạt hơn (hỗ trợ mọi phép tính, không chỉ SUM).
BYROW/BYCOL có thay thế helper column không?
Hoàn toàn! Thay vì tạo cột phụ rồi copy công thức xuống, BYROW tạo toàn bộ kết quả từ 1 ô. Giảm clutter, dễ audit, và không bao giờ quên copy khi thêm dữ liệu mới.
Tổng Kết
BYROW áp dụng LAMBDA cho từng hàng (→), BYCOL cho từng cột (↓). Hai hàm này biến 1 bảng dữ liệu thành 1 cột/hàng kết quả — tính toán, đếm, ghép chuỗi, tìm kiếm — tất cả trong 1 công thức duy nhất. Kết hợp với LAMBDA helpers khác (MAP, REDUCE, SCAN, MAKEARRAY), bạn có bộ công cụ functional programming hoàn chỉnh trong Excel 365.
Bình luận
Đăng nhập để tham gia bình luận
Đăng nhậpNhận bài viết mới nhất
Đăng ký để nhận thông báo khi có bài viết mới. Không spam, chỉ kiến thức chất lượng.
Bài viết liên quan
Khám phá thêm các bài viết cùng chủ đề
