Vlookup Để Trả Lại Nhiều Giá Trị Trong Excel: Hướng Dẫn Chi Tiết Và Các Giải Pháp Thực Tiễn

Trong thế giới công việc kinh doanh, tài chính và phân tích dữ liệu, việc trích xuất thông tin chính xác từ bảng dữ liệu lớn luôn là một yếu tố quan trọng. Hầu hết các nhà quản trị, biên tập viên dữ liệu và chuyên viên phân tích đều đã quen với hàm VLOOKUP trong Microsoft Excel – một công cụ mạnh mẽ để tìm kiếm và trả về giá trị dựa trên một khóa duy nhất. Tuy nhiên, trong thực tế kinh doanh, nhu cầu “tìm kiếm theo một khóa và lấy lại nhiều giá trị liên quan” thường xuyên xuất hiện. Điều này làm cho hàm VLOOKUP truyền thống trở nên hạn chế vì nó chỉ trả về một giá trị duy nhất – giá trị ở cột đầu tiên được chỉ định trong phạm vi tìm kiếm.

Bài viết này sẽ trình bày chi tiết các giải pháp (kể cả những hạn chế và cách khắc phục) để dùng VLOOKUP hoặc các hàm thay thế trong Excel để trả lại nhiều giá trị. Bạn sẽ được học cách:

  1. Hiểu rõ giới hạn của VLOOKUP truyền thống.
  2. Sử dụng hàm INDEX + SMALL để lấy nhiều kết quả.
  3. Áp dụng hàm FILTER (Excel 365/2026 trở lên) cho việc trả về mảng nhiều giá trị.
  4. Kết hợp hàm TEXTJOIN (hoặc CONCAT/CONCATENATE) để kết hợp kết quả thành một chuỗi duy nhất.
  5. Sử dụng Power Query để truy xuất và lọc dữ liệu.
  6. Tạo macro VBA đơn giản để tự động lấy nhiều giá trị.
  7. So sánh các phương pháp và chọn giải pháp phù hợp theo từng tình huống.

Các ví dụ thực tế và mã công thức sẽ được minh hoạ bằng bảng dữ liệu minh hoạ, giúp bạn dễ dàng áp dụngío trong công việc thực tế.

1. VLOOKUP truyền thống: Tại sao nó chỉ trả về một giá trị?

Hàm VLOOKUP có cú pháp:

=VLOOKUP(lookup_value, table_array, col_index_num, range_lookup)
  • lookup_value: giá trị cần tìm trong cột đầu tiên của table_array.
  • table_array: vùng dữ liệu cần tìm kiếm.
  • col_index_num: số thứ tự cột trong table_array mà bạn muốn lấy giá trị.
  • range_lookup: tùy chọn 0 (bằng chính xác) hoặc 1 (d tarihinde).

Ưu điểm: nhanh, đơn giản.
Nhược điểm: chỉ trả về một giá trị – giá trị ở cột được chỉ định, ngay trong hàng chứa lookup_value. Khi một khóa có nhiều hàng (ví dụ mã sản phẩm xuất hiện 3 lần trong bảng), VLOOKUP chỉ sẽ trả về giá trị मिल nhất, thường là hàng đầu tiên tìm thấy. Nếu bạn muốn lấy tất cả các giá trị liên quan, bạn cần một phương pháp khác.

2. Sử dụng INDEX + SMALL để lấy nhiều kết quả

2.1. Nguyên lý

Hàm INDEX trả về giá trị tại vị trí hàng và cột trong một phạm vi. Kết hợpósitos SMALLkriptヨ để xác định vị trí thứ k nhỏ nhất trong một danh sách chỉ số của hàng phù hợp. Phương pháp này cho phép ta “lặp” qua tất cả các hàng thỏa mãn điều kiện và trả về mỗi giá trị theo thứ tự.

2.2. Mẫu công thức

Giả sử bảng dữ liệu A1:C10apture có cấu trúc:

A (Mã)B (Tên)C (Giá)
001Áo thun200,000
002Quần short150,000
001Áo len250,000
003Giày thể thao500,000

