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

Blue Softs Liên hệ QC

vanhuy889

Thành viên mới
Tham gia
14/11/13
Bài viết
25
Đượ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

HieuCD

Chuyên gia GPE
Tham gia
14/9/10
Bài viết
8,381
Được thích
17,483
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

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia
5/5/09
Bài viết
12,079
Được thích
17,446

File đính kèm

  • VD (1).xlsm
    25.9 KB · Đọc: 20
Upvote 0

vanhuy889

Thành viên mới
Tham gia
14/11/13
Bài viết
25
Được thích
2
"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

HieuCD

Chuyên gia GPE
Tham gia
14/9/10
Bài viết
8,381
Được thích
17,483
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

vanhuy889

Thành viên mới
Tham gia
14/11/13
Bài viết
25
Được thích
2
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

huonglien1901

GPE là ngôi nhà thứ 2 của tôi!!!
Tham gia
17/4/16
Bài viết
2,658
Được thích
2,361
Giới tính
Nam
Nghề nghiệp
Nhân viên kỹ thuật in ấn
Upvote 0

HieuCD

Chuyên gia GPE
Tham gia
14/9/10
Bài viết
8,381
Được thích
17,483
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

be_09

Biên Hòa, Đồng Nai
Tham gia
9/4/11
Bài viết
9,964
Được thích
9,735
Nghề nghiệp
Công chức
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: 3
Lần chỉnh sửa cuối:
Upvote 0
Top Bottom