Hàm tìm kiếm đa giá trị

Liên hệ QC

vanhuy889

Thành viên mới
Tham gia
14/11/13
Bài viết
28
Được thích
2
Chào các bác trong diễn đàn, em tìm được 1 code tìm kiếm kết quả đa giá trị nhưng em muốn chỉnh sửa tìm kiếm dựa vào 2 điều kiện, bác nào có thể giúp em chỉnh sửa lại code hoặc có code tương tự share cho em được không ạ, lập trình trong excel em mới bắt đầu tìm hiểu nên không thể tự chỉnh sửa được. Mong các bác giúp em.
Link video:
Liên kết: https://www.youtube.com/watch?v=ItIaMgyZOlg
 

File đính kèm

  • Hàm tìm kiếm đa giá trị.txt
    488 bytes · Đọc: 17
Chào các bác trong diễn đàn, em tìm được 1 code tìm kiếm kết quả đa giá trị nhưng em muốn chỉnh sửa tìm kiếm dựa vào 2 điều kiện, bác nào có thể giúp em chỉnh sửa lại code hoặc có code tương tự share cho em được không ạ, lập trình trong excel em mới bắt đầu tìm hiểu nên không thể tự chỉnh sửa được. Mong các bác giúp em.
Link video:
Liên kết: https://www.youtube.com/watch?v=ItIaMgyZOlg
"tìm kiếm dựa vào 2 điều kiện" cho ví dụ và kết quả vài trường hợp
 
Upvote 0

File đính kèm

  • VD (1).xlsm
    25.9 KB · Đọc: 20
Upvote 0
"tìm kiếm dựa vào 2 điều kiện" cho ví dụ và kết quả vài trường hợp
Em có 1 bảng thống kê theo dõi thanh toán cho thầu phụ, giờ em muốn tổng hợp lại dựa vào cột Nhà thầuSố HĐ, cấu trúc lệnh và kết quả trả về 1 mảng, bác có thể giúp em được không
 

File đính kèm

  • Sổ làm việc1.xlsx
    11.5 KB · Đọc: 9
Lần chỉnh sửa cuối:
Upvote 0
Em có 1 bảng thống kê theo dõi thanh toán cho thầu phụ, giờ em muốn tổng hợp lại dựa vào cột Nhà thầuSố HĐ, cấu trúc lệnh và kết quả trả về 1 mảng, bác có thể giúp em được không
Dùng hàm tự tạo
Mã:
Function LocMang(ByVal rng As Range, ParamArray crit()) As Variant
  Dim aRow(), Res(), sRow&, sCol&, i&, k&, j&, c&
  sRow = crit(0).Rows.Count: sCol = rng.Columns.Count
  If sRow <> rng.Rows.Count Then LocMang = "#REF!": Exit Function
  ReDim aRow(1 To sRow)
  For j = LBound(crit) To UBound(crit) Step 2
    If sRow <> crit(j).Rows.Count Then LocMang = "#REF!": Exit Function
  Next j
  For i = 1 To sRow
    For j = LBound(crit) To UBound(crit) Step 2
      If crit(j)(i, 1) <> crit(j + 1) Then Exit For
    Next j
    If j = UBound(crit) + 1 Then
      k = k + 1
      aRow(k) = i
    End If
  Next i
  If k Then
    ReDim Res(1 To k, 1 To rng.Columns.Count)
    For i = 1 To k
      For j = 1 To sCol
        Res(i, j) = rng(aRow(i), j)
      Next j
    Next i
    LocMang = Res
  End If
End Function
Xem vài cách hàm dùng trong file
 

File đính kèm

  • Sổ làm việc1.xlsm
    19.6 KB · Đọc: 11
Upvote 0
Dùng hàm tự tạo
Mã:
Function LocMang(ByVal rng As Range, ParamArray crit()) As Variant
  Dim aRow(), Res(), sRow&, sCol&, i&, k&, j&, c&
  sRow = crit(0).Rows.Count: sCol = rng.Columns.Count
  If sRow <> rng.Rows.Count Then LocMang = "#REF!": Exit Function
  ReDim aRow(1 To sRow)
  For j = LBound(crit) To UBound(crit) Step 2
    If sRow <> crit(j).Rows.Count Then LocMang = "#REF!": Exit Function
  Next j
  For i = 1 To sRow
    For j = LBound(crit) To UBound(crit) Step 2
      If crit(j)(i, 1) <> crit(j + 1) Then Exit For
    Next j
    If j = UBound(crit) + 1 Then
      k = k + 1
      aRow(k) = i
    End If
  Next i
  If k Then
    ReDim Res(1 To k, 1 To rng.Columns.Count)
    For i = 1 To k
      For j = 1 To sCol
        Res(i, j) = rng(aRow(i), j)
      Next j
    Next i
    LocMang = Res
  End If
End Function
Xem vài cách hàm dùng trong file
Cám ơn bác em làm được rồi, với lại cho em hỏi là muốn để cho các ô không có dữ liệu #N/A trống thì sửa code thế nào vậy.
1627110134729.png
 
Upvote 0
Upvote 0
Cám ơn bác em làm được rồi, với lại cho em hỏi là muốn để cho các ô không có dữ liệu #N/A trống thì sửa code thế nào vậy.
View attachment 262938
Chỉnh tí xíu
Mã:
Function LocMang(ByVal rng As Range, ParamArray crit()) As Variant
  Dim aRow(), Res(), sRow&, sCol&, i&, k&, j&, c&
  sRow = crit(0).Rows.Count: sCol = rng.Columns.Count
  If sRow <> rng.Rows.Count Then LocMang = "#REF!": Exit Function
  ReDim aRow(1 To sRow)
  For j = LBound(crit) To UBound(crit) Step 2
    If sRow <> crit(j).Rows.Count Then LocMang = "#REF!": Exit Function
  Next j
  For i = 1 To sRow
    For j = LBound(crit) To UBound(crit) Step 2
      If crit(j)(i, 1) <> crit(j + 1) Then Exit For
    Next j
    If j = UBound(crit) + 1 Then
      k = k + 1
      aRow(k) = i
    End If
  Next i
  If k Then
    ReDim Res(1 To sRow, 1 To rng.Columns.Count)
    For i = 1 To k
      For j = 1 To sCol
        Res(i, j) = rng(aRow(i), j)
      Next j
    Next i
    For i = k + 1 To sRow
      For j = 1 To sCol
        Res(i, j) = ""
      Next j
    Next i
    LocMang = Res
  End If
End Function
 
Upvote 0
Em có 1 bảng thống kê theo dõi thanh toán cho thầu phụ, giờ em muốn tổng hợp lại dựa vào cột Nhà thầuSố HĐ, cấu trúc lệnh và kết quả trả về 1 mảng, bác có thể giúp em được không
Thử File.
1/ Copy Nhà thầu vào B10 và Số HĐ vào C10 (hỗ tô màu xanh) của Sheet th rồi nhấn nút Lọc Dữ liệu để xem kết quả.
 

File đính kèm

  • SO LAM VIEC.xlsm
    24.1 KB · Đọc: 4
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom