Xin công thức VBA hàm tìm kiếm và lấy giá trị

  • Thread starter Thread starter nvh611
  • Ngày gửi Ngày gửi
Liên hệ QC

nvh611

Thành viên thường trực
Tham gia
20/5/17
Bài viết
228
Được thích
42
Nhờ các bạn trên GPE viết giúp hàm như nội dung file đính kèm
Cảm ơn các bạn!
 

File đính kèm

Hàm Chỉ không xét cột điều kiện trống, còn vùng điều kiện trống vẫn xét mờ. Hay là bạn có ý khác? nhập tay kết quả gởi lên
Bạn ơi, Nếu ô dữ liệu trống thì coi như không có dữ liệu
Nên trong trường hợp này thì bỏ qua và không lấy kết quả bạn à
Bạn @HieuCD thêm điều kiện loại bỏ giúp mình với nhé
 
Upvote 0
Bạn ơi, Nếu ô dữ liệu trống thì coi như không có dữ liệu
Nên trong trường hợp này thì bỏ qua và không lấy kết quả bạn à
Bạn @HieuCD thêm điều kiện loại bỏ giúp mình với nhé
Vấn đề là lấy thuận và nghịch. Nhập tay kết quả như thế nào mới tính tiếp
 
Upvote 0
Thêm tùy biến kết quả thích thì dùng
Mã:
Function JoinIfArr(ByVal VungDk As Range, ByVal DieuKien As Range, ByVal KetQua As Range, Optional ByVal TypeCond As Boolean = True, Optional ByVal TypeRes As Boolean = True) As Variant
  'TypeCond = False: Xet dieu kien nguoc lai
  'TypeRes = False: Tra ket qua nguoc lai
  Dim blArr() As Boolean, Res As String, tmp, dk As Boolean
  Dim i As Long, j As Byte, sRow As Long, sCol As Byte, k As Byte
  sRow = VungDk.Rows.Count
  sCol = VungDk.Columns.Count
  If DieuKien.Rows.Count <> sRow Or KetQua.Columns.Count <> sCol Then
    JoinIfArr = CVErr(xlErrRef): Exit Function
  End If
  JoinIfArr = ""
 
  If Len(DieuKien(sRow, 1).Value) = 0 Then Exit Function
  ReDim blArr(1 To sCol)
  For i = 1 To sRow
    tmp = DieuKien(i, 1).Value
    If Len(tmp) > 0 Then
      For j = 1 To sCol
        If blArr(j) = False Then
          If (InStr(1, VungDk(i, j).Value, tmp) = 0) = TypeCond Or Len(VungDk(i, j).Value) = 0 Then
            k = k + 1: blArr(j) = True
          End If
        End If
      Next j
      If k = sCol Then Exit For
    End If
  Next i
 
  For j = 1 To sCol
    If (blArr(j) = False) = TypeRes Then
      If Len(Res) = 0 Then Res = KetQua(1, j) Else Res = Res & "-" & KetQua(1, j) '--------True;False
    End If
  Next j

  JoinIfArr = Res
  Set vDieuKien = Nothing: Set DieuKien = Nothing: Set KetQua = Nothing
End Function
 

File đính kèm

Upvote 0
Thêm tùy biến kết quả thích thì dùng
Mã:
Function JoinIfArr(ByVal VungDk As Range, ByVal DieuKien As Range, ByVal KetQua As Range, Optional ByVal TypeCond As Boolean = True, Optional ByVal TypeRes As Boolean = True) As Variant
  'TypeCond = False: Xet dieu kien nguoc lai
  'TypeRes = False: Tra ket qua nguoc lai
  Dim blArr() As Boolean, Res As String, tmp, dk As Boolean
  Dim i As Long, j As Byte, sRow As Long, sCol As Byte, k As Byte
  sRow = VungDk.Rows.Count
  sCol = VungDk.Columns.Count
  If DieuKien.Rows.Count <> sRow Or KetQua.Columns.Count <> sCol Then
    JoinIfArr = CVErr(xlErrRef): Exit Function
  End If
  JoinIfArr = ""

  If Len(DieuKien(sRow, 1).Value) = 0 Then Exit Function
  ReDim blArr(1 To sCol)
  For i = 1 To sRow
    tmp = DieuKien(i, 1).Value
    If Len(tmp) > 0 Then
      For j = 1 To sCol
        If blArr(j) = False Then
          If (InStr(1, VungDk(i, j).Value, tmp) = 0) = TypeCond Or Len(VungDk(i, j).Value) = 0 Then
            k = k + 1: blArr(j) = True
          End If
        End If
      Next j
      If k = sCol Then Exit For
    End If
  Next i

  For j = 1 To sCol
    If (blArr(j) = False) = TypeRes Then
      If Len(Res) = 0 Then Res = KetQua(1, j) Else Res = Res & "-" & KetQua(1, j) '--------True;False
    End If
  Next j

  JoinIfArr = Res
  Set vDieuKien = Nothing: Set DieuKien = Nothing: Set KetQua = Nothing
End Function
Trời!
Hàm của bạn @HieuCD quá vĩ đại và rất nhiều tác dụng
Tôi thử thấy rất đúng cho cả 2 trường hợp rồi
Cảm ơn bạn @HieuCD rất nhiều
Bạn làm ơn giải thích thêm cách dùng tỷ mỷ hơn được không?
 
Upvote 0
Trời!
Hàm của bạn @HieuCD quá vĩ đại và rất nhiều tác dụng
Tôi thử thấy rất đúng cho cả 2 trường hợp rồi
Cảm ơn bạn @HieuCD rất nhiều
Bạn làm ơn giải thích thêm cách dùng tỷ mỷ hơn được không?
Bạn thử thay giá trị 2 tham số cuối True và False từ đó suy ra tác dụng của hàm
 
Upvote 0
Web KT

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

Back
Top Bottom