Bạn ơi, Nếu ô dữ liệu trống thì coi như không có dữ liệuHà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
Thêm tùy biến kết quả thích thì dùngBạn @HieuCD xem giúp mình nhé
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!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