Note: The other languages of the website are Google-translated. Back to English

Làm cách nào để vlookup và trả về nhiều giá trị mà không có bản sao trong Excel? 

Đôi khi, bạn có thể muốn vlookup và trả về nhiều giá trị phù hợp vào một ô duy nhất cùng một lúc. Nhưng, nếu có một số giá trị lặp lại được điền vào các ô được trả về, làm thế nào bạn có thể bỏ qua các bản sao và chỉ giữ các giá trị duy nhất khi trả về tất cả các giá trị phù hợp như ảnh chụp màn hình sau được hiển thị trong Excel?

doc trả về nhiều giá trị duy nhất 1

Vlookup và trả về nhiều giá trị phù hợp mà không trùng lặp bằng cách sử dụng Hàm do người dùng xác định


Vlookup và trả về nhiều giá trị phù hợp mà không trùng lặp bằng cách sử dụng Hàm do người dùng xác định

Mã VBA sau đây có thể giúp bạn trả về nhiều giá trị phù hợp mà không bị trùng lặp, vui lòng thực hiện như sau:

1. Giữ Alt + F11 phím để mở Microsoft Visual Basic cho các ứng dụng cửa sổ.

2. Nhấp chuột Chèn > Mô-đunvà dán mã sau vào Mô-đun Cửa sổ.

Mã VBA: Vlookup và trả về nhiều giá trị phù hợp duy nhất:

Function MultipleLookupNoRept(Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer)
    Dim xDic As New Dictionary
    Dim xRows As Long
    Dim xStr As String
    Dim i As Long
    On Error Resume Next
    xRows = LookupRange.Rows.Count
    For i = 1 To xRows
        If LookupRange.Columns(1).Cells(i).Value = Lookupvalue Then
            xDic.Add LookupRange.Columns(ColumnNumber).Cells(i).Value, ""
        End If
    Next
    xStr = ""
    MultipleLookupNoRept = xStr
    If xDic.Count > 0 Then
        For i = 0 To xDic.Count - 1
            xStr = xStr & xDic.Keys(i) & ","
        Next
        MultipleLookupNoRept = Left(xStr, Len(xStr) - 1)
    End If
End Function

3. Sau khi chèn mã, hãy nhấp vào CÔNG CỤ > dự án trong mở Microsoft Visual Basic cho các ứng dụng cửa sổ, và sau đó, trong cửa sổ bật ra Tài liệu tham khảo - VBAProject hộp thoại, kiểm tra Thời gian chạy tập lệnh của Microsoft tùy chọn trong Tài liệu tham khảo có sẵn hộp danh sách, xem ảnh chụp màn hình:

doc trả về nhiều giá trị duy nhất 2

4. Sau đó nhấn vào OK để đóng hộp thoại, lưu và đóng cửa sổ mã, quay lại trang tính và nhập công thức này: =MultipleLookupNoRept(E2,A2:C17,3) vào một ô trống mà bạn muốn xuất kết quả, nhấn đăng ký hạng mục thi phím để nhận được kết quả chính xác như bạn cần. Xem ảnh chụp màn hình:

doc trả về nhiều giá trị duy nhất 3

Chú thích: Trong công thức trên, E2 là tiêu chí bạn muốn vlookup, A2: C17 là phạm vi dữ liệu mà bạn muốn sử dụng, số 3 là số cột chứa các giá trị trả về.


Các công cụ năng suất văn phòng tốt nhất

