Chia sẻ
"MAKEARRAY tạo mảng 2D từ LAMBDA, MAP biến đổi từng phần tử. Bảng nhân, ma trận khoảng cách, clean data, phân loại — tất cả bằng 1 công thức."
MAKEARRAY tạo mảng 2D từ con số 0 bằng LAMBDA. MAP biến đổi từng phần tử mảng theo logic tùy chỉnh. Kết hợp lại, bạn có thể generate bảng nhân, ma trận khoảng cách, heatmap so sánh, và nhiều cấu trúc dữ liệu phức tạp — tất cả chỉ bằng 1 công thức. Bài viết hướng dẫn từ cú pháp đến ứng dụng thực tế.
MAKEARRAY — Tạo Mảng 2D Từ LAMBDA
Cú pháp
=MAKEARRAY(rows, cols, function)
rows — Số hàng của mảng output
cols — Số cột của mảng output
function — LAMBDA(row, col, ...)
row = chỉ số hàng hiện tại (bắt đầu từ 1)
col = chỉ số cột hiện tại (bắt đầu từ 1)
Trả về giá trị cho ô [row, col]MAKEARRAY gọi LAMBDA cho mỗi ô trong mảng rows × cols. Kết quả là mảng 2D hoàn chỉnh — không cần helper column, không cần copy công thức.
Ví dụ 1: Bảng nhân (Multiplication Table)
=MAKEARRAY(9, 9, LAMBDA(r, c, r * c))
// Tạo bảng nhân 9×9:
// {1,2,3,...,9; 2,4,6,...,18; ...; 9,18,27,...,81}
// 1 công thức → 81 giá trị tự spill raVí dụ 2: Ma trận đơn vị (Identity Matrix)
=MAKEARRAY(4, 4, LAMBDA(r, c, IF(r=c, 1, 0)))
// Kết quả:
// {1,0,0,0; 0,1,0,0; 0,0,1,0; 0,0,0,1}
// Perfect cho phép nhân ma trận với MMULTVí dụ 3: Bảng lãi suất kép
// Hàng = số năm (1-10), Cột = lãi suất (5%-12%)
=MAKEARRAY(10, 8, LAMBDA(year, rate_idx,
LET(
rate, 0.04 + rate_idx * 0.01,
ROUND(1000000 * (1 + rate) ^ year, 0)
)
))
// Tạo bảng FV cho 10 năm × 8 mức lãi suất
// Mỗi ô = 1,000,000 × (1 + rate)^yearVí dụ 4: Mảng cờ vua (Checkerboard)
=MAKEARRAY(8, 8, LAMBDA(r, c,
IF(MOD(r+c, 2) = 0, "⬜", "⬛")
))
// Tạo bàn cờ 8×8 với emoji trắng/đen xen kẽ
// Kết hợp Conditional Formatting để tô màu thực sựVí dụ 5: Random Matrix với phân phối đều
=MAKEARRAY(5, 3, LAMBDA(r, c,
RANDBETWEEN(1, 100)
))
// Tạo mảng 5×3 số ngẫu nhiên 1-100
// Lưu ý: RANDARRAY(5,3,1,100,TRUE) ngắn hơn
// Nhưng MAKEARRAY cho phép logic phức tạp hơnMAP — Biến Đổi Từng Phần Tử Mảng
Cú pháp
=MAP(array1, [array2, ...], function)
array1 — Mảng đầu tiên
array2 — Mảng thứ 2 (tùy chọn, cùng kích thước)
function — LAMBDA(value1, [value2, ...], ...)
value1 = phần tử từ array1
value2 = phần tử từ array2
Trả về giá trị biến đổiMAP giống hàm map() trong JavaScript/Python — áp dụng một hàm cho từng phần tử và trả về mảng kết quả cùng kích thước. Nó thay thế hàng trăm helper columns.
Ví dụ 1: Phân loại điểm số
// Cột A có điểm: 85, 42, 73, 91, 56
=MAP(A2:A6, LAMBDA(score,
IF(score >= 80, "Giỏi",
IF(score >= 65, "Khá",
IF(score >= 50, "Trung bình", "Yếu")))
))
// Kết quả: {"Giỏi"; "Yếu"; "Khá"; "Giỏi"; "Trung bình"}
// Không cần cột phụ, 1 công thức cho toàn bộ mảngVí dụ 2: MAP với 2 mảng — Tính giá sau thuế
// A = giá gốc, B = thuế suất
=MAP(A2:A10, B2:B10, LAMBDA(price, tax,
ROUND(price * (1 + tax), 0)
))
// Mỗi sản phẩm có thuế suất riêng
// MAP kết hợp 2 mảng element-by-elementVí dụ 3: Clean & Chuẩn hóa tên
=MAP(A2:A20, LAMBDA(name,
PROPER(TRIM(CLEAN(SUBSTITUTE(name, " ", " "))))
))
// Xóa ký tự đặc biệt (CLEAN)
// Xóa space thừa (TRIM + SUBSTITUTE)
// Viết hoa đầu từ (PROPER)
// Áp dụng cho 19 ô cùng lúcVí dụ 4: Trích xuất domain từ email
=MAP(C2:C50, LAMBDA(email,
IFERROR(
MID(email, FIND("@", email) + 1, 999),
"Invalid"
)
))
// "user@gmail.com" → "gmail.com"
// "bad-email" → "Invalid"
// 1 công thức xử lý 49 emailVí dụ 5: Áp dụng Named LAMBDA
// Bước 1: Tạo Named Range VND_FORMAT:
// =LAMBDA(n, TEXT(n, "#,##0") & " ₫")
// Bước 2: Dùng MAP:
=MAP(D2:D100, VND_FORMAT)
// Mỗi số → "1,500,000 ₫"
// Tái sử dụng logic formatting everywhereKết Hợp MAKEARRAY + MAP
Ma trận khoảng cách giữa các thành phố
// A2:A5 = {"HN", "SG", "ĐN", "HP"}
// B2:B5 = lat, C2:C5 = lng
=MAKEARRAY(4, 4, LAMBDA(r, c,
LET(
lat1, INDEX(B2:B5, r) * PI()/180,
lat2, INDEX(B2:B5, c) * PI()/180,
dlat, lat2 - lat1,
dlng, (INDEX(C2:C5, c) - INDEX(C2:C5, r)) * PI()/180,
a, SIN(dlat/2)^2 + COS(lat1)*COS(lat2)*SIN(dlng/2)^2,
ROUND(6371 * 2 * ATAN2(SQRT(1-a), SQRT(a)), 0)
)
))
// Tạo ma trận 4×4 khoảng cách (km) giữa các thành phố
// Haversine formula 100% trong Excel!Tạo lịch tháng bất kỳ
// E1 = tháng (1-12), F1 = năm (2026)
=LET(
first, DATE(F1, E1, 1),
start_weekday, WEEKDAY(first, 2),
MAKEARRAY(6, 7, LAMBDA(r, c,
LET(
day_num, (r-1)*7 + c - start_weekday + 1,
d, first + day_num - 1,
IF(MONTH(d) = E1, DAY(d), "")
)
))
)
// Tạo lịch 6 tuần × 7 ngày cho bất kỳ tháng nào
// Ô ngoài tháng = trốngSo Sánh MAKEARRAY, MAP, BYROW, BYCOL
Hàm | Input | Output | Mục đích |
|---|---|---|---|
MAKEARRAY | rows, cols | Mảng rows×cols | Tạo mảng mới từ scratch |
MAP | Mảng có sẵn | Mảng cùng kích thước | Biến đổi từng phần tử |
BYROW | Mảng có sẵn | 1 cột (1 giá trị/hàng) | Tổng hợp theo hàng |
BYCOL | Mảng có sẵn | 1 hàng (1 giá trị/cột) | Tổng hợp theo cột |
Lưu Ý Quan Trọng
Chỉ Excel 365: MAKEARRAY và MAP cần Dynamic Array engine + LAMBDA support.
Index từ 1: MAKEARRAY truyền row/col bắt đầu từ 1 (không phải 0 như programming).
MAP cần cùng kích thước: Nếu dùng nhiều mảng, tất cả phải cùng số hàng × cột.
Performance: Mảng lớn (>10,000 phần tử) có thể chậm vì LAMBDA chạy per-element.
Câu Hỏi Thường Gặp (FAQ)
MAKEARRAY khác SEQUENCE thế nào?
SEQUENCE tạo dãy số liên tục (1,2,3...). MAKEARRAY tạo mảng 2D với BẤT KỲ logic nào — mỗi ô có thể phụ thuộc vào vị trí row/col. SEQUENCE là trường hợp đặc biệt: MAKEARRAY(5,1,LAMBDA(r,c,r)) tương đương SEQUENCE(5).
MAP có thay thế được IF mảng không?
Có và hơn thế. IF(A1:A10>5, "OK", "NO") chỉ xử lý logic đơn giản. MAP cho phép logic phức tạp nhiều bước bên trong LAMBDA — gọi hàm khác, dùng LET, IF lồng nhau, thậm chí gọi Named Functions.
Khi nào dùng MAP thay vì helper column?
Luôn ưu tiên MAP khi: (1) logic phức tạp hơn 1 hàm đơn giản, (2) bạn không muốn cột phụ làm rối bảng tính, (3) cần kết quả dynamic (tự mở rộng khi thêm dữ liệu). Helper column chỉ tốt hơn khi cần debug từng bước.
MAP có chạy trên Google Sheets không?
Có! Google Sheets hỗ trợ LAMBDA và MAP từ 2022. Cú pháp giống Excel 365. Tuy nhiên, MAKEARRAY chưa có trên Google Sheets — bạn cần dùng ARRAY_CONSTRAIN + SEQUENCE + INDEX thay thế.
Tổng Kết
MAKEARRAY cho phép tạo mảng 2D từ scratch — bảng nhân, ma trận, lịch, bảng tính lãi suất. MAP biến đổi mảng có sẵn — clean dữ liệu, phân loại, tính toán phức tạp. Cả hai đều dùng LAMBDA, biến Excel 365 thành công cụ lập trình hàm thực sự. Hãy bắt đầu với ví dụ đơn giản (bảng nhân, phân loại điểm) rồi nâng dần lên các bài toán phức tạp hơn.
Mục lục
- MAKEARRAY — Tạo Mảng 2D Từ LAMBDA
- Cú pháp
- Ví dụ 1: Bảng nhân (Multiplication Table)
- Ví dụ 2: Ma trận đơn vị (Identity Matrix)
- Ví dụ 3: Bảng lãi suất kép
- Ví dụ 4: Mảng cờ vua (Checkerboard)
- Ví dụ 5: Random Matrix với phân phối đều
- MAP — Biến Đổi Từng Phần Tử Mảng
- Cú pháp
- Ví dụ 1: Phân loại điểm số
- Ví dụ 2: MAP với 2 mảng — Tính giá sau thuế
- Ví dụ 3: Clean & Chuẩn hóa tên
- Ví dụ 4: Trích xuất domain từ email
- Ví dụ 5: Áp dụng Named LAMBDA
- Kết Hợp MAKEARRAY + MAP
- Ma trận khoảng cách giữa các thành phố
- Tạo lịch tháng bất kỳ
- So Sánh MAKEARRAY, MAP, BYROW, BYCOL
- Lưu Ý Quan Trọng
- Câu Hỏi Thường Gặp (FAQ)
- MAKEARRAY khác SEQUENCE thế nào?
- MAP có thay thế được IF mảng không?
- Khi nào dùng MAP thay vì helper column?
- MAP có chạy trên Google Sheets không?
- Tổng Kết
Muốn làm chủ Excel?
Tham gia khóa học E-Learning của Trà Đá Data để được hướng dẫn chi tiết từ A-Z với Case Study thực tế.
Tìm hiểu ngayBì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ủ đề
BYCOL & BYROW — Áp Dụng Hàm Theo Hàng/Cột
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.
Hàm CELL & INFO — Thông Tin Worksheet & Hệ Thống
CELL trả về thông tin ô — format, vị trí, đường dẫn file. INFO trả về thông tin hệ thống — OS, Excel version, calc mode. Hai hàm metadata ít ai biết nhưng cực kỳ hữu ích.
WRAPCOLS & WRAPROWS — Reshape Mảng 1D → 2D Excel 365
WRAPCOLS gập theo cột, WRAPROWS gập theo hàng. Biến mảng 1D thành bảng 2D — tạo lịch tháng, chia nhóm, reshape dữ liệu chỉ với 1 công thức.
