Tìm kiếm trong chuỗi

Liên hệ QC

thanhtoan009

Thành viên mới
Tham gia
17/1/19
Bài viết
8
Được thích
0
Chào các bác, em có làm cái hàm tìm kiếm theo hàng như hình. Bây giờ muốn thu gọn lại thành chuỗi cách nhau bằng dấu ";" . Các bác giúp em với. Xin cám ơn ạ
 

File đính kèm

  • WeChat Screenshot_20190117142338.png
    WeChat Screenshot_20190117142338.png
    23.6 KB · Đọc: 23
  • TIM KIEM.xlsx
    9.4 KB · Đọc: 13

File đính kèm

  • TIM KIEM.xlsm
    15 KB · Đọc: 6
bạn gửi nhầm file không, y chang cái trên à :)
Bạn xem lại nhé.Chọn vùng cần điền kết quả rồi nhập công thức.Kết thúc bằng hàm mảng nhé.
Mã:
Function gopchuoi(ByVal mang As Variant, Optional ByVal phancach As String = ";")
Dim arr, arr1(), dic As Object
Dim i As Long, j As Long, a As Long, b As Long
Set dic = CreateObject("scripting.dictionary")
arr = mang.Value
ReDim arr1(1 To UBound(arr, 1), 1 To UBound(arr, 2))
For i = 1 To UBound(arr, 1)
    If Not dic.exists(arr(i, 1)) Then
       a = a + 1
       arr1(a, 1) = arr(i, 1)
           For j = 2 To UBound(arr, 2)
               arr1(a, j) = arr(i, j)
           Next j
       dic.Add arr(i, 1), a
    Else
        b = dic.Item(arr(i, 1))
        For j = 2 To UBound(arr, 2)
            arr1(b, j) = arr1(b, j) & phancach & arr(i, j)
        Next j
    End If
Next i
    gopchuoi = arr1()
End Function
Mã:
=gopchuoi(A2:C4,";")
 

File đính kèm

  • TIM KIEM.xlsm
    16.7 KB · Đọc: 4
Gởi thanhtoan009,
Tôi vừa xóa avatar của bạn, vi phạm quy định của diễn đàn và vi phạm văn hóa.
 
Bạn xem lại nhé.Chọn vùng cần điền kết quả rồi nhập công thức.Kết thúc bằng hàm mảng nhé.
Mã:
Function gopchuoi(ByVal mang As Variant, Optional ByVal phancach As String = ";")
Dim arr, arr1(), dic As Object
Dim i As Long, j As Long, a As Long, b As Long
Set dic = CreateObject("scripting.dictionary")
arr = mang.Value
ReDim arr1(1 To UBound(arr, 1), 1 To UBound(arr, 2))
For i = 1 To UBound(arr, 1)
    If Not dic.exists(arr(i, 1)) Then
       a = a + 1
       arr1(a, 1) = arr(i, 1)
           For j = 2 To UBound(arr, 2)
               arr1(a, j) = arr(i, j)
           Next j
       dic.Add arr(i, 1), a
    Else
        b = dic.Item(arr(i, 1))
        For j = 2 To UBound(arr, 2)
            arr1(b, j) = arr1(b, j) & phancach & arr(i, j)
        Next j
    End If
Next i
    gopchuoi = arr1()
End Function
Mã:
=gopchuoi(A2:C4,";")

ví dụ: search DRT + DB2N thì ô result = DF2, search DRT+DB3n thì ô result = DF3
Mình đã làm ra hàm tìm kiếm bằng INDEX với MATCH rồi. Nhưng giờ mình muốn bảng dò gọn hơn bằng cách gom lại thành DB2N;DB3N;DB23...(bảng này có sẵn rồi) , nhưng hàm tìm kiếm không chạy được. Có cách nào tìm kiếm được không bạn, ví dụ DB3N nằm thứ 2 trong chuỗi thì sẽ tìm được tương ứng là DF3 trong chuỗi bên kia. sorry bạn vì diễn đạt khó hiểu dẫn đến hiểu lầm. Cám ơn bạn nhiều
 

