Menu

Hàm OFFSET trong Excel: vùng động và tổng cuốn chiếu

=OFFSET(A1,3,2) trả về ô cách A1 3 hàng xuống dưới và 2 cột sang phải. Khi có thêm chiều cao, hàm trả về cả một vùng, đây là cách tính tổng N hàng cuối hay dựng trung bình trượt.

Mọi bảng tính trên trang này đều trực tiếp: đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

=OFFSET(A1,3,2) trả về ô cách A1 3 hàng xuống dưới và 2 cột sang phải, tức là C4. Khi bạn đưa thêm chiều cao và chiều rộng, hàm trả về cả một vùng, và đó là công dụng chính của OFFSET: tính tổng và trung bình trên một vùng có thể dịch chuyển hoặc mở rộng.

Dịch chuyển từ A1
G2
ABCDEFG
1ProductCategoryPriceRowsColsResult
2AppleFruit$1.2032$0.80
3PearFruit$1.50
4CarrotVegetable$0.80
5BreadBakery$2.40
6MilkDairy$1.10
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Đi xuống 3 hàng và sang 2 cột từ A1 sẽ tới C4, giá của Carrot, $0.80. Đặt Cols bằng 0 để lấy tên Carrot, hoặc Rows bằng 5 để tới hàng của Milk. Số hàng và số cột có thể âm để đi lên hoặc lùi lại, còn dịch ra ngoài mép trên hay mép trái của trang tính sẽ báo #REF!.

Cú pháp OFFSET

=OFFSET(reference, rows, cols, [height], [width])
  • reference: ô gốc (hoặc vùng gốc).
  • rows, cols: dịch đi bao xa. 0 nghĩa là giữ nguyên.
  • height, width: kích thước của vùng cần trả về, tính từ ô đã dịch tới. Nếu bỏ trống, kích thước bằng kích thước của reference.

Khi đứng một mình trong ô, một hàm OFFSET trả về nhiều ô sẽ tràn (spill) ra trong Excel 365; các phiên bản cũ hơn thường hiện #VALUE!. Đặt trong SUM, AVERAGE, COUNT hay MAX thì nó hoạt động như một vùng.

Tính tổng N hàng cuối

Việc kinh điển của OFFSET: một tổng luôn bao trùm các hàng mới nhất, dù đã thêm bao nhiêu hàng. COUNT tìm xem có bao nhiêu giá trị, OFFSET dịch xuống giá trị đầu tiên trong N giá trị cuối, và chiều cao lấy N hàng.

Tổng của N tháng gần nhất
F2
ABCDEF
1MonthSalesLast NTotal
2Jan4,200314,900
3Feb3,900
4Mar4,800
5Apr5,100
6May4,600
7Jun5,300
8Jul5,000
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Có 7 giá trị, nên OFFSET bắt đầu cách B1 7-3+1, tức 5 hàng, tại B6, và lấy 3 hàng: tháng 5 đến tháng 7, tổng 14.900. Gõ 4900 vào B9 (tháng 8) thì tổng chuyển sang tháng 6, 7 và 8, vì giờ COUNT đếm được 8. Vùng B2:B13 chừa chỗ cho các tháng còn lại trong năm. Cột không được có ô trống xen giữa, nếu không COUNT sẽ đếm thiếu và cửa sổ rơi sai chỗ.

Trung bình trượt

Khi kéo xuống một cột, OFFSET với số hàng âm cho mỗi hàng một cửa sổ gồm các hàng phía trên: ở đây là trung bình của tháng hiện tại và hai tháng trước đó.

Trung bình trượt ba tháng
C4
ABC
1MonthSales3-month average
2Jan4,200
3Feb3,900
4Mar4,8004,300
5Apr5,1004,600
6May4,6004,833
7Jun5,3005,000
8Jul5,0004,967
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

C4 tính trung bình B2:B4 (tháng 1 đến tháng 3), 4.300. Mỗi hàng bên dưới dịch cửa sổ xuống một hàng. Đổi 3 thành 6 và -2 thành -5 để có trung bình sáu tháng (khi đó bắt đầu công thức từ hàng 7). Riêng trường hợp này thì không cần OFFSET: =AVERAGE(B2:B4) kéo xuống từ C4 cũng cho kết quả tương tự, vì tham chiếu tương đối vốn đã tự dịch chuyển. OFFSET chỉ thật sự đáng dùng khi kích thước cửa sổ lấy từ một ô.

Vì sao INDEX thường là lựa chọn tốt hơn

OFFSET là hàm volatile: Excel tính lại mọi hàm OFFSET sau bất kỳ chỉnh sửa nào ở bất kỳ đâu trong workbook, vì không thể biết trước hàm sẽ trỏ tới ô nào. Một trang tính có hàng nghìn hàm như vậy sẽ chậm đi. INDEX cũng trả về tham chiếu, và một vùng viết dạng start:INDEX(...) mở rộng theo cùng cách mà không volatile:

=SUM(OFFSET(B2, 0, 0, E2, 1))        first E2 rows, volatile
=SUM(B2:INDEX(B2:B13, E2))           same rows, not volatile

Cả hai đều đọc E2 hàng đầu tiên của cột. OFFSET cũng khó kiểm tra hơn: Trace Precedents và các đường viền màu Excel vẽ khi bạn sửa công thức chỉ cho thấy ô gốc và các đối số, chứ không cho thấy vùng mà OFFSET thực sự trả về. Dùng OFFSET cho mô hình nhanh hoặc vùng dữ liệu của biểu đồ; với workbook lớn, ưu tiên INDEX. Trang INDEX nói thêm về cách trả về vùng, còn INDIRECT là hàm tham chiếu volatile còn lại.

Luyện tập: tổng N tháng đầu tiên

Doanh số hằng tháng
F2
ABCDEF
1MonthSalesFirst NTotal
2Jan4,2004
3Feb3,900
4Mar4,800
5Apr5,100
6May4,600
7Jun5,300
8Jul5,000
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Đến lượt bạn: Trong F2, dùng OFFSET bên trong SUM để tính tổng N tháng đầu tiên, với N nằm ở E2.

Câu hỏi thường gặp

Hàm OFFSET trong Excel dùng để làm gì?

Hàm trả về một tham chiếu cách ô gốc một số hàng và số cột cho trước, có thể kèm thay đổi kích thước. =OFFSET(A1,3,2) là ô cách A1 3 hàng xuống dưới và 2 cột sang phải, tức là C4.

Làm sao tính tổng N hàng cuối trong Excel?

Bắt đầu từ ô tiêu đề và dịch xuống tới giá trị đầu tiên trong N giá trị cuối: =SUM(OFFSET(B1,COUNT(B2:B100)-N+1,0,N,1)). COUNT tìm xem có bao nhiêu giá trị, và chiều cao N lấy đúng chừng đó hàng. Cách này chỉ đúng khi cột không có ô trống xen giữa.

Vì sao OFFSET là hàm volatile?

Excel tính lại mọi hàm OFFSET sau bất kỳ thay đổi nào trong workbook, vì chỉ sau khi hàm chạy mới biết được nó trỏ tới ô nào. Với workbook lớn, điều này làm mọi thứ chậm đi. Một vùng dựng bằng INDEX, như B2:INDEX(B2:B100,N), làm được việc tương tự mà không volatile.

Các đối số của hàm OFFSET là gì?

OFFSET(reference, rows, cols, [height], [width]): ô gốc, dịch xuống bao nhiêu hàng (số âm là đi lên), dịch sang bao nhiêu cột (số âm là lùi lại), và tùy chọn kích thước của vùng cần trả về.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu