Dò tìm lần lượt trên nhiều cột

Liên hệ QC
Tham gia
14/9/12
Bài viết
312
Được thích
68
Nghề nghiệp
VT
Xin chào tất cả các a/c GPE
Em có vấn đề này muốn hỏi:
Em có 1 bảng, em muốn dò tìm lần lượt trên từng cột kiểu như Vlookup hoặc Lookup: nếu thấy - thì lấy giá trị, nếu chưa thấy - dò tiếp trên cột 2, nếu chưa thấy - dò tiếp trên cột 3, nếu vẫn không thấy trả về tập rỗng.
a/c nào rảnh rỗi chỉ giúp em. Xin cảm ơn các a/c.
 

File đính kèm

Lần chỉnh sửa cuối:
Cách 1: Dùng vòng lặp tìm kiếm
Cách 2: Mô phỏng lại lệnh Find ---> Bấm vào đây
Còn các cách khác nữa thì chờ các cao thủ đến viện trợ --=0
 
Thử đoạn sau xem sao:
PHP:
Sub khach_hang()
Dim lienhe(), tenKH(), SDT(), t&, i&, j&
lienhe = Sheet2.Range("D3:F20")
tenKH = Sheet2.Range("B3:B20")
SDT = Sheet4.Range("G3:G20")
For t = 1 To UBound(SDT)
    For i = 1 To UBound(lienhe, 2)
        For j = 1 To UBound(lienhe, 1)
            If SDT(t, 1) = lienhe(j, i) Then
                Sheet4.Range("D3").Offset(t - 1, 0) = tenKH(j, 1)
            End If
        Next j
    Next i
Next t
End Sub
 
Thêm hàm tự tạo:
PHP:
Function tenKH(sdt As Range, solienhe As Range, danhsach As Range) As String
Dim lienhe(), ten(), i&, j&
lienhe = solienhe
ten = danhsach
For i = 1 To UBound(lienhe, 2)
        For j = 1 To UBound(lienhe, 1)
            If sdt = lienhe(j, i) Then
                tenKH = ten(j, 1)
                Exit Function
            End If
        Next j
Next i
End Function
Công thức bên bảng tính:
PHP:
D3=tenKH(G3,Sheet2!$D$3:$F$20,Sheet2!$B$3:$B$20)

p/s:
Sau khi chạy thử cả 2 trường hợp thấy:
1. Một (01) số điện thoại xuất hiện nhiều hơn 1 lần với khách hàng khác nhau.
2. Kết quả đưa ra ở sheet4 không đúng với yêu cầu đã nêu: Tìm lần lượt từ cột D-E-F ở sheet2, nếu thấy thì lấy tên khách hàng tương ứng và DỪNG LẠI. Bạn xem lại STT 14,15,17,18 ở sheet4?
 

File đính kèm

Xin chào tất cả các a/c GPE
Em có vấn đề này muốn hỏi:
Em có 1 bảng, em muốn dò tìm lần lượt trên từng cột kiểu Vlookup hoặc Lookup: nếu thấy - thì lấy giá trị, nếu chưa thấy - dò tiếp trên cột 2, nếu chưa thấy - dò tiếp trên cột 3, nếu vẫn không thấy trả về tập rỗng.
a/c nào rảnh rỗi chỉ giúp em. Xin cảm ơn các a/c.

tôi thấy trong file ghi sao tôi làm vậy , đúng sai không cần biết
Mã:
Public Sub hello()
Dim arr, Dic As Object, dArr, r As Long, c As Byte
arr = Sheet2.Range(Sheet2.[B3], Sheet2.[B50000].End(xlUp)).Resize(, 5).Value
Set Dic = CreateObject("scripting.dictionary")
With Sheet3
    For c = 3 To 5 Step 1
        For r = 1 To UBound(arr) Step 1
            If Len(arr(r, c)) > 0 Then
                If Not Dic.exists(arr(r, c) & "") Then Dic(arr(r, c) & "") = arr(r, 1)
            End If
        Next
    Next
    dArr = .Range("D3:D" & WorksheetFunction.Max(.[D50000].End(xlUp).Row + 1, 4)).Value
    .Range("G3").Resize(UBound(dArr) - 1).Value = dArr
    For r = 1 To UBound(dArr) - 1 Step 1
        If Dic.exists(dArr(r, 1) & "") Then dArr(r, 1) = Dic(dArr(r, 1) & "") Else dArr(r, 1) = ""
    Next
    .Range("D3").Resize(UBound(dArr) - 1).Value = dArr
End With
End Sub
 