Kutools cho Excel giải quyết hầu hết các vấn đề của bạn và tăng 80% năng suất của bạn

  • Tái sử dụng: Chèn nhanh công thức phức tạp, biểu đồ và bất cứ thứ gì bạn đã sử dụng trước đây; Mã hóa ô với mật khẩu; Tạo danh sách gửi thư và gửi email ...
  • Thanh siêu công thức (dễ dàng chỉnh sửa nhiều dòng văn bản và công thức); Bố cục đọc (dễ dàng đọc và chỉnh sửa số lượng ô lớn); Dán vào Dải ô đã Lọchữu ích. Cảm ơn !
  • Hợp nhất các ô / hàng / cột mà không làm mất dữ liệu; Nội dung phân chia ô; Kết hợp các hàng / cột trùng lặp... Ngăn chặn các ô trùng lặp; So sánh các dãyhữu ích. Cảm ơn !
  • Chọn trùng lặp hoặc duy nhất Hàng; Chọn hàng trống (tất cả các ô đều trống); Tìm siêu và Tìm mờ trong Nhiều Sổ làm việc; Chọn ngẫu nhiên ...
  • Bản sao chính xác Nhiều ô mà không thay đổi tham chiếu công thức; Tự động tạo tài liệu tham khảo sang Nhiều Trang tính; Chèn Bullets, Hộp kiểm và hơn thế nữa ...
  • Trích xuất văn bản, Thêm Văn bản, Xóa theo Vị trí, Xóa không gian; Tạo và In Tổng số phân trang; Chuyển đổi giữa nội dung ô và nhận xéthữu ích. Cảm ơn !
  • Siêu lọc (lưu và áp dụng các lược đồ lọc cho các trang tính khác); Sắp xếp nâng cao theo tháng / tuần / ngày, tần suất và hơn thế nữa; Bộ lọc đặc biệt bằng cách in đậm, in nghiêng ...
  • Kết hợp Workbook và WorkSheets; Hợp nhất các bảng dựa trên các cột chính; Chia dữ liệu thành nhiều trang tính; Chuyển đổi hàng loạt xls, xlsx và PDFhữu ích. Cảm ơn !
  • Hơn 300 tính năng mạnh mẽ. Hỗ trợ Office / Excel 2007-2021 và 365. Hỗ trợ tất cả các ngôn ngữ. Dễ dàng triển khai trong doanh nghiệp hoặc tổ chức của bạn. Đầy đủ tính năng Dùng thử miễn phí 30 ngày. Bảo đảm hoàn lại tiền trong 60 ngày.
tab kte 201905

Tab Office mang lại giao diện Tab cho Office và giúp công việc của bạn trở nên dễ dàng hơn nhiều

  • Cho phép chỉnh sửa và đọc theo thẻ trong Word, Excel, PowerPoint, Publisher, Access, Visio và Project.
  • Mở và tạo nhiều tài liệu trong các tab mới của cùng một cửa sổ, thay vì trong các cửa sổ mới.
  • Tăng 50% năng suất của bạn và giảm hàng trăm cú nhấp chuột cho bạn mỗi ngày!
officetab dưới cùng
Nhận xét (13)
Chưa có xếp hạng. Hãy là người đầu tiên xếp hạng!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Điều gì sẽ xảy ra nếu tôi muốn tạo danh sách trong bảng từ danh sách này thay vì tất cả các kết quả trong một ô?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Tom,
Nếu bạn muốn trích xuất các giá trị duy nhất trong danh sách ô thay vì một ô, công thức sau có thể giúp bạn:

=LOOKUP(2, 1/((COUNTIF($E$1:E1, $B$2:$B$12)=0)*($D$2=$A$2:$A$12)), $B$2:$B$12)

Hãy thử nó.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Skyyang,

Cảm ơn bạn rất nhiều cho công thức này.
Điều này làm việc cho tôi. Tuy nhiên, mất nhiều thời gian để xử lý từ một tập hợp dữ liệu lớn.
Chúng ta có thể sửa đổi công thức này để hoạt động nhanh hơn một chút không?
Cảm ơn lần nữa
rasike
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào skyyang, nếu bạn muốn kết quả là một cột thì sao?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Có cách nào để thêm khoảng trắng vào giữa nhiều giá trị được truy xuất trong kết quả mà không giới thiệu dấu phẩy ở cuối danh sách không? Ví dụ: kết quả của bạn ở trên sẽ hiển thị là: "Emily, James, Daisy, Gary" thay vì như thế này: "Emily, James, Daisy, Gary"

Tôi đã cố chỉnh sửa phần này của mã VBA: xStr = xStr & xDic.Keys (I) & "," thành sau: xStr = xStr & xDic.Keys (I) & ","

Điều đó đã thêm khoảng cách giữa các giá trị, nhưng nó cũng thêm dấu phẩy sau giá trị cuối cùng. "Emily, James, Daisy, Gary,"

Có cách nào để làm cho nó hoạt động với khoảng trắng nhưng không có thêm dấu phẩy sau giá trị cuối cùng không?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, Demetre,
Sử dụng khoảng trắng để phân tách các giá trị, bạn chỉ cần thay đổi mã vba:
từ xStr = xStr & xDic.Keys (i) & "," thành sau: xStr = xStr & xDic.Keys (i) & ""

Hãy thử nó.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
xStr = xStr & xDic.Keys (I) & "," là: xStr = xStr & xDic.Keys (I) & ","

Có cách nào để thay thế "," bằng ALT + ENTER trong ô để kết quả sẽ nằm trong cùng một ô nhưng trên các dòng khác nhau không? Tôi có cần giới thiệu mô-đun VBA bổ sung cho điều đó và kết hợp chúng không?

Ngoài ra, mã này khá chậm khi lặp qua các bảng lớn. Bất cứ ai biết bất kỳ giải pháp nhanh hơn?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, Imre,
Để phân tách các giá trị kết quả bằng các phím Alt + Enter, vui lòng áp dụng Hàm do Người dùng Xác định sau:

Hàm MultipleLookupNoRept (Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer)
Dim xDic Như Từ Điển Mới
Dim xRows As Long
Làm mờ xStr dưới dạng chuỗi
Dim i As Long
On Error Resume Next
xRows = LookupRange.Rows.Count
Đối với i = 1 Đến xRows
If LookupRange.Columns (1) .Cells (i) .Value = Lookupvalue Thì
xDic.Add LookupRange.Columns (ColumnNumber) .Cells (i) .Value, ""
Cuối Nếu
Sau
xStr = ""
MultipleLookupNoRept = xStr
Nếu xDic.Count> 0 Thì
Đối với i = 0 Đến xDic.Count - 1
xStr = xStr & xDic.Keys (i) & Chr (10) + Chr (13)
Sau
MultipleLookupNoRept = Left (xStr, Len (xStr) - 1)
Cuối Nếu
Gỡ lỗi.Print xStr
Cuối Chức năng

Và sau đó thực hiện với các bước trên trong bài viết này, cuối cùng, sau khi nhập công thức, bạn nên nhấp vào Wrap Text trong tab Home.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Hi

Tôi muốn tạo danh sách trong bảng từ danh sách này thay vì tất cả các kết quả trong một ô. Vì vậy, tôi đã sử dụng một công thức tương tự bên dưới (những gì bạn đã đề xuất)

=LOOKUP(2, 1/((COUNTIF($E$1:E1, $B$2:$B$12)=0)*($D$2=$A$2:$A$12)), $B$2:$B$12)

Tuy nhiên, quá trình này mất nhiều thời gian để xử lý từ một tập hợp dữ liệu lớn.
Có phương pháp nào thay thế để xử lý việc này nhanh hơn không?
Cảm ơn lần nữa
rasike
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào,
trong khi thời gian của giá trị lô multivlooks thì bảng tính của tôi bị treo. có cách nào khác để multivlookupwithoutrepeation không ????

và tôi cũng đã sử dụng trên máy tính để bàn mới cũng chỉ bị treo ...

giá trị dữ liệu của tôi là khoảng 10,000 hàng
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, tôi đã làm như bạn đã nói và điều đó thật tuyệt nhưng nó vẫn không giải quyết được một vấn đề của tôi, điều gì sẽ xảy ra khi giá trị duy nhất của bạn trong mỗi tháng? = MultipleLookupNoRept (E2, A2: C17,3), tôi cố gắng thực hiện E2 & 1 cho tháng XNUMX nhưng nó không hoạt động
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, Jame,
Bạn có thể cung cấp sự cố của mình dưới dạng ảnh chụp màn hình ở đây để tôi có thể hiểu yêu cầu của bạn không?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Điều đó thật tuyệt! Làm cách nào để điều chỉnh điều này để không thêm giá trị null vào từ điển? Tôi đã thử thêm phần in đậm bên dưới, nhưng chuỗi cuối cùng vẫn trả về với các phiên bản "".


xRows = LookupRange.Rows.Count
Đối với i = 1 Đến xRows
Nếu LookupRange.Columns (1) .Cells (i) .Value = Lookupvalue And Not IsEmpty (LookupRange.Columns (1) .Cells (i) .Value) Thì
xDic.Add LookupRange.Columns (ColumnNumber) .Cells (i) .Value, ""
Cuối Nếu
Sau

Cảm ơn,
Không có bình luận nào được đăng ở đây
Để lại ý kiến ​​của bạn
Đăng với tư cách khách
×
Đánh giá bài viết này:
0   Nhân vật
Các vị trí được đề xuất

Kết nối với chúng tôi

Bản quyền © 2009 - www.extendoffice.com. | Đã đăng ký Bản quyền. cung cấp bởi ExtendOffice. | BẢN ĐỒ CHI NHÁNH
Microsoft và logo Office là các nhãn hiệu hoặc nhãn hiệu đã đăng ký của Microsoft Corporation tại Hoa Kỳ và / hoặc các quốc gia khác.
Được bảo vệ bởi Sectigo SSL