hongphuong1997
Thành viên tiêu biểu

- Tham gia
- 12/11/17
- Bài viết
- 773
- Được thích
- 322
- Giới tính
- Nữ
Bạn ghi trong file "Em diễn giải cho mọi người dễ hiểu", nhưng thật sự đọc chả hiểu cái mong muốn là gì.Cháu chào các bác và các anh chị ạ.
Các bác oi, cháu muốn viết một hàm như miêu tả trong file đính kèm.
Các bác và anh chị viết và hướng dẫn cháu với ạ
Cháu cảm ơn tất cả mọi người ạ.
Em gửi file giải thích thêm anh nhé.Bạn ghi trong file "Em diễn giải cho mọi người dễ hiểu", nhưng thật sự đọc chả hiểu cái mong muốn là gì.
Thật ra đọc cũng hiểu có chút hiểu chứ chưa rõ. Bạn nên tìm thêm code để có thể dùng được hàm textsplit nhé, tách nó ra rồi làm (ko thì phải cột phụ mà tách ra thôi). Vì bạn còn Jointext thì chắc ko phải 365 rồi. Hoặc đưa lên GoogleSheetEm gửi file giải thích thêm anh nhé.
Này anh này!Thật ra đọc cũng hiểu có chút hiểu chứ chưa rõ. Bạn nên tìm thêm code để có thể dùng được hàm textsplit nhé, tách nó ra rồi làm (ko thì phải cột phụ mà tách ra thôi). Vì bạn còn Jointext thì chắc ko phải 365 rồi. Hoặc đưa lên GoogleSheet
Chuỗi mẫu & chuỗi kết quả đều chỉ là 1 dòng à bạn?Cháu chào các bác và các anh chị ạ.
Các bác oi, cháu muốn viết một hàm như miêu tả trong file đính kèm.
Các bác và anh chị viết và hướng dẫn cháu với ạ
Cháu cảm ơn tất cả mọi người ạ.
Hihi em chào anh ạ, lâu lắm mới thấy anh xuất hiện.Chuỗi mẫu & chuỗi kết quả đều chỉ là 1 dòng à bạn?
Option Explicit
Function LocKQ(chuoiKq, chuoiNguon, dk)
Dim Tam
Dim Kq()
Dim i, j, k
Tam = Split(chuoiKq, ";")
ReDim Kq(UBound(Tam))
For Each k In Split(chuoiNguon, ";")
If k = dk Then
Kq(j) = Tam(i)
j = j + 1
End If
i = i + 1
Next k
LocKQ = Replace(Trim(Join(Kq)), " ", "; ")
End Function
Nhanh quá anh oi@hongphuong1997
Mã:Option Explicit Function LocKQ(chuoiKq, chuoiNguon, dk) Dim Tam Dim Kq() Dim i, j, k Tam = Split(chuoiKq, ";") ReDim Kq(UBound(Tam)) For Each k In Split(chuoiNguon, ";") If k = dk Then Kq(j) = Tam(i) j = j + 1 End If i = i + 1 Next k LocKQ = Replace(Trim(Join(Kq)), " ", "; ") End Function
Anh oi, công thức chỉ đúng được mỗi kết quả dòng đầu.@hongphuong1997
Mã:Option Explicit Function LocKQ(chuoiKq, chuoiNguon, dk) Dim Tam Dim Kq() Dim i, j, k Tam = Split(chuoiKq, ";") ReDim Kq(UBound(Tam)) For Each k In Split(chuoiNguon, ";") If k = dk Then Kq(j) = Tam(i) j = j + 1 End If i = i + 1 Next k LocKQ = Replace(Trim(Join(Kq)), " ", "; ") End Function
Anh oi, công thức chỉ đúng được mỗi kết quả dòng đầu.
Còn từ dòng 2 thì bị lỗi.
Anh viết thêm cho em với ạ.
Mình thấy thế này có lẽ phù hợp hơn:Riêng mình thì thích cách dùng từ 'giúp' hơn là dùng từ 'cho'.
Nếu bạn sinh 1997 thì có thể gọi mình là anh, còn gọi bác 868 là chú hoặc bác nhé!Em cảm ơn 2 anh Tôn hành Giả và Giả Hành Tôn đã góp ý (Không biết ai là Tôn Ngộ Không thật đây?)
@Hoàng Tuấn 868 And @hoangtuan.net
@hongphuong1997 test lại lần nữa xem saoNhanh quá anh oi
Em cảm ơn anh ạ.
Để em Test đã nhé anh.
Bài đã được tự động gộp:
Anh oi, công thức chỉ đúng được mỗi kết quả dòng đầu.
Còn từ dòng 2 thì bị lỗi.
Anh viết thêm cho em với ạ.
Option Explicit
Function LocKQ(chuoiKq, ParamArray dlDauvao() As Variant)
Dim mTam
Dim dk
Dim Kq()
Dim i, j, k
mTam = Split(chuoiKq, ";")
ReDim Kq(UBound(mTam))
For j = 0 To UBound(dlDauvao) Step 2
dk = dlDauvao(j + 1)
i = 0
For Each k In Split(dlDauvao(j), ";")
If k = dk Then
Kq(i) = mTam(i)
End If
i = i + 1
Next k
Next j
LocKQ = Replace(Application.Trim(Join(Kq)), " ", ", ")
End Function
Em đang măm măm nhưng em cũng nghỉ để Test đã.@hongphuong1997 test lại lần nữa xem sao
Mã:Option Explicit Function LocKQ(chuoiKq, ParamArray dlDauvao() As Variant) Dim mTam Dim dk Dim Kq() Dim i, j, k mTam = Split(chuoiKq, ";") ReDim Kq(UBound(mTam)) For j = 0 To UBound(dlDauvao) Step 2 dk = dlDauvao(j + 1) i = 0 For Each k In Split(dlDauvao(j), ";") If k = dk Then Kq(i) = mTam(i) End If i = i + 1 Next k Next j LocKQ = Replace(Application.Trim(Join(Kq)), " ", ", ") End Function
Huhu.... anh oi, vẫn chưa thành công anh oi.@hongphuong1997 test lại lần nữa xem sao
Mã:Option Explicit Function LocKQ(chuoiKq, ParamArray dlDauvao() As Variant) Dim mTam Dim dk Dim Kq() Dim i, j, k mTam = Split(chuoiKq, ";") ReDim Kq(UBound(mTam)) For j = 0 To UBound(dlDauvao) Step 2 dk = dlDauvao(j + 1) i = 0 For Each k In Split(dlDauvao(j), ";") If k = dk Then Kq(i) = mTam(i) End If i = i + 1 Next k Next j LocKQ = Replace(Application.Trim(Join(Kq)), " ", ", ") End Function
Với nhiều dòng đầu vào: có dòng trả về nhiều kết quả, có dòng trả về ít kết quả. Trong đó có kết quả trùng nhau, kết quả cuối cùng là gì?Em đang măm măm nhưng em cũng nghỉ để Test đã.
Anh đã măm chưa hở anh oi?
Bài đã được tự động gộp:
Huhu.... anh oi, vẫn chưa thành công anh oi.
Anh xem lại giúp em với anh nhé.
Em có trình bày ở trong file nhé anh.
Không gộp anh oi, vẫn phải tách biệt từng chuỗi (Từng dòng kết quả)Với nhiều dòng đầu vào: có dòng trả về nhiều kết quả, có dòng trả về ít kết quả. Trong đó có kết quả trùng nhau, kết quả cuối cùng là gì?
Thử riêng biệt với dòng 38 & dòng 39 sẽ có 2 nhóm kết quả khác nhau, trong đó có chuỗi trùng --> chốt kết quả yêu cầu khi gộp cả 2 dòng nhé!
Thử cái nữa. Thấy kết quả có vẻ khá giốngKhông gộp anh oi, vẫn phải tách biệt từng chuỗi (Từng dòng kết quả)
Dữ liệu trong file là em lấy giả định để mọi người dễ phân biệt mà.
Anh cố gắng giúp em nhé anh.
À mà nó theo PP rút gọn dần đó anh.
Option Explicit
Function LocKQ(chuoiKq, ParamArray dlDauvao() As Variant)
Dim mTam
Dim dk
Dim Kq()
Dim maxSL
Dim i, j, k
mTam = Split(chuoiKq, ";")
ReDim Kq(UBound(mTam))
For j = 0 To UBound(dlDauvao) Step 2
dk = dlDauvao(j + 1)
i = 0
For Each k In Split(dlDauvao(j), ";")
If k = dk Then
Kq(i) = Kq(i) + 1
End If
i = i + 1
Next k
Next j
maxSL = 0
For j = 0 To UBound(Kq)
If maxSL < Kq(j) Then maxSL = Kq(j)
Next j
For j = 0 To UBound(Kq)
If Kq(j) < maxSL Then
Kq(j) = ""
Else
Kq(j) = mTam(j)
End If
Next j
LocKQ = Replace(Application.Trim(Join(Kq)), " ", ", ")
End Function
Hihi....em cảm ơn anh rất nhiều ạ.Thử cái nữa. Thấy kết quả có vẻ khá giống
Mã:Option Explicit Function LocKQ(chuoiKq, ParamArray dlDauvao() As Variant) Dim mTam Dim dk Dim Kq() Dim maxSL Dim i, j, k mTam = Split(chuoiKq, ";") ReDim Kq(UBound(mTam)) For j = 0 To UBound(dlDauvao) Step 2 dk = dlDauvao(j + 1) i = 0 For Each k In Split(dlDauvao(j), ";") If k = dk Then Kq(i) = Kq(i) + 1 End If i = i + 1 Next k Next j maxSL = 0 For j = 0 To UBound(Kq) If maxSL < Kq(j) Then maxSL = Kq(j) Next j For j = 0 To UBound(Kq) If Kq(j) < maxSL Then Kq(j) = "" Else Kq(j) = mTam(j) End If Next j LocKQ = Replace(Application.Trim(Join(Kq)), " ", ", ") End Function
Chắc thế này thôiHihi....em cảm ơn anh rất nhiều ạ.
Kết quả chuẩn lắm anh oi.
Nhưng có một chút lỗi nhỏ là khi hết các chuỗi dữ liệu và điều kiện thì hàm vẫn giữ nguyên cái kết quả cuối cùng của dữ liệu.
Anh chỉnh giúp em cắt đuôi cái dữ liệu đó là "No" với nhé anh.
Option Explicit
Function LocKQ(chuoiKq, ParamArray dlDauvao() As Variant)
Dim mTam
Dim dk
Dim Kq()
Dim maxSL
Dim i, j, k
mTam = Split(chuoiKq, ";")
ReDim Kq(UBound(mTam))
For j = 0 To UBound(dlDauvao) Step 2
dk = dlDauvao(j + 1)
If dk = "" Or dlDauvao(j) = "" Then
maxSL = 1
Exit For
End If
i = 0
For Each k In Split(dlDauvao(j), ";")
If k = dk Then
Kq(i) = Kq(i) + 1
End If
i = i + 1
Next k
Next j
If maxSL = 0 Then
For j = 0 To UBound(Kq)
If maxSL < Kq(j) Then maxSL = Kq(j)
Next j
For j = 0 To UBound(Kq)
If Kq(j) < maxSL Then
Kq(j) = ""
Else
Kq(j) = mTam(j)
End If
Next j
LocKQ = Replace(Application.Trim(Join(Kq)), " ", ", ")
Else
LocKQ = ""
End If
End Function