Dùng VBA để tìm kiếm (Vlookup) trong nhiều sheet của 1 file

Liên hệ QC

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
934
Được thích
570
Như tiêu đề đã nêu, nhờ các anh chị viết code để file đính kèm có thể hoạt động với hàm tìm kiếm, sao cho nó sục sao hết các sheet để tìm và trả kết quả.
Mô tả chi tiết có trong file đính kèm
Chủ đề không mới, nhưng em không làm được. Rất mong được giúp đỡ
Em xin cảm ơn

Trân trọng
 

File đính kèm

  • DienVan1.xlsb
    543.4 KB · Đọc: 45
Như tiêu đề đã nêu, nhờ các anh chị viết code để file đính kèm có thể hoạt động với hàm tìm kiếm, sao cho nó sục sao hết các sheet để tìm và trả kết quả.
Mô tả chi tiết có trong file đính kèm
Chủ đề không mới, nhưng em không làm được. Rất mong được giúp đỡ
Em xin cảm ơn

Trân trọng
Lúc trước tôi có viết hàm MVlookUp dò tìm trên nhiều sheet
Mã:
Function MVlookUp(ByVal Find_Value, ByVal Range_Address As String, ColIndex As Long)
  Dim wks As Worksheet, rngFind As Range
  MVlookUp = CVErr(xlErrNA)
  For Each wks In ActiveWorkbook.Worksheets
    If UCase(wks.Name) <> UCase(Application.ThisCell.Parent.Name) Then
      Set rngFind = wks.Range(Range_Address).Resize(, 1).Find(Find_Value, , xlFormulas, xlWhole, , , False)
      If Not rngFind Is Nothing Then
        MVlookUp = rngFind(, ColIndex)
        Exit Function
      End If
    End If
  Next
End Function
Ví dụ áp dụng:
Mã:
=MVlookUp(A5,"F5:I1000",2)
nghĩa là lấy giá trị của cell A5 tìm trên tất cả các sheet (ngoại trừ sheet chứa công thức), trong vùng F5:I1000 và lấy kết quả ở cột thứ 2 về phía bên phải
Mã:
=MVlookUp(A6,"F5:I1000",-2)
nghĩa là lấy giá trị của cell A6 tìm trên tất cả các sheet (ngoại trừ sheet chứa công thức), trong vùng F5:I1000 và lấy kết quả ở cột thứ 3 về phía bên trái
Tức là hàm này tìm về phía trái hay phải đều được
----------------------------
Bạn xem thử có áp dụng được không
 
Lúc trước tôi có viết hàm MVlookUp dò tìm trên nhiều sheet
Mã:
Function MVlookUp(ByVal Find_Value, ByVal Range_Address As String, ColIndex As Long)
  Dim wks As Worksheet, rngFind As Range
  MVlookUp = CVErr(xlErrNA)
  For Each wks In ActiveWorkbook.Worksheets
    If UCase(wks.Name) <> UCase(Application.ThisCell.Parent.Name) Then
      Set rngFind = wks.Range(Range_Address).Resize(, 1).Find(Find_Value, , xlFormulas, xlWhole, , , False)
      If Not rngFind Is Nothing Then
        MVlookUp = rngFind(, ColIndex)
        Exit Function
      End If
    End If
  Next
End Function
Ví dụ áp dụng:
Mã:
=MVlookUp(A5,"F5:I1000",2)
nghĩa là lấy giá trị của cell A5 tìm trên tất cả các sheet (ngoại trừ sheet chứa công thức), trong vùng F5:I1000 và lấy kết quả ở cột thứ 2 về phía bên phải
Mã:
=MVlookUp(A6,"F5:I1000",-2)
nghĩa là lấy giá trị của cell A6 tìm trên tất cả các sheet (ngoại trừ sheet chứa công thức), trong vùng F5:I1000 và lấy kết quả ở cột thứ 3 về phía bên trái
Tức là hàm này tìm về phía trái hay phải đều được
----------------------------
Bạn xem thử có áp dụng được không
Cảm ơn bác. Code trên rất chạy rất tốt theo như hướng dẫn của bác.
Như em đã trình bày trong file đính kèm trước, dữ liệu của em chứa rất nhiều dòng và file em làm cho người khác sử dụng, chính vì thế em muốn chạy hoàn toàn bằng code VBA thay cho dùng hàm
Em đã thử vọc vạch như chẳng thành công

1534845016415.png
Vậy bác hướng dẫn thêm giúp em với nhé.
Em cảm ơn
 
Bài #3:
Hàm MVlookUp đặt ở module nào thì gọi Ten_module_do.MVlookUp
(Không phải là worksheetFunction).

Tham số thứ hai của hàm là String không phải Range.
 
Anh Ndu dòng sau em không hiểu lắm Mong anh chỉ dùm

CVErr(xlErrNA)

Em cảm ơn
 
Anh Ndu dòng sau em không hiểu lắm Mong anh chỉ dùm

CVErr(xlErrNA)

Em cảm ơn
Cái đó tương đương lỗi N/A đó mà. Ý tôi muốn khi không tìm thấy thì chủ động trả về lỗi do chính mình gán chứ không để code báo lỗi bậy bạ
 
Lúc trước tôi có viết hàm MVlookUp dò tìm trên nhiều sheet
Mã:
Function MVlookUp(ByVal Find_Value, ByVal Range_Address As String, ColIndex As Long)
  Dim wks As Worksheet, rngFind As Range
  MVlookUp = CVErr(xlErrNA)
  For Each wks In ActiveWorkbook.Worksheets
    If UCase(wks.Name) <> UCase(Application.ThisCell.Parent.Name) Then
      Set rngFind = wks.Range(Range_Address).Resize(, 1).Find(Find_Value, , xlFormulas, xlWhole, , , False)
      If Not rngFind Is Nothing Then
        MVlookUp = rngFind(, ColIndex)
        Exit Function
      End If
    End If
  Next
End Function
Ví dụ áp dụng:
Mã:
=MVlookUp(A5,"F5:I1000",2)
nghĩa là lấy giá trị của cell A5 tìm trên tất cả các sheet (ngoại trừ sheet chứa công thức), trong vùng F5:I1000 và lấy kết quả ở cột thứ 2 về phía bên phải
Mã:
=MVlookUp(A6,"F5:I1000",-2)
nghĩa là lấy giá trị của cell A6 tìm trên tất cả các sheet (ngoại trừ sheet chứa công thức), trong vùng F5:I1000 và lấy kết quả ở cột thứ 3 về phía bên trái
Tức là hàm này tìm về phía trái hay phải đều được
----------------------------
Bạn xem thử có áp dụng được không
Hàm này đã đến lúc phải sửa đổi, vì có quá nhiều điểm bất hợp lý. Từ tư tưởng cho tới cách viết code.
 
Web KT
Back
Top Bottom