Bạn muốn tìm tất cả tên sản phẩm có mã “001”. Dưới đây là công thức trả về tên thứ k:

=IFERROR(INDEX($B$2:$B$10, SMALL(IF($A$2:$A$10=E2, ROW($A$2:$A$10)-ROW($A$2)+1), ROW(1:1))), "")
  • E2 chứa mã cần tìm (ví dụ “001”).
  • IF سب tạo mảng chỉ số hàng thỏa mãn điều kiện.
  • SMALL-м lấy vị trí thứ k.
  • ROW(1:1) tăng dần khi bạn sao chép công thức xuống các hàng tiếp theo: ROW(2:2), ROW(3:3)… để lấy giá trị thứ 2, 3, …
  • IFERROR trả về chuỗi trống khi không còn giá trị.

Cách nhập công thức: Nhấn Ctrl+Shift+Enter (hoặc Ctrl+Enter trong Excel 365) nếu bạn đang dùng Excel cũ; trong Excel 365, công thức mảng tự động.

Bạn có thể thay đổi INDEX($B$2:$B$10...) thành INDEX($C$2:$C$10...) để lấy giá trị Giá.

2.3. Giới hạn và lưu ý

  • Độ phức tạp: Công thức phức tạp, khó bảo trì nếu bảng dữ liệu lớn.
  • Hiệu năng: Khi dữ liệu lớn (thousands rows), công thức có thể làm chậm Excel.
  • Công thức mảng: Cần giữ công thức mảng đúng cách, tránh lỗi khi chỉnh sửa.

3. Hàm FILTER (Excel 365/2026) – Giải pháp mảng đơn giản

3.1. Cú pháp

=FILTER(array, include, if_empty)
  • array: vùng dữ liệu cần lọc.
  • include: điều kiện lọc (có thể là mảng logic).
  • if_empty: giá trị trả về nếu không có kết quả.

3.2. Ví dụ thực tế

Để lấy tất cả tên sản phẩm có mã “001”:

=FILTER($B$2:$B$10, $A$2:$A$10=E2, "Không có dữ liệu")
  • B2:B10 là cột Raymond (Tên).
  • A2:A10=E2 tạo mảng logic: TRUE cho các hàng có mã “001”.
  • Khi không có dữ liệu, hàm trả về “Không có dữ liệu modne”.

3.3. Lợi ích

  • Rõ ràng, dễ đọc: Công thức ngắn gọnիվ.
  • Tự động mở rộng: Nếu có thêm hàng dữ liệu, FILTER sẽ tựsecondary.
  • Dễ dàng kết hợp: Có thể dùng trong hàm TEXTJOIN để ghép thành chuỗi.

3.4. Hạn chế

  • Cần Excel 365/2026 trở lên: Hàm FILTER chưa có trong các phiên bản cũ (Excel 2026, 2026).
  • Hiệu năng: Đối với rất nhiều dữ liệu, công thức có thể chậm.

4. Kết hợp FILTER + TEXTJOIN để trả về chuỗi giá trị

Giả sử bạn muốn trả về một chuỗi tên sản phẩm cóscribe mã “001”, ngăn cách bằng dấu phẩy:

=TEXTJOIN(", ", TRUE, FILTER($B$2:$B$10, $A$2:$A$10=E2, ""))
  • TEXTJOIN(delimiter, ignore_empty, text1, text2, ...)
  • TRUE để bỏ qua các ô trống (nếu có).
  • FILTER trả về mảng giáهة, TEXTJOIN ghép chúng.

Nếu bạn muốn trả về giá trị Giá:

=TEXTJOIN(", ", TRUE, FILTER($C$2:$C$10, $A$2:$A$10=E2, ""))

5. Power Query – Sử dụng công cụ truy vấn mạnh mẽ

5.1. Mở Power Query

Hàm Vlookup Để Trả Lại Nhiều Giá Trị Trong Excel
Hàm Vlookup Để Trả Lại Nhiều Giá Trị Trong Excel
  • Chọn israel Data > Get & Transform Data > From Table/Range.
  • Chuyển vùng dữ liệu thành bảng (nếu chưa có).

5.2. Chèn câu lệnh truy vấn

