sonchuot90
Thành viên mới
- Tham gia
- 16/4/22
- Bài viết
- 42
- Được thích
- 6
Em xin chào anh chị trong nhóm, em có code mong anh chị sửa giúp em, khi tìm chỉ có 1 giá trị duy nhất thì code lại cho ra 1 loạt các hàng dưới giống hệt nhau, em chỉ muốn hiện thị ra 1 lần thôi, còn trường hợp 2 là khi không còn giá trị thị chỗ N/A kia ra khoảng trắng ạ. Vậy mong anh chị trong diễn đàn sửa code giúp em với ạ, Em cám ơn
Option Explicit
Function FindInArray(str As Variant, sArr As Variant) As Variant
On Error GoTo Thoat
If IsObject(str) Then
If str.Columns.Count = 1 And str.Rows.Count = 1 Then
str = str.Value2
Else
Exit Function
End If
End If
str = LCase(CStr(str))
If IsObject(sArr) Then
If sArr.Count > 1 Then sArr = sArr.Value2
End If
If IsEmpty(sArr) Then Exit Function
If str = vbNullString Then
FindInArray = sArr
Exit Function
Else
Dim DK As Boolean, i As Long, j As Long, k As Byte, tmp() As Long, tmpArr As Variant
ReDim tmpArr(1 To UBound(sArr, 1), 1 To UBound(sArr, 2)) As Byte
tmpArr = sArr
For i = LBound(tmpArr, 1) To UBound(tmpArr, 1)
For k = 1 To UBound(tmpArr, 2)
DK = (LCase(CStr(tmpArr(i, k))) Like "*" & str & "*")
If DK Then
j = j + 1
If j = 1 Then
ReDim tmp(1 To 1) As Long
Else
ReDim Preserve tmp(1 To j) As Long
End If
tmp(j) = i
Exit For
End If
Next
Next
If j > 0 Then
Dim Arr As Variant, id As Long
ReDim Arr(1 To j, 1 To UBound(tmpArr, 2))
For i = 1 To j
id = tmp(i)
For k = 1 To UBound(tmpArr, 2)
Arr(i, k) = tmpArr(id, k)
Next
Next
FindInArray = Arr
'FindInArray = arr
Exit Function
End If
End If
Exit Function
Thoat:
Exit Function
End Function
Bài đã được tự động gộp:
Option Explicit
Function FindInArray(str As Variant, sArr As Variant) As Variant
On Error GoTo Thoat
If IsObject(str) Then
If str.Columns.Count = 1 And str.Rows.Count = 1 Then
str = str.Value2
Else
Exit Function
End If
End If
str = LCase(CStr(str))
If IsObject(sArr) Then
If sArr.Count > 1 Then sArr = sArr.Value2
End If
If IsEmpty(sArr) Then Exit Function
If str = vbNullString Then
FindInArray = sArr
Exit Function
Else
Dim DK As Boolean, i As Long, j As Long, k As Byte, tmp() As Long, tmpArr As Variant
ReDim tmpArr(1 To UBound(sArr, 1), 1 To UBound(sArr, 2)) As Byte
tmpArr = sArr
For i = LBound(tmpArr, 1) To UBound(tmpArr, 1)
For k = 1 To UBound(tmpArr, 2)
DK = (LCase(CStr(tmpArr(i, k))) Like "*" & str & "*")
If DK Then
j = j + 1
If j = 1 Then
ReDim tmp(1 To 1) As Long
Else
ReDim Preserve tmp(1 To j) As Long
End If
tmp(j) = i
Exit For
End If
Next
Next
If j > 0 Then
Dim Arr As Variant, id As Long
ReDim Arr(1 To j, 1 To UBound(tmpArr, 2))
For i = 1 To j
id = tmp(i)
For k = 1 To UBound(tmpArr, 2)
Arr(i, k) = tmpArr(id, k)
Next
Next
FindInArray = Arr
'FindInArray = arr
Exit Function
End If
End If
Exit Function
Thoat:
Exit Function
End Function