File đính kèm

  • TIM KIEM.xlsm
    15 KB · Đọc: 3
ví dụ: search DRT + DB2N thì ô result = DF2, search DRT+DB3n thì ô result = DF3
Mình đã làm ra hàm tìm kiếm bằng INDEX với MATCH rồi. Nhưng giờ mình muốn bảng dò gọn hơn bằng cách gom lại thành DB2N;DB3N;DB23...(bảng này có sẵn rồi) , nhưng hàm tìm kiếm không chạy được. Có cách nào tìm kiếm được không bạn, ví dụ DB3N nằm thứ 2 trong chuỗi thì sẽ tìm được tương ứng là DF3 trong chuỗi bên kia. sorry bạn vì diễn đạt khó hiểu dẫn đến hiểu lầm. Cám ơn bạn nhiều
Đây bạn xem có đúng không nhé.
Mã:
Function timketqua(ByVal mang As Variant, ByVal dk As String, ByVal dk1 As String, Optional ByVal phancach As String = ";")
        Dim arr, i As Long, T, j As Integer
        arr = mang.Value
        For i = 1 To UBound(arr, 1)
           If UCase(arr(i, 1)) = UCase(dk) Then
              T = Split(phancach & arr(i, 2), phancach)
              For j = LBound(T) To UBound(T)
                  If UCase(T(j)) = UCase(dk1) Then
                     timketqua = Split(phancach & arr(i, 3), phancach)(j)
                     Exit For
                  End If
              Next j
              Exit For
           End If
      Next i
End Function
Mã:
=timketqua($B$2:$D$5,C12,D12)
 

File đính kèm

  • TIM KIEM.xlsm
    17.3 KB · Đọc: 3
Đây bạn xem có đúng không nhé.
Mã:
Function timketqua(ByVal mang As Variant, ByVal dk As String, ByVal dk1 As String, Optional ByVal phancach As String = ";")
        Dim arr, i As Long, T, j As Integer
        arr = mang.Value
        For i = 1 To UBound(arr, 1)
           If UCase(arr(i, 1)) = UCase(dk) Then
              T = Split(phancach & arr(i, 2), phancach)
              For j = LBound(T) To UBound(T)
                  If UCase(T(j)) = UCase(dk1) Then
                     timketqua = Split(phancach & arr(i, 3), phancach)(j)
                     Exit For
                  End If
              Next j
              Exit For
           End If
      Next i
End Function
Mã:
=timketqua($B$2:$D$5,C12,D12)

Sao sửa được lỗi này vậy bạn
 

File đính kèm

  • 1547874028613.png
    1547874028613.png
    39.2 KB · Đọc: 9
Đây bạn xem có đúng không nhé.
Mã:
Function timketqua(ByVal mang As Variant, ByVal dk As String, ByVal dk1 As String, Optional ByVal phancach As String = ";")
        Dim arr, i As Long, T, j As Integer
        arr = mang.Value
        For i = 1 To UBound(arr, 1)
           If UCase(arr(i, 1)) = UCase(dk) Then
              T = Split(phancach & arr(i, 2), phancach)
              For j = LBound(T) To UBound(T)
                  If UCase(T(j)) = UCase(dk1) Then
                     timketqua = Split(phancach & arr(i, 3), phancach)(j)
                     Exit For
                  End If
              Next j
              Exit For
           End If
      Next i
End Function
Mã:
=timketqua($B$2:$D$5,C12,D12)

Còn 1 trường hợp ntn, bác giúp e với nha. iso code trùng nhau, nhưng location khác nhau.
 

File đính kèm

  • TIM KIEM (4).xlsm
    18 KB · Đọc: 1
Web KT
Back
Top Bottom