Bài toán của em như hình đính kèm, quan trọng nhất là điền vào tên mặt hàng, nhờ mọi người tư vấn dùm em cách làm
=LOOKUP(2,1/COUNTIF(B4,"*"&$B$15:$B$18&"*"),$C$15:$C$18)
Cách khác dùng hàm mảng:
=INDEX($C$15:$C$18,MATCH(1,--ISNUMBER(SEARCH($B$15:$B$18,B4)),0))
Ctrl-Shift-Enter
=LOOKUP(2,1/SEARCH($B$15:$B$18,B4),$C$15:$C$18)
=LOOKUP(2,1/FIND($A$16:$A$19,B2),OFFSET($A$16:$A$19,,INT((C2-1)/3)+1))
=LOOKUP(2,1/FIND($A$16:$A$19,B2),OFFSET($A$16:$A$19,,LOOKUP(--C2,{0,4,7},{1,2,3})))
Cũng dùng SEARCH nhưng kết hợp với LOOKUP:
Tương tự vậy cho bài số 7:Mã:=LOOKUP(2,1/SEARCH($B$15:$B$18,B4),$C$15:$C$18)
HoặcMã:=LOOKUP(2,1/FIND($A$16:$A$19,B2),OFFSET($A$16:$A$19,,INT((C2-1)/3)+1))
Hàng đống cáchMã:=LOOKUP(2,1/FIND($A$16:$A$19,B2),OFFSET($A$16:$A$19,,LOOKUP(--C2,{0,4,7},{1,2,3})))
Thưa thày, dạng bài số 7 em rất hay gặp trong công việc, rất mong thày dạy dùm em VBA bài này với ah.
Bài toán dạng TÌM KIẾM dùng VBA có đầy trên GPE rồi còn gì
Giờ nếu muốn dùng code VBA, vậy bạn muốn xây dựng code thành 1 Function hay 1 Sub?
Dạ bằng Sub ah, em chưa thạo lắm nên nhìn thuật toán cái này dễ hơn.
Sub FindSpec(ByVal rFind As Range, ByVal LookUp_Table As Range, ByVal aColIndex, ByVal Target As Range)
Dim lR1 As Long, lR2 As Long, n As Long, ColIndex As Long
Dim aTable, aFind, aResult()
Dim tmp1 As String, tmp2 As String
On Error Resume Next
aFind = rFind.Value
aTable = LookUp_Table.Value
ReDim aResult(1 To UBound(aFind), 1 To 1)
For lR1 = 1 To UBound(aFind, 1)
tmp1 = CStr(aFind(lR1, 1))
If Len(tmp1) Then
ColIndex = aColIndex(lR1, 1)
For lR2 = 1 To UBound(aTable, 1)
tmp2 = CStr(aTable(lR2, 1))
If Len(tmp2) Then
If InStr(1, tmp1, tmp2) Then
aResult(lR1, 1) = aTable(lR2, ColIndex)
Exit For
End If
End If
Next
End If
Next
Target.Resize(lR1 - 1, 1).Value = aResult
End Sub
Sub Main()
Dim rFind As Range, LookUp_Table As Range, aColIndex, Target As Range
Dim i As Long, lTmp As Long
On Error Resume Next
With Sheet1
Set rFind = .Range("B2:B11")
Set LookUp_Table = .Range("A16:D19")
aColIndex = .Range("C2:C11").Value
Set Target = .Range("D2")
End With
For i = 1 To UBound(aColIndex)
lTmp = Int((aColIndex(i, 1) - 1) / 3) + 2
aColIndex(i, 1) = lTmp
Next
FindSpec rFind, LookUp_Table, aColIndex, Target
End Sub
For i = 1 To UBound(aColIndex)
lTmp = Int((aColIndex(i, 1) - 1) / 3) + 2
aColIndex(i, 1) = lTmp
Next