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:
- Hiểu rõ giới hạn của VLOOKUP truyền thống.
- Sử dụng hàm
INDEX+SMALLđể lấy nhiều kết quả. - Áp dụng hàm
FILTER(Excel 365/2026 trở lên) cho việc trả về mảng nhiều giá trị. - Kết hợp hàm
TEXTJOIN(hoặcCONCAT/CONCATENATE) để kết hợp kết quả thành một chuỗi duy nhất. - Sử dụng Power Query để truy xuất và lọc dữ liệu.
- Tạo macro VBA đơn giản để tự động lấy nhiều giá trị.
- 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ế.
Có thể bạn quan tâm: Cách Kết Hợp 2 Cột Trong Excel Với Dấu Cách (space)
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ủatable_array.table_array: vùng dữ liệu cần tìm kiếm.col_index_num: số thứ tự cột trongtable_arraymà 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.
Có thể bạn quan tâm: Hướng Dẫn Chia Sẻ File Excel Với Nhiều Người Dùng
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 thun | 200,000 |
| 002 | Quần short | 150,000 |
| 001 | Áo len | 250,000 |
| 003 | Giày thể thao | 500,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))), "")
E2chứ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, …IFERRORtrả 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.
Có thể bạn quan tâm: Hiển Thị Nhiều File Excel Trên Thanh Taskbar Của Windows 10: Hướng Dẫn Chi Tiết Và Mẹo Thực Tiễn
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:B10là cột Raymond (Tên).A2:A10=E2tạo mảng logic:TRUEcho 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ó).FILTERtrả về mảng giáهة,TEXTJOINghé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

Có thể bạn quan tâm: Làm Thế Nào Để Tất Cả Các Cột Trong Excel Có Độ Rộng Cùng Nhau
- 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.Groupnhóm theo cộtMãvà tạo một cột mớipepchứ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ạp | Hiệu năng | Độ linh động | Ứng dụng thích hợp |
|---|---|---|---|---|
| VLOOKUP + INDEX + SMALL | Trung bình | Thấp (đối với dữ liệu lớn) | Trung bình | Khi không có Excel 365 |
| FILTER + TEXTJOIN | Dễ đọc | Trung bình | Cao | Khi có Excel 365/2026 |
| Power Query | Invis | Cao | Rất cao | Khi cần làm sạch, tổng hợp dữ liệu |
| VBA Macro | Cao | Cao | Rất cao | Khi 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 thun | 200,000 |
| 002 | Quần short | 150,000 |
| 001 | Áo len | 250,000 |
| 003 | Giày thể thao | 500,000 |
| 001 | Áo khoác | 350,000 |
| 004 | Mũ lưỡi trai | 100,000 |
| 001 | Quần jeans | 400,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
- 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.
- Đặ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ì. - 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)) ) - 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.
- Tự động refresh: Nếu sử dụng Power Query, chọn
Data>Refresh Allhoặ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!

Tiến sĩ Lê Thống Nhất sinh năm 1955 tại Nghệ An, là nhà giáo, nhà báo và doanh nhân trong lĩnh vực giáo dục. Ông từng giảng dạy Toán học tại Trường THPT Chuyên Phan Bội Châu và đảm nhiệm nhiều vai trò trong ngành giáo dục, từ viết sách, biên soạn tài liệu đến sáng lập các dự án hỗ trợ học tập trực tuyến.
Ông là người sáng lập BigSchool – nền tảng giáo dục trực tuyến kết nối giáo viên và học sinh cả nước. Ngoài ra, ông còn nổi tiếng với vai trò tác giả, diễn giả truyền cảm hứng và khách mời trên nhiều chương trình truyền hình, trong đó có “Ai là triệu phú” trên truyền hình VTV.
Trong suốt sự nghiệp, Tiến sĩ Lê Thống Nhất đã nhận nhiều giải thưởng giáo dục và được biết đến như một người luôn đổi mới, ứng dụng công nghệ vào dạy và học, góp phần lan tỏa tri thức và niềm say mê học tập cho thế hệ trẻ.
