Mục lục
Trong hướng dẫn này, chúng ta sẽ làm sáng tỏ một trong những cư dân bí ẩn nhất của vũ trụ Excel - hàm OFFSET.
Vậy OFFSET là gì trong Excel? Tóm lại, công thức OFFSET trả về một tham chiếu đến một phạm vi được bù từ ô bắt đầu hoặc một phạm vi ô theo một số hàng và cột đã chỉ định.
Hàm OFFSET có thể hơi khó để lấy , vì vậy, trước tiên chúng ta hãy xem qua phần giải thích kỹ thuật ngắn (tôi sẽ cố gắng hết sức để giải thích đơn giản) và sau đó chúng ta sẽ đề cập đến một số cách hiệu quả nhất để sử dụng OFFSET trong Excel.
Hàm OFFSET trong Excel - cú pháp và cách sử dụng cơ bản
Hàm OFFSET trong Excel trả về một ô hoặc phạm vi ô là một số hàng và cột nhất định từ một ô hoặc phạm vi nhất định.
Cú pháp của hàm OFFSET như sau:
OFFSET(tham chiếu, hàng, cột, [chiều cao], [chiều rộng])3 đối số đầu tiên là bắt buộc và 2 đối số cuối cùng là tùy chọn. Tất cả các đối số có thể là tham chiếu đến các ô khác hoặc kết quả được trả về bởi các công thức khác.
Có vẻ như Microsoft đã nỗ lực rất nhiều để đưa một số ý nghĩa vào tên của các tham số và chúng đưa ra gợi ý về những gì bạn phải chỉ định trong từng đối số.
Các đối số bắt buộc:
- Tham chiếu - một ô hoặc một dải ô liền kề mà từ đó bạn đặt giá trị bù trừ. Bạn có thể coi đó là điểm bắt đầu.
- Hàng - Số lượng hàngcột (A):
=OFFSET(A5:B9, MATCH(B1, OFFSET(A5:B9, 0, 1, ROWS(A5:B9), 1) ,0) -1, 0, 1, 1)
Tôi biết công thức có vẻ hơi vụng về, nhưng nó hoạt động :)
Ví dụ 2 .Cách tra cứu phía trên trong Excel
Như trường hợp VLOOKUP không tra được sang trái, đối chiếu ngang của nó - hàm HLOOKUP - không tra được lên trên để trả về giá trị.
Nếu bạn cần quét một hàng phía trên để tìm kết quả khớp, công thức OFFSET MATCH có thể trợ giúp một lần nữa, nhưng lần này bạn sẽ phải cải thiện nó bằng hàm COLUMNS, như sau:
OFFSET( lookup_table , return_row_offset , MATCH( lookup_value , OFFSET( lookup_table , lookup_row_offset , 0, 1, COLUMNS( lookup_table )) , 0) -1, 1, 1)Ở đâu:
- Lookup_row_offset - số hàng cần di chuyển từ điểm bắt đầu đến hàng tra cứu.
- Return_row_offset - số hàng cần di chuyển từ điểm bắt đầu đến hàng quay lại.
Giả sử bảng tra cứu là B4:F5 và giá trị tra cứu nằm trong ô B1, công thức sẽ như sau:
=OFFSET(B4:F5, 0, MATCH(B1, OFFSET(B4:F5, 1, 0, 1, COLUMNS(B4:F5)), 0) -1, 1, 1)
Trong trường hợp của chúng ta, độ lệch hàng tra cứu là 1 vì phạm vi tra cứu của chúng tôi cách điểm bắt đầu 1 hàng, độ lệch hàng trả về là 0 vì chúng tôi đang trả về kết quả khớp từ hàng đầu tiên trong bảng.
Ví dụ 3. Tra cứu hai chiều (theo giá trị hàng và cột)
Tra cứu hai chiều trả về một giá trị dựa trên kết quả trùng khớp ở cả hàng và cột. Và bạn có thể sử dụng như saucông thức mảng tra cứu kép để tìm giá trị tại giao điểm của một hàng và cột nhất định:
=OFFSET( bảng tra cứu , MATCH( giá trị tra cứu hàng , OFFSET( bảng tra cứu , 0, 0, ROWS( bảng tra cứu ), 1), 0) -1, MATCH( giá trị tra cứu cột , OFFSET( bảng tra cứu , 0, 0, 1, COLUMNS( bảng tra cứu )), 0) -1)Cho rằng:
- Bảng tra cứu là A5:G9
- Giá trị khớp trên các hàng nằm trong B2
- Giá trị khớp trên các cột nằm trong B1
Bạn nhận được công thức tra cứu hai chiều sau:
=OFFSET(A5:G9, MATCH(B2, OFFSET(A5:G9, 0, 0, ROWS(A5:G9), 1), 0)-1, MATCH(B1, OFFSET(A5:G9, 0, 0, 1, COLUMNS(A5:G9)), 0) -1)
Đó không phải là điều dễ nhớ nhất phải không? Ngoài ra, đây là một công thức mảng, vì vậy đừng quên nhấn Ctrl + Shift + Enter để nhập chính xác.
Tất nhiên, công thức OFFSET dài dòng này không cách duy nhất có thể để thực hiện tra cứu kép trong Excel. Bạn có thể nhận được kết quả tương tự bằng cách sử dụng hàm VLOOKUP & Các hàm MATCH, TÓM TẮT hoặc INDEX & CUỘC THI ĐẤU. Thậm chí còn có một cách không cần công thức - sử dụng các phạm vi được đặt tên và toán tử giao lộ (dấu cách). Hướng dẫn sau đây giải thích đầy đủ chi tiết về tất cả các giải pháp thay thế: Cách thực hiện tra cứu hai chiều trong Excel.
Hàm OFFSET - các hạn chế và giải pháp thay thế
Hy vọng rằng các ví dụ về công thức trên trang này đã làm sáng tỏ một số làm sáng tỏ cách sử dụng OFFSET trong Excel. Tuy nhiên, để tận dụng hiệu quả chức năng trong sổ làm việc của riêng bạn, bạn không chỉ nênbiết về điểm mạnh của nó, nhưng cũng cảnh giác với điểm yếu của nó.
Những hạn chế nghiêm trọng nhất của hàm OFFSET trong Excel như sau:
- Giống như các hàm dễ bay hơi khác, OFFSET là một chức năng ngốn tài nguyên . Bất cứ khi nào có bất kỳ thay đổi nào trong dữ liệu nguồn, các công thức OFFSET của bạn sẽ được tính toán lại, giúp Excel bận rộn lâu hơn một chút. Đây không phải là vấn đề đối với một công thức trong một bảng tính nhỏ. Nhưng nếu có hàng chục hoặc hàng trăm công thức trong sổ làm việc, Microsoft Excel có thể mất khá nhiều thời gian để tính toán lại.
- Các công thức OFFSET của Excel khó xem lại . Vì các tham chiếu do hàm OFFSET trả về là động nên các công thức lớn (đặc biệt là với các hàm OFFSET lồng nhau) có thể khá khó để gỡ lỗi.
Các lựa chọn thay thế để sử dụng OFFSET trong Excel
Như thường lệ trường hợp trong Excel, kết quả tương tự có thể đạt được theo một số cách khác nhau. Vì vậy, đây là ba lựa chọn thay thế thú vị cho OFFSET.
- Bảng Excel
Kể từ Excel 2002, chúng tôi có một tính năng thực sự tuyệt vời - bảng Excel chính thức, trái ngược với phạm vi thông thường. Để tạo bảng từ dữ liệu có cấu trúc, bạn chỉ cần nhấp vào Chèn > Bảng trên tab Trang chủ hoặc nhấn Ctrl + T .
Bằng cách nhập công thức vào một ô trong bảng Excel, bạn có thể tạo cái gọi là "cột được tính toán" để tự động sao chép công thức vào tất cả các ô khác trong cột đó và điều chỉnhcông thức cho mỗi hàng trong bảng.
Hơn nữa, bất kỳ công thức nào đề cập đến dữ liệu của bảng sẽ tự động điều chỉnh để bao gồm bất kỳ hàng mới nào bạn thêm vào bảng hoặc loại trừ các hàng bạn xóa. Về mặt kỹ thuật, các công thức như vậy hoạt động trên các cột hoặc hàng của bảng, về bản chất là dải động . Mỗi bảng trong sổ làm việc có một tên duy nhất (các tên mặc định là Table1, Table2, v.v.) và bạn có thể tự do đổi tên bảng của mình qua tab Design > nhóm Properties > hộp văn bản ; Tên bảng .
Ảnh chụp màn hình sau đây minh họa công thức SUM đề cập đến cột Tiền thưởng của Bảng 3. Xin lưu ý rằng công thức bao gồm tên cột của bảng chứ không phải một dải ô.
- Hàm Excel INDEX
Mặc dù không hoàn toàn giống như OFFSET, Excel INDEX cũng có thể được sử dụng để tạo tham chiếu phạm vi động. Không giống như OFFSET, hàm INDEX không biến động nên nó sẽ không làm chậm Excel của bạn.
- Hàm INDIRECT của Excel
Sử dụng hàm INDIRECT bạn có thể tạo phạm vi động tham chiếu từ nhiều nguồn như giá trị ô, giá trị ô và văn bản, phạm vi được đặt tên. Nó cũng có thể tự động tham chiếu đến một trang tính hoặc sổ làm việc Excel khác. Bạn có thể tìm thấy tất cả các ví dụ về công thức này trong hướng dẫn về hàm INDIRECT trong Excel của chúng tôi.
Bạn có nhớ câu hỏi được đặt ra ở phần đầu của hướng dẫn này không - OFFSET trong Excel là gì? Tôi hy vọng bây giờ bạn đã biết câu trả lời :) Nếu bạn muốn có thêm kinh nghiệm thực hành, vui lòng tải xuống sách bài tập thực hành của chúng tôi (vui lòng xem bên dưới) có chứa tất cả các công thức được thảo luận về vấn đề này trang và thiết kế ngược chúng để hiểu sâu hơn. Cảm ơn bạn đã đọc!
Sách bài tập thực hành để tải xuống
Ví dụ về công thức OFFSET (tệp .xlsx)
để di chuyển từ điểm bắt đầu, lên hoặc xuống. Nếu các hàng là số dương, thì công thức sẽ di chuyển bên dưới tham chiếu bắt đầu, trong trường hợp là số âm, công thức sẽ di chuyển lên trên tham chiếu bắt đầu. - Cols - Số cột bạn muốn công thức để di chuyển từ điểm bắt đầu. Cũng như các hàng, cột có thể dương (ở bên phải tham chiếu bắt đầu) hoặc âm (ở bên trái tham chiếu bắt đầu).
Đối số tùy chọn:
- Height - số hàng cần trả về.
- Width - số cột cần trả về.
Cả chiều cao và đối số chiều rộng phải luôn là số dương. Nếu một trong hai thứ bị bỏ qua, nó sẽ mặc định là chiều cao hoặc chiều rộng của tham chiếu .
Lưu ý. OFFSET là một hàm không ổn định và có thể làm chậm trang tính của bạn. Độ chậm tỷ lệ thuận với số lượng ô được tính toán lại.
Và bây giờ, hãy minh họa lý thuyết bằng một ví dụ về công thức OFFSET đơn giản nhất.
Ví dụ về công thức OFFSET trong Excel
Dưới đây là ví dụ về công thức OFFSET đơn giản trả về tham chiếu ô dựa trên điểm bắt đầu, hàng và cột mà bạn chỉ định:
=OFFSET(A1,3,1)
Công thức yêu cầu Excel lấy ô A1 làm ô điểm bắt đầu (tham chiếu), sau đó di chuyển xuống 3 hàng (đối số rows) và 1 cột sang trái (đối số cols). Kết quả là công thức OFFSET này trả về giá trị trong ô B4.
Hình ảnh bên tráihiển thị lộ trình của hàm và ảnh chụp màn hình bên phải minh họa cách bạn có thể sử dụng công thức OFFSET trên dữ liệu thực tế. Sự khác biệt duy nhất giữa hai công thức là công thức thứ hai (ở bên phải) bao gồm tham chiếu ô (E1) trong đối số hàng. Nhưng vì ô E1 chứa số 3 và chính xác cùng một số xuất hiện trong đối số hàng của công thức đầu tiên, nên cả hai sẽ trả về một kết quả giống hệt nhau - giá trị trong B4.
Công thức OFFSET trong Excel - những điều cần nhớ
- Hàm OFFSET là Excel không thực sự di chuyển bất kỳ ô hoặc phạm vi nào, nó chỉ trả về một tham chiếu.
- Khi công thức OFFSET trả về một phạm vi trong số các ô, các đối số hàng và cột luôn tham chiếu đến ô phía trên bên trái trong rage được trả về.
- Đối số tham chiếu phải bao gồm một ô hoặc dải ô liền kề, nếu không công thức của bạn sẽ trả về lỗi #VALUE! lỗi.
- Nếu các hàng và/hoặc cột được chỉ định di chuyển tham chiếu qua cạnh của bảng tính, công thức OFFSET trong Excel của bạn sẽ trả về lỗi #REF! lỗi.
- Hàm OFFSET có thể được sử dụng trong bất kỳ hàm Excel nào khác chấp nhận tham chiếu ô/dải ô trong các đối số của nó.
Ví dụ: nếu bạn cố gắng sử dụng công thức =OFFSET(A1,3,1,1,3)
riêng nó, nó sẽ đưa ra lỗi #VALUE! lỗi, do phạm vi cần trả về (1 hàng, 3 cột) không vừa với một ô. Tuy nhiên, nếu bạn nhúng nó vào hàm SUM, chẳng hạn nhưthis:
=SUM(OFFSET(A1,3,1,1,3))
Công thức sẽ trả về tổng các giá trị trong phạm vi 1 hàng x 3 cột, cách 3 hàng bên dưới và 1 cột ở bên phải của ô A1, tức là tổng giá trị trong các ô B4:D4.
Tại sao tôi sử dụng hàm OFFSET trong Excel?
Bây giờ bạn đã biết hàm OFFSET làm gì, bạn có thể hãy tự hỏi mình "Tại sao phải sử dụng nó?" Tại sao không chỉ đơn giản là viết một tham chiếu trực tiếp như B4:D4?
Công thức OFFSET trong Excel rất tốt cho:
Tạo phạm vi động : Các tham chiếu như B1:C4 là tĩnh , nghĩa là chúng luôn tham chiếu đến một phạm vi nhất định. Nhưng một số tác vụ dễ thực hiện hơn với phạm vi động. Đây là trường hợp đặc biệt khi bạn làm việc với việc thay đổi dữ liệu, ví dụ: bạn có một trang tính có hàng hoặc cột mới được thêm vào mỗi tuần.
Lấy phạm vi từ ô bắt đầu . Đôi khi, bạn có thể không biết địa chỉ thực của dải, mặc dù bạn biết nó bắt đầu từ một ô nhất định. Trong những trường hợp như vậy, sử dụng hàm OFFSET trong Excel là cách phù hợp.
Cách sử dụng hàm OFFSET trong Excel - ví dụ về công thức
Tôi hy vọng bạn không cảm thấy nhàm chán với mớ lý thuyết đó . Dù sao đi nữa, bây giờ chúng ta đang đến phần thú vị nhất - cách sử dụng thực tế của hàm OFFSET.
Hàm OFFSET và SUM trong Excel
Ví dụ mà chúng ta đã thảo luận lúc trước minh họa cách sử dụng OFFSET & đơn giản nhất ; TỔNG. Bây giờ, hãy xem xét các chức năng này ở một góc độ khác và xem những gìhọ có thể làm khác.
Ví dụ 1. Một công thức SUM / OFFSET động
Khi làm việc với các trang tính được cập nhật liên tục, bạn có thể muốn có một công thức SUM tự động chọn tất cả các hàng mới được thêm vào.
Giả sử bạn có dữ liệu nguồn tương tự như những gì bạn thấy trong ảnh chụp màn hình bên dưới. Mỗi tháng, một hàng mới được thêm ngay phía trên công thức SUM, và theo lẽ tự nhiên, bạn muốn đưa nó vào tổng. Nhìn chung, có hai lựa chọn - cập nhật phạm vi trong công thức SUM mỗi lần theo cách thủ công hoặc để công thức OFFSET thực hiện việc này cho bạn.
Kể từ ô đầu tiên của phạm vi để tính tổng sẽ được chỉ định trực tiếp trong công thức SUM, bạn chỉ phải quyết định các tham số cho hàm OFFSET của Excel, hàm này sẽ lấy ô cuối cùng của phạm vi:
-
Reference
- ô chứa tổng, trong trường hợp của chúng tôi là B9. -
Rows
- ô ngay phía trên tổng, yêu cầu số âm -1. -
Cols
- giá trị này là 0 vì bạn không muốn thay đổi cột.
Vì vậy, đây là mẫu công thức SUM / OFFSET:
=SUM( ô đầu tiên:(OFFSET( ô có tổng, -1,0)Đã tinh chỉnh cho ví dụ trên, công thức trông như sau:
=SUM(B2:(OFFSET(B9, -1, 0)))
Và như minh họa trong ảnh chụp màn hình bên dưới, công thức hoạt động hoàn hảo:
Ví dụ 2. Công thức OFFSET trong Excel để tính tổng N hàng cuối cùng
Trong ví dụ trên, giả sử bạn muốn biết số tiền thưởng chotrong N tháng qua chứ không phải tổng cộng. Bạn cũng muốn công thức tự động bao gồm mọi hàng mới mà bạn thêm vào trang tính.
Đối với tác vụ này, chúng ta sẽ sử dụng hàm OFFSET của Excel kết hợp với các hàm SUM và COUNT / COUNTA:
=SUM(OFFSET(B1,COUNT(B:B)-E1+1,0,E1,1))
hoặc
=SUM(OFFSET(B1,COUNTA(B:B)-E1,0,E1,1))
Các chi tiết sau đây có thể giúp bạn hiểu rõ hơn về các công thức:
-
Reference
- tiêu đề của cột có giá trị bạn muốn tính tổng, ô B1 trong ví dụ này. -
Rows
- để tính số hàng cần bù, bạn sử dụng hàm COUNT hoặc COUNTA.COUNT trả về số ô trong cột B có chứa các số, từ đó bạn trừ N tháng qua (số là ô E1) và thêm 1.
Nếu COUNTA là hàm bạn chọn, bạn không cần thêm 1, vì hàm này đếm tất cả các ô không trống và hàng tiêu đề có giá trị văn bản sẽ thêm một ô bổ sung mà công thức của chúng ta cần. Xin lưu ý rằng công thức này sẽ chỉ hoạt động chính xác trên cấu trúc bảng tương tự - một hàng tiêu đề theo sau là các hàng có số. Đối với các bố cục bảng khác nhau, bạn có thể cần thực hiện một số điều chỉnh trong công thức OFFSET/COUNTA.
-
Cols
- số cột cần bù bằng 0 (0). -
Height
- số hàng cần tính tổng được chỉ định trong E1. -
Width
- 1 cột.
Sử dụng hàm OFFSET với AVERAGE, MAX, MIN
Làm tương tự khi chúng tôi tính tiền thưởng cho N tháng qua, bạn có thểlấy giá trị trung bình của N ngày, tuần hoặc năm qua cũng như tìm giá trị tối đa hoặc tối thiểu của chúng. Sự khác biệt duy nhất giữa các công thức là tên hàm đầu tiên:
=AVERAGE(OFFSET(B1,COUNT(B:B)-E1+1,0,E1,1))
=MAX(OFFSET(B1,COUNT(B:B)-E1+1,0,E1,1))
=MIN(OFFSET(B1,COUNT(B:B)-E1+1,0,E1,1))
Chìa khóa lợi ích của các công thức này so với AVERAGE(B5:B8) hoặc MAX(B5:B8) thông thường là bạn sẽ không phải cập nhật công thức mỗi khi bảng nguồn của bạn được cập nhật. Bất kể có bao nhiêu hàng mới được thêm hoặc xóa trong trang tính của bạn, các công thức OFFSET sẽ luôn tham chiếu đến số lượng ô cuối cùng (thấp nhất) được chỉ định trong cột.
Công thức OFFSET Excel để tạo phạm vi động
Được sử dụng cùng với COUNTA, hàm OFFSET có thể giúp bạn tạo một phạm vi động có thể hữu ích trong nhiều tình huống, chẳng hạn như để tạo danh sách thả xuống có thể cập nhật tự động.
Công thức OFFSET đối với phạm vi động như sau:
=OFFSET(Sheet_Name!$A$1, 0, 0, COUNTA(Sheet_Name!$A:$A), 1)
Trọng tâm của công thức này, bạn sử dụng hàm COUNTA để lấy số ô không trống trong cột mục tiêu. Con số đó đi đến đối số chiều cao của OFFSET hướng dẫn nó trả về bao nhiêu hàng.
Ngoài ra, đó là một công thức Offset thông thường, trong đó:
- Tham khảo là điểm bắt đầu mà bạn căn cứ vào phần bù, ví dụ: Sheet1!$A$1.
- Rows và
Cols
đều là 0 vì không có cột hoặc hàng nào để bù. - Chiều rộng là 1 cột.
Lưu ý. Nếu bạn làtạo dải động trong trang tính hiện tại, không cần đưa tên trang tính vào tham chiếu, Excel sẽ tự động thực hiện việc đó cho bạn khi tạo dải ô đã đặt tên. Nếu không, hãy đảm bảo bao gồm tên của trang tính theo sau dấu chấm than như trong ví dụ về công thức này.
Sau khi bạn đã tạo phạm vi động được đặt tên bằng công thức OFFSET ở trên, bạn có thể sử dụng Xác thực dữ liệu để tạo danh sách thả xuống động. Danh sách này sẽ tự động cập nhật ngay khi bạn thêm hoặc xóa các mục khỏi danh sách nguồn.
Để biết hướng dẫn chi tiết từng bước về cách tạo danh sách thả xuống trong Excel, vui lòng xem các hướng dẫn sau:
- Tạo danh sách thả xuống trong Excel - tĩnh, động, từ sổ làm việc khác
- Tạo danh sách thả xuống phụ thuộc
Excel OFFSET & VLOOKUP
Như mọi người đã biết, việc tra cứu theo chiều dọc và chiều ngang đơn giản được thực hiện tương ứng với hàm VLOOKUP hoặc HLOOKUP. Tuy nhiên, các chức năng này có quá nhiều hạn chế và thường vấp ngã trong các công thức tra cứu phức tạp và mạnh mẽ hơn. Vì vậy, để thực hiện tra cứu phức tạp hơn trong bảng Excel của mình, bạn phải tìm kiếm các lựa chọn thay thế như INDEX, MATCH và OFFSET.
Ví dụ 1. Công thức OFFSET cho Vlookup bên trái trong Excel
Một trong những hạn chế khét tiếng nhất của hàm VLOOKUP là không thể nhìn sang bên trái của nó, nghĩa là VLOOKUP chỉ có thể trả về một giá trị chobên phải của cột tra cứu.
Trong bảng tra cứu mẫu của chúng tôi, có hai cột - tên tháng (cột A) và tiền thưởng (cột B). Nếu bạn muốn nhận tiền thưởng trong một tháng nhất định, công thức VLOOKUP đơn giản này sẽ hoạt động mà không gặp trở ngại nào:
=VLOOKUP(B1, A5:B11, 2, FALSE)
Tuy nhiên, ngay sau khi bạn hoán đổi các cột trong bảng tra cứu, điều này sẽ ngay lập tức dẫn đến lỗi #N/A:
Để xử lý tra cứu bên trái, bạn cần một hàm linh hoạt hơn mà không thực sự quan tâm cột trả về nằm ở đâu . Một trong những giải pháp khả thi là sử dụng kết hợp các hàm INDEX và MATCH. Một cách tiếp cận khác là sử dụng OFFSET, MATCH và ROWS:
OFFSET( lookup_table , MATCH( lookup_value , OFFSET( lookup_table , 0, lookup_col_offset , ROWS( lookup_table ), 1) ,0) -1, return_col_offset , 1, 1)Ở đâu:
- Lookup_col_offset - là số cột cần di chuyển từ điểm bắt đầu đến cột tra cứu.
- Return_col_offset - là số cột cần di chuyển từ điểm bắt đầu đến điểm quay lại cột.
Trong ví dụ của chúng tôi, bảng tra cứu là A5:B9 và giá trị tra cứu nằm trong ô B1, độ lệch cột tra cứu là 1 (vì chúng tôi đang tìm kiếm giá trị tra cứu trong cột thứ hai (B ), chúng ta cần di chuyển 1 cột sang phải từ đầu bảng), độ lệch cột trả về bằng 0 vì chúng ta đang trả về các giá trị từ cột đầu tiên