Chia sẻ
"OFFSET tạo vùng tham chiếu động, tự co giãn theo dữ liệu. Kết hợp COUNTA, MATCH — biến biểu đồ và Named Range thành sống. Dashboard Excel chuyên nghiệp."
OFFSET tạo vùng tham chiếu động — tự co giãn theo dữ liệu thực tế. Kết hợp với COUNTA, MATCH, nó biến biểu đồ và Named Range thành 'sống' — tự động cập nhật khi thêm/xóa dữ liệu. Đây là nền tảng của mọi dashboard Excel chuyên nghiệp trước thời dynamic arrays.
Cú Pháp OFFSET
=OFFSET(reference, rows, cols, [height], [width])
reference — Ô hoặc vùng gốc (điểm xuất phát)
rows — Số hàng dịch chuyển (dương = xuống, âm = lên)
cols — Số cột dịch chuyển (dương = phải, âm = trái)
height — Chiều cao vùng kết quả (số hàng, mặc định = height of reference)
width — Chiều rộng vùng kết quả (số cột, mặc định = width of reference)Lưu ý: OFFSET là hàm volatile — Excel tính lại mỗi lần worksheet thay đổi, dù dữ liệu liên quan không đổi. Trên file lớn, dùng quá nhiều OFFSET có thể chậm.
Ví Dụ Cơ Bản
Dịch chuyển đơn giản
// A1 = "Xin chào"
=OFFSET(A1, 2, 0)
// → Giá trị ô A3 (dịch xuống 2 hàng)
=OFFSET(A1, 0, 3)
// → Giá trị ô D1 (dịch sang phải 3 cột)
=OFFSET(A1, -1, 0)
// → #REF! error (dịch lên 1 hàng từ A1 = hàng 0, không tồn tại)Tạo vùng có kích thước
// Lấy vùng 5 hàng × 3 cột bắt đầu từ B2:
=OFFSET(B2, 0, 0, 5, 3)
// → B2:D6 (vùng 5×3)
// Dùng trong SUM:
=SUM(OFFSET(B2, 0, 0, 5, 3))
// → Tổng 15 ô từ B2:D6Vùng Dữ Liệu Động Với OFFSET + COUNTA
Đây là ứng dụng QUAN TRỌNG nhất của OFFSET — tạo vùng tự mở rộng khi thêm dữ liệu mới.
Named Range động cho danh sách
// Cột A chứa danh sách tên (bắt đầu từ A2, có header ở A1)
// Tạo Named Range "DanhSach" tự mở rộng:
=OFFSET(Sheet1!$A$2, 0, 0, COUNTA(Sheet1!$A:$A)-1, 1)
// COUNTA($A:$A) = đếm ô không rỗng toàn cột A
// -1 vì bỏ header
// Khi thêm tên mới → COUNTA tăng → vùng tự mở rộng
// Bước tạo:
// 1. Formulas → Name Manager → New
// 2. Name: DanhSach
// 3. Refers to: =OFFSET(...) công thức trên
// 4. Dùng trong Data Validation, VLOOKUP, chart...Dynamic range 2 chiều (hàng + cột)
// Bảng dữ liệu bắt đầu từ A1, mở rộng cả hàng và cột:
=OFFSET($A$1, 0, 0,
COUNTA($A:$A), // chiều cao = số hàng có dữ liệu
COUNTA($1:$1) // chiều rộng = số cột có header
)
// Tự mở rộng theo CẢ 2 chiều!Biểu Đồ Tự Động Cập Nhật
// Vấn đề: Chart dùng vùng cố định A1:B10
// → Khi thêm dữ liệu ở B11, B12... chart không cập nhật!
// Giải pháp: Tạo 2 Named Range:
// Name: ChartLabels
=OFFSET(Sheet1!$A$2, 0, 0, COUNTA(Sheet1!$A:$A)-1, 1)
// Name: ChartValues
=OFFSET(Sheet1!$B$2, 0, 0, COUNTA(Sheet1!$B:$B)-1, 1)
// Trong Chart → Edit Series:
// Series X: =Sheet1!ChartLabels
// Series Y: =Sheet1!ChartValues
// → Chart tự cập nhật khi thêm/xóa dữ liệu!OFFSET + MATCH — Lookup Linh Hoạt
// Tìm doanh số của nhân viên (tên ở cột A, doanh số ở cột tùy chọn)
// E1 = dropdown chọn cột: "Q1", "Q2", "Q3", "Q4"
=OFFSET(A1,
MATCH("Nguyễn An", A:A, 0) - 1, // hàng chứa tên
MATCH(E1, A1:F1, 0) - 1 // cột được chọn
)
// Kết quả: giá trị tại giao hàng/cột
// Dynamic lookup theo CẢ hàng và cột!Lấy N dòng gần nhất (moving window)
// Tính trung bình 7 ngày gần nhất (moving average):
=AVERAGE(OFFSET(B2, COUNTA(B:B)-8, 0, 7, 1))
// Luôn lấy 7 ô cuối cùng của cột B
// Khi thêm dữ liệu mới → cửa sổ tự trượt
// Moving SUM 30 ngày:
=SUM(OFFSET(B2, COUNTA(B:B)-31, 0, 30, 1))OFFSET vs INDIRECT vs Dynamic Arrays
Tiêu chí | OFFSET | INDIRECT | Dynamic Arrays |
|---|---|---|---|
Cách hoạt động | Dịch chuyển từ ô gốc | Tạo ref từ text | Spill tự động |
Volatile | ✅ Có | ✅ Có | ❌ Không |
Phiên bản | Mọi phiên bản | Mọi phiên bản | Excel 365 only |
Use case chính | Dynamic ranges, charts | Ref từ text/dropdown | Mọi thứ (thay thế cả 2) |
Câu Hỏi Thường Gặp (FAQ)
OFFSET có còn cần thiết trong Excel 365 không?
Phần lớn các trường hợp dùng OFFSET có thể thay bằng dynamic arrays (FILTER, SORT, TAKE, DROP). Tuy nhiên OFFSET vẫn cần cho: Named Range động trong Name Manager, chart data source, và khi cần backward compatibility với Excel cũ.
OFFSET volatile ảnh hưởng hiệu suất như thế nào?
Excel tính lại MỌI ô chứa OFFSET khi BẤT KỲ thay đổi nào xảy ra. File nhỏ (<10K hàng) không đáng lo. File lớn (>100K hàng) với nhiều OFFSET có thể chậm đáng kể. Tip: dùng OFFSET trong Named Range thì ít ảnh hưởng hơn dùng trực tiếp trong hàng nghìn ô.
Có thể dùng OFFSET để tham chiếu sheet khác không?
Có! OFFSET(Sheet2!A1, 5, 2) trả giá trị ô C6 trên Sheet2. Tuy nhiên OFFSET KHÔNG thể dịch chuyển sang sheet khác — rows/cols chỉ di chuyển TRONG cùng worksheet.
Tổng Kết
OFFSET tạo tham chiếu động — vùng dữ liệu tự co giãn. Kết hợp COUNTA, nó biến Named Range và biểu đồ thành 'sống'. Dù dynamic arrays đang dần thay thế, OFFSET vẫn là công cụ không thể thiếu cho dashboard trên mọi phiên bản Excel.
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ủ đề
