INDEX MATCH là sự kết hợp hai hàm — MATCH tìm vị trí dòng hoặc cột của giá trị cần tìm, INDEX trả về giá trị tại vị trí đó; cho phép tra cứu linh hoạt hơn VLOOKUP: tra ngược cột trái, tra 2 chiều, không vỡ khi chèn cột.

Hàm INDEX MATCH Google Sheets: Thay Thế VLOOKUP

Tra cứu ngược, tra 2 chiều, không vỡ khi chèn cột — hướng dẫn toàn diện kết hợp INDEX + MATCH từ cơ bản đến nâng cao.

Tại sao INDEX MATCH tốt hơn VLOOKUP?

Tra cứu ngược (cột trái)

INDEX MATCH tìm giá trị ở cột bên trái cột khóa — điều VLOOKUP không làm được

Tra 2 chiều dòng + cột

Kết hợp 2 hàm MATCH để tra cứu theo cả tiêu đề hàng lẫn tiêu đề cột cùng lúc

Không vỡ khi chèn cột

VLOOKUP dùng số thứ tự cột cố định — chèn cột mới là sai kết quả; INDEX MATCH tham chiếu trực tiếp nên không bị ảnh hưởng

Nhanh với dữ liệu lớn

MATCH với chế độ exact-match trên cột đã sort nhanh hơn VLOOKUP đáng kể với bảng nhiều nghìn dòng

Hướng dẫn từng bước

  1. 1

    Nắm cú pháp hàm MATCH

    MATCH(lookup_value, lookup_array, match_type): tìm vị trí (số thứ tự) của lookup_value trong lookup_array. match_type = 0 để tìm chính xác. Ví dụ: =MATCH("Nam",A2:A100,0) trả về số thứ tự dòng chứa "Nam".

    Mẹo: MATCH trả về số nguyên (vị trí), không phải giá trị — dùng kết quả này làm đầu vào cho INDEX

  2. 2

    Nắm cú pháp hàm INDEX

    INDEX(array, row_num, [col_num]): trả về giá trị tại vị trí dòng/cột trong mảng. Ví dụ: =INDEX(B2:B100, 5) trả về giá trị ô thứ 5 trong cột B. Với mảng 2D: =INDEX(A2:D100, 3, 2) trả về dòng 3, cột 2.

    Mẹo: INDEX hiểu tọa độ tương đối bên trong mảng — không cần chỉ định sheet hay hàng tuyệt đối

  3. 3

    Kết hợp INDEX + MATCH cơ bản

    Lồng MATCH vào tham số row_num của INDEX: =INDEX(return_range, MATCH(lookup_value, lookup_range, 0)). MATCH tìm vị trí, INDEX trả về giá trị tại vị trí đó trong cột kết quả. Hai vùng phải cùng chiều dài.

    Mẹo: return_range và lookup_range phải song song — nếu MATCH dùng cột A thì INDEX cũng tính từ dòng tương ứng

  4. 4

    Tra 2 chiều với INDEX + 2 MATCH

    Để tra theo cả dòng lẫn cột: =INDEX(data_range, MATCH(row_lookup, row_headers, 0), MATCH(col_lookup, col_headers, 0)). MATCH đầu tìm dòng, MATCH thứ hai tìm cột trong tiêu đề.

    Mẹo: data_range là vùng dữ liệu không gồm tiêu đề; row_headers và col_headers là hàng/cột tiêu đề riêng biệt

  5. 5

    Bọc IFERROR để xử lý lỗi #N/A

    Khi không tìm thấy, MATCH trả về #N/A làm cả công thức lỗi. Bọc bằng IFERROR: =IFERROR(INDEX(...,MATCH(...,0)),"Không tìm thấy"). Giúp bảng tính sạch và dễ đọc hơn.

    Mẹo: Dùng chuỗi rỗng "" thay vì text nếu muốn ô trống khi không có kết quả

Công thức INDEX MATCH cần biết

Công thứcMô tả
=INDEX(B2:B100, MATCH(E2, A2:A100, 0))INDEX MATCH cơ bản — tra giá trị ở cột B theo khóa ở cột A
=INDEX(A2:A100, MATCH(E2, C2:C100, 0))Tra ngược — tìm giá trị cột A (bên trái) theo khóa ở cột C
=INDEX(B2:D10, MATCH(G2,A2:A10,0), MATCH(H2,B1:D1,0))Tra 2 chiều — giao điểm dòng (G2) và cột (H2)
=INDEX(C2:C100, MATCH(1,(A2:A100=E2)*(B2:B100=F2),0))Nhiều điều kiện — nhấn Ctrl+Shift+Enter (array formula)
=IFERROR(INDEX(B2:B100,MATCH(E2,A2:A100,0)),"")Bọc IFERROR — trả về rỗng thay vì #N/A khi không tìm thấy
=ARRAYFORMULA(IFERROR(INDEX(B$2:B$100,MATCH(E2:E50,A$2:A$100,0)),))ARRAYFORMULA — áp INDEX MATCH cho cả cột E cùng lúc

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

INDEX MATCH hay VLOOKUP cái nào tốt hơn?

INDEX MATCH linh hoạt và mạnh hơn: tra được cột bên trái, tra 2 chiều, không vỡ khi chèn cột, và thường nhanh hơn với bảng lớn. VLOOKUP chỉ nên dùng khi bảng đơn giản, cột khóa ở ngoài cùng trái và không cần tra ngược.

Làm sao tra cứu cột bên trái bằng INDEX MATCH?

VLOOKUP không tra được cột bên trái cột khóa. INDEX MATCH không có giới hạn này: dùng MATCH tìm vị trí trong cột khóa (bất kỳ cột nào), rồi INDEX trả về giá trị ở cột bất kỳ — kể cả cột trái. Ví dụ: =INDEX(A2:A100, MATCH(E2, C2:C100, 0)).

Tra cứu 2 điều kiện cùng lúc với INDEX MATCH như thế nào?

Dùng công thức mảng: =INDEX(C2:C100, MATCH(1,(A2:A100=E2)*(B2:B100=F2),0)) rồi nhấn Ctrl+Shift+Enter. Hoặc trong Google Sheets dùng ARRAYFORMULA. Hai điều kiện nhân với nhau: chỉ khi cả hai đều đúng (=1) mới MATCH tìm thấy.

Tại sao INDEX MATCH trả về #N/A và cách sửa?

#N/A xảy ra khi MATCH không tìm thấy giá trị. Kiểm tra: (1) lookup_value có đúng chính tả không, (2) lookup_array có chứa giá trị đó không, (3) có khoảng trắng thừa không (dùng TRIM), (4) kiểu dữ liệu có khớp không (số vs text). Bọc IFERROR để ẩn lỗi: =IFERROR(INDEX(...),"").

SheetStore có template dùng INDEX MATCH sẵn không?

Có, các template quản lý kho, bảng lương, báo cáo doanh thu trên SheetStore đều dùng INDEX MATCH thay VLOOKUP để đảm bảo tra cứu chính xác khi bảng được chỉnh sửa. Mua một lần 699K, dùng trọn đời — không cần xây công thức từ đầu.

Xem thêm

Tiết kiệm thời gian với SheetStore

Template Google Sheets chuyên nghiệp — đã tích hợp sẵn INDEX MATCH, VLOOKUP và các công thức nâng cao. Mua một lần 699K, dùng trọn đời.

Xem template tại SheetStore

Hoặc xem thêm hướng dẫn khác