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 ạ
ví dụ: search DRT + DB2N = DF2, search DRT+DB3n = DF3Kết quả mong muốn của Bạn là gì??? Cho 1 vài ví dụ. Nhìn chưa hiểu
Chơi hàm tự tạo nhé.Xem file đính kem.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 ạ
ý mình là muốn gom gọn bảng dò lại thành 1 hàng thôi, thay vì phải tạo 3 hàng như bên tráiChơi hàm tự tạo nhé.Xem file đính kem.
Đây bạn xem.Dùng hàm tự tạo hàm mảng.ý mình là muốn gom gọn bảng dò lại thành 1 hàng thôi, thay vì phải tạo 3 hàng như bên trái
bạn gửi nhầm file không, y chang cái trên àĐây bạn xem.Dùng hàm tự tạo hàm mảng.
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é.bạn gửi nhầm file không, y chang cái trên à![]()
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
=gopchuoi(A2:C4,";")
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,";")
Đây bạn xem có đúng không nhé.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
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
=timketqua($B$2:$D$5,C12,D12)
Đâ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)
Bạn phải enable macro mới đượcSao sửa được lỗi này vậy bạn
Đâ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)
Bạn xem nhé.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.