Trong Power Query Editor, bạn có thể tạo một Custom Column với M code:

= Table.SelectRows(#"Previous Step", each Mã = "001")Tên

Hoặc để lấy nhiều giá trị:

= Table.Group(#"Previous Step", {"Mã"}, {"Tất cả Tên", each Text.Combine(Tên, ", "), type text})
  • Table.Group nhóm theo cột Mã và tạo một cột mới pep chứa danh sách tên liên kết bằng dấu phẩy.

5.3. Lưu và Truy xuất

  • Nhấn Close & Load để trả về bảng kết quả trong Excel.
  • Power Query tự động refresh khi dữ liệu nguồn thay đổi.

5.4. Lợi ích

  • Xử lý dữ liệu lớn: Power Query mạnh mẽ, ít bị chậm.
  • Tự động refresh: Cập nhật khi dữ liệu nguồn thay đổi.
  • Không cần công thức phức tạp: Bạn chỉ thao tác giao diện.

5.5. Hạn chế

  • Đòi hỏi kiến thức M: Mặc dù giao diện kéo thả, nhưng một số thao tác cần viết M code.
  • Không linh hoạt trong Excel: Kết quả trả về là bảng, không trực tiếp trong ô công thức.

6. VBA Macro – Lấy nhiều giá trị tự động

6.1. Mẫu macro đơn giản

Sub GetMultipleValues() Dim lookupVal As Variant Dim wsSrc As Worksheet, wsDst As Worksheet Dim rngSrc As Range Dim arr As Variant Dim i As Long, j As Long Set wsSrc = ThisWorkbook.Sheets(" транспорт") Set wsDst = ThisWorkbook.Sheets("Result") lookupVal = wsDst.Range("A2").Value ' …..= mã cần tìm Set rngSrc = wsSrc.Range("A2:C100") ' thay đổi phạm vi arr = rngSrc.Value j = 1 For i = 1 To UBound(arr, 1) If arr(i, 1) = lookupVal Then wsDst.Cells(j + 1, 2).Value = arr(i, 2) ' tên wsDst.Cells(j + 1, 3).Value = arr(i, 3) ' giá j = j + 1 End If Next i
End Sub
  • Macro này đọc toàn bộ dữ liệu vào mảng, rồi lọc theo mã tìm kiếm và ghi kết quả vào sheet Result. Bạn có thể mở rộng để ghép kết quả thành chuỗi, hoặc lưu vào một ô duy nhất.

6.2. Lợi ích

  • Tự động hóa: Bạn chỉ chạy macro một lần.
  • Xử lý dữ liệu lớn: VBA có thể đọc nhanh hơn công thức.

6.3. Hạn chế

  • Cần viết mã: Không phù hợp với người không quen VBA.
  • Không tự động refresh: Bạn phải chạy lại macro khi dữ liệu thay đổi.

7. So sánh các phương pháp

Phương phápĐộ phức tạpHiệu năngĐộ linh độngỨng dụng thích hợp
VLOOKUP + INDEX + SMALLTrung bìnhThấp (đối với dữ liệu lớn)Trung bìnhKhi không có Excel 365
FILTER + TEXTJOINDễ đọcTrung bìnhCaoKhi có Excel 365/2026
Power QueryInvisCaoRất caoKhi cần làm sạch, tổng hợp dữ liệu
VBA MacroCaoCaoRất caoKhi cần tự động hóa, xử lý lớn

8. Hướng dẫn thực hành: Bước từng bước

Bước 1: Chuẩn bị dữ liệu

A (Mã)B (Tên)C (Giá)
001Áo thun200,000
002Quần short150,000
001Áo len250,000
003Giày thể thao500,000
001Áo khoác350,000
004Mũ lưỡi trai100,000
001Quần jeans400,000
  • Sheet: Data.

Bước 2: Tạo ô truy vấn

  • Tạo sheet Result.
  • Tại ô A2, nhập mã cần tìm (ví dụ: 001).

Bước 3: Áp dụng công thức

3.1. Sử dụng FILTER + TEXTJOIN

  • Ở ô B2:
=TEXTJOIN(", ", TRUE, FILTER(Data!$B$2:$B$8, Data!$A$2:$A$8=$A$2, "Không có dữ liệu"))
  • бутлах: C2:
=TEXTJOIN(", ", TRUE, FILTER(Data!$C$2:$C$8, Data!$A$2:$A$8=$A$2, ""))

3.2. Sử dụng INDEX + SMALL

  • Ở ô B2:
=IFERROR(INDEX(Data!$B$2:$B$8, SMALL(IF(Data!$A$2:$A$8=$A$2, ROW(Data!$A$2:$A$8)-ROW(Data!$A$2)+1), ROW(1:1))), "")

Nhấn Ctrl+Shift+Enter nếu cần, sau đó sao chép xuống B3, B4, … cho tới khi kết quả trống.

  • Ở ô C2:
=IFERROR(INDEX(Data!$C$2:$C$8, SMALL(IF(Data!$A$2:$A$8=$A$2, ROW(Data!$A$2:$A$8)-ROW(Data!$A$2)+1), ROW(1:1))), "")

Bước 4: Kiểm tra kết quả

  • Nếu nhập 001 ở A2, bạn sẽ thấy danh sách tên và giá trị tương ứng, hoặc chuỗi ghép.

9. Lời khuyên khi áp dụng

  1. Xác định phiên bản Excel: Nếu bạn đang dùng phiên bản cũ (Excel 2026), tránh dùng FILTER. Thay vào đó, dùng INDEX + SMALL hoặc Power Query.
  2. Đặt tên vùng: Thay vì dùng mảng ô, đặt tên vùng dữ liệu (DataRange) giúp công thức dễ đọc và bảo trì.
  3. Sử dụng hàm LET (Excel 365) để giảm tính toán lặp:
    excel =LET( rng, Data!$A$2:$C$8, col, INDEX(rng, ,2), idx, IF(INDEX(rng, ,1)=E2, ROW(rng)-ROW(INDEX(rng,1,1))+1), TEXTJOIN(", ", TRUE, FILTER(col, idx)) )
  4. Tối ưu hiệu năng: Giới hạn phạm vi dữ liệu (không phải toàn bộ cột) để tránh tính toán không cần thiết.
  5. Tự động refresh: Nếu sử dụng Power Query, chọn Data > Refresh All hoặc cài đặt refresh tự động khi mở workbook.

10. Kết luận

Việc “trả lại nhiều giá trị” trong Excel không còn là một thách thức khi bạn biết lựa chọn công cụ và phương pháp phù hợp. Dưới đây là tóm tắt nhanh:

  • VLOOKUP truyền thống: Chỉ trả về một giá trị – dùng khi dữ liệu duy nhất.
  • INDEX + ആശ: Phù hợp cho Excel cũ, nhưng công thức phức tạp.
  • FILTER + TEXTJOIN: Giải pháp mảng đơn giản, mạnh mẽ trong Excel 365/2026.
  • Power Query: Tối ưu cho dữ liệu lớn, tự động refresh.
  • VBA: Tự động hoá hoàn toàn, nhưng đòi hỏi viết mã.

Bạn hãy chọn phương pháp phù hợp với cấu trúc dữ liệu, phiên bản Excel tím và yêu cầu công việc để tối ưu quy trình làm việc và giảm thiểu sai sót. Hãy thử áp dụng trong dự án hiện tại và cảm nhận sự khác biệt trong hiệu suất làm việc!

⚠️
LƯU Ý QUAN TRỌNG: Miễn trừ trách nhiệm: Mặc dù chúng tôi luôn nỗ lực để đảm bảo tính chính xác và cập nhật của thông tin, nhưng các quy định về giáo dục và tuyển sinh có thể thay đổi theo thời gian. BigSchool không chịu trách nhiệm về bất kỳ sai sót nào hoặc kết quả phát sinh từ việc sử dụng thông tin trên trang này. Độc giả nên liên hệ trực tiếp với nhà trường hoặc cơ quan chức năng để có thông tin mới nhất. Ngoài ra, BigSchool tuyệt đối không bán sản phẩm, khóa học hay cung cấp dịch vụ được nhắc đến trong bài.

Viết một bình luận