Lần chỉnh sửa cuối:
1. Một (01) số điện thoại xuất hiện nhiều hơn 1 lần với khách hàng khác nhau.
2. Kết quả đưa ra ở sheet4 không đúng với yêu cầu đã nêu: Tìm lần lượt từ cột D-E-F ở sheet2, nếu thấy thì lấy tên khách hàng tương ứng và DỪNG LẠI. Bạn xem lại STT 14,15,17,18 ở sheet4?
Xin lỗi anh. Có chút sai.
Em đã phát hiện ra các ô sau bị trùng số là: D9,E4,E6,E7,F5,F10. Em đã xóa các ô này đi và để trống, thực tế cho phép các cột Số liên hệ 1, 2, 3 trong Sheet2 có thể có cột để trống, có thể có khách hàng số liên hệ 1= số liên hệ 2 hoặc bằng số liên hệ 3. tuy nhiên chỉ không được phép khách hàng 1 có số liên hệ trùng khách hàng khác. Lỗi này do nhập liệu chưa kiểm tra kỹ đã up, lần nữa xin lỗi anh.
Nhưng không hiểu sao vẫn bị vàng dòng đó anh ạ.
 
tôi thấy trong file ghi sao tôi làm vậy [/CODE]

Cảm ơn anh đã giúp. Em chạy thử và thấy như sau:
1/ Nếu bấm nút chạy code 1 lần thì dữ liệu cột D được chuyển về cột G (cái này đúng rồi), nhưng líu tay bấm nhầm cái nữa thì lại lặp lại như vậy (cái này em không muốn, em chỉ muốn chuyển 1 lần và kết thúc để giữ lại cột số liên hệ).
2/ Đồng thời khi bấm thông tin cột B của Sheet3 lại được Copy đến cột D Sheet4 (trong khi em muốn dò tìm trong Sheet2 và lấy giá trị dò được từ cột B Sheet2 điền vào cột D Sheet4.
Ở đây Sheet4 là Sheet làm kết quả VD để các anh xem, còn thực hiện trên Sheet3 tham chiếu về Sheet2.
Cảm ơn anh đã giúp đỡ.
 
Bạn tải file ở bài #5 về kiểm tra lại coi.
... không biết có phải do bạn chưa định dạng lại ở General?

Hình như anh hiểu chưa đúng ý em.
Em muốn Sheet3 là Sheet cần xử lý để có kết quả giống như Sheet4 chứ không phải xử lý trên Sheet4 anh ạ. Còn chuyển định dạng General không quan trọng lắm bỏ qua cũng được.
 
Cảm ơn anh đã giúp. Em chạy thử và thấy như sau:
1/ Nếu bấm nút chạy code 1 lần thì dữ liệu cột D được chuyển về cột G (cái này đúng rồi), nhưng líu tay bấm nhầm cái nữa thì lại lặp lại như vậy (cái này em không muốn, em chỉ muốn chuyển 1 lần và kết thúc để giữ lại cột số liên hệ).
2/ Đồng thời khi bấm thông tin cột B của Sheet3 lại được Copy đến cột D Sheet4 (trong khi em muốn dò tìm trong Sheet2 và lấy giá trị dò được từ cột B Sheet2 điền vào cột D Sheet4.
Ở đây Sheet4 là Sheet làm kết quả VD để các anh xem, còn thực hiện trên Sheet3 tham chiếu về Sheet2.
Cảm ơn anh đã giúp đỡ.

chuyện bạn bấm bao nhiêu lần là chuyện của bạn . 1 điều hiển nhiên là "cái gì không có trong hợp đồng thì không làm" . Bạn muốn khác hơn thì phải có nêu rõ ràng tôi mới biết chứ .
Tôi chả động gì tới sheet4 của bạn cả . Bạn dựa vào đâu nói tôi copy dữ liệu vào sheet4 của bạn ?
 
Giải thuật của dò tìm trên nhiều cột:
1. Đặt một named range cho bảng dò tìm
2. Đặt 3 biểu thức hàm Vlookup, mỗi hàm dò 1 cột. Trường hợp bảng này, trị cần lấy nằm bên trái trị dò cho nên hàm Index/Match dễ làm việc hơn.
3. Nối 3 biểu thức trên trên lại thành 1, bằng hàm IFERROR (hoặc ISNA, gì đó tuỳ trường hợp), hoặc
3.a. Dùng hàm choose để nối kết quả 3 biểu thức trên thành 1 mảng và dùng Lookup(9E99, choose({1, 2, 3, 4}, 0, biểu thức tím trên cột 1, biểu thức tím trên cột 2, biểu thức tím trên cột 3))
 
Giải thuật của dò tìm trên nhiều cột:
Dùng hàm choose để nối kết quả 3 biểu thức trên thành 1 mảng và dùng Lookup(9E99, choose({1, 2, 3, 4}, 0, biểu thức tím trên cột 1, biểu thức tím trên cột 2, biểu thức tím trên cột 3))

Cảm ơn anh đã hướng dẫn, em sẽ nghiên cứu theo hướng dẫn của anh. Chúc diễn đàn thêm 1 ngày vui vẻ.
 
Web KT

Bài viết mới nhất

Back
Top Bottom