Nhờ giúp đỡ hàm Vlookup nhiều giá trị có lọc trùng

Liên hệ QC

TgiaiDungLe

Thành viên chính thức
Tham gia
3/4/19
Bài viết
52
Được thích
9
Hiện tại, qua tìm hiểu trên mạng mình có tìm được đoạn code VBA để Vlookup nhiều giá trị như sau :
Function SingleCellExtract(LookupValue As String, LookupRange As Range, ColumnNumber As Integer, Char As String)
'Updateby20150824
Dim I As Long
Dim xRet As String
For I = 1 To LookupRange.Columns(1).Cells.Count
If LookupRange.Cells(I, 1) = LookupValue Then
If xRet = "" Then
xRet = LookupRange.Cells(I, ColumnNumber) & Char
Else
xRet = xRet & "" & LookupRange.Cells(I, ColumnNumber) & Char
End If
End If
Next
SingleCellExtract = Left(xRet, Len(xRet) - 1)
End Function
Để sử dụng hàm SingleCellExtract thì bên dưới Excel sử dụng : = SingleCellExtract (D2, A2: B15,2, ",") vào ô cần Vlookup nhiều giá trị
Sau đó, tại ô Vlookup nhiều giá trị sẽ xuất hiện rất nhiều các giá trị tương tự như :
3201030166,3201030166,3201030166,3201030166,3201030166,3201030166,3201030166,3201030166,3201030166,3201031861,3201031861,3201031861,3201031861,3201031861,3201031861,3201031861,3201031861,3201031861,3201031861

Tuy nhiên, vấn đề mình đang gặp phải là muốn lọc trùng các giá trị giống nhau (bỏ đi các dãy số giống nhau và chỉ giữ lại 1 giá trị). Và thay vì kết quả như ô bên trên thì KQ mình muốn sẽ là :
3201030166, 3201031861

Rất mong giúp đỡ mình để cải tiến đoạn code VBA này ạ !
Minh xin chân thành cảm ơn ạ.
 
Lần chỉnh sửa cuối:
Hiện tại, qua tìm hiểu trên mạng mình có tìm được đoạn code VBA để Vlookup nhiều giá trị như sau :
Function SingleCellExtract(LookupValue As String, LookupRange As Range, ColumnNumber As Integer, Char As String)
'Updateby20150824
Dim I As Long
Dim xRet As String
For I = 1 To LookupRange.Columns(1).Cells.Count
If LookupRange.Cells(I, 1) = LookupValue Then
If xRet = "" Then
xRet = LookupRange.Cells(I, ColumnNumber) & Char
Else
xRet = xRet & "" & LookupRange.Cells(I, ColumnNumber) & Char
End If
End If
Next
SingleCellExtract = Left(xRet, Len(xRet) - 1)
End Function
Để sử dụng hàm SingleCellExtract thì bên dưới Excel sử dụng : = SingleCellExtract (D2, A2: B15,2, ",") vào ô cần Vlookup nhiều giá trị
Sau đó, tại ô Vlookup nhiều giá trị sẽ xuất hiện rất nhiều các giá trị tương tự như :
3201030166,3201030166,3201030166,3201030166,3201030166,3201030166,3201030166,3201030166,3201030166,3201031861,3201031861,3201031861,3201031861,3201031861,3201031861,3201031861,3201031861,3201031861,3201031861

Tuy nhiên, vấn đề mình đang gặp phải là muốn lọc trùng các giá trị giống nhau (bỏ đi các dãy số giống nhau và chỉ giữ lại 1 giá trị). Và thay vì kết quả như ô bên trên thì KQ mình muốn sẽ là :
3201030166, 3201031861

Rất mong cao nhân giúp đỡ mình để cải tiến đoạn code VBA này ạ !
Minh xin chân thành cảm ơn ạ.
Bạn up cái file mẫu đó lên đây để anh em dễ dàng Test hàm, chứ ngồi viết code xong lại phải tạo dữ liệu để test thì lâu quá.
 
Upvote 0
Bạn up cái file mẫu đó lên đây để anh em dễ dàng Test hàm, chứ ngồi viết code xong lại phải tạo dữ liệu để test thì lâu quá.
Đây bạn ơi, xin lỗi mình quên đính kèm theo file :p
Thực sự mình lọc trùng theo kiểu "tay" và "truyền thống" mất rất nhiều thời gian nên hy vọng bạn giúp mình :((
 

File đính kèm

  • Examples (1).xlsx
    61.3 KB · Đọc: 7
Upvote 0

File đính kèm

  • Examples (1).xlsx
    61.3 KB · Đọc: 7
Lần chỉnh sửa cuối:
Upvote 0
Sao mà bây giờ thiên hạ hay dùng từ "cao nhơn" không biết ngượng miệng. Hồi xưa, từ này chỉ dùng để nịnh bợ, và vì có nghĩa nịnh bợ nên cũng được dùng để châm biếm.

Thực sự nếu hàm chạy tốt rồi thì chỉ cần viết thêm một cái hàm lọc ra:

Function LocTrungSCE(LookupValue As String, LookupRange As Range, ColumnNumber As Integer, Char As String)
' lọc trùng kết quả của hàm SingleCellExtract
Dim a
Dim i As Integer, i2 As Integer
a = Split(SingleCellExtract(LookupValue, LookupRange, ColumnNumber, Char), ",")
For i = 0 to UBound(a)
For i2 = 0 to i-1
If a(i) = a(i2) Then ' có rồi
a(i) = ""
Exit For
End If
Next i2
Next i
LocTrungSCE = Replace(Application.Trim(Join(a, " ")), " ", ",")
End Function

Bình thường thì hàm có từ 3 parameters trở lên thì tôi chú thích. Nhưng cái đề bài này dỏm, không xứng đáng chú thích.

Đăng xong mới thấy thớt còn là dân tây bồi, sờ-hát-i-tê
 
Upvote 0
Sao mà bây giờ thiên hạ hay dùng từ "cao nhơn" không biết ngượng miệng. Hồi xưa, từ này chỉ dùng để nịnh bợ, và vì có nghĩa nịnh bợ nên cũng được dùng để châm biếm.

Thực sự nếu hàm chạy tốt rồi thì chỉ cần viết thêm một cái hàm lọc ra:

Function LocTrungSCE(LookupValue As String, LookupRange As Range, ColumnNumber As Integer, Char As String)
' lọc trùng kết quả của hàm SingleCellExtract
Dim a
Dim i As Integer, i2 As Integer
a = Split(SingleCellExtract(LookupValue, LookupRange, ColumnNumber, Char), ",")
For i = 0 to UBound(a)
For i2 = 0 to i-1
If a(i) = a(i2) Then ' có rồi
a(i) = ""
Exit For
End If
Next i2
Next i
LocTrungSCE = Replace(Application.Trim(Join(a, " ")), " ", ",")
End Function

Bình thường thì hàm có từ 3 parameters trở lên thì tôi chú thích. Nhưng cái đề bài này dỏm, không xứng đáng chú thích.

Đăng xong mới thấy thớt còn là dân tây bồi, sờ-hát-i-tê
Nhớ có bài bạn dùng Replace() loại trùng rất hay
 
Upvote 0
Web KT
Back
Top Bottom