Lấy ký tự trong chuỗi theo nhiều điều kiện

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

hongphuong1997

Thành viên tiêu biểu
Tham gia
12/11/17
Bài viết
727
Được thích
293
Giới tính
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 ạ.
 

File đính kèm

  • Lấy ký tự trong chuỗi theo nhiều điều kiện.xlsb
    18.5 KB · Đọc: 21
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 ạ.
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ì.
 
Upvote 0
Em gửi file giải thích thêm anh nhé.
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
 
Upvote 0
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
Này anh này!
Em không biết thì mới hỏi mọi người. Vì vậy, anh có tâm giúp đỡ thì giúp đỡ cho nó đoàng hoàng nhé anh.
Còn nếu ăn tục nói phét thì có khả năng em còn nói phét gấp vạn lần anh đó.
 
Upvote 0
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 ạ.
Chuỗi mẫu & chuỗi kết quả đều chỉ là 1 dòng à bạn?
 
Upvote 0
Chuỗi mẫu & chuỗi kết quả đều chỉ là 1 dòng à bạn?
Hihi em chào anh ạ, lâu lắm mới thấy anh xuất hiện.
Em chúc anh ngày cuối tuần tràn đầy hạnh phúc và niềm vui nhé anh.
Anh oi.
Các chuỗi bên dưới là em nối dữ liệu của các ô (Của các dòng bên trên vào mà)
- Nếu như dữ liệu các ký tự nằm ở các ô rời rạc thì em dùng hàm Jointext cũng làm được ra kết quả.
Nhưng em muốn viết hàm dùng cho chuỗi.
Anh viết cho em với anh.
Em cảm ơn anh ạ.
 
Upvote 0
@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
 
Upvote 0
@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
Nhanh quá anh oi
Em cảm ơn anh ạ.
Để em Test đã nhé anh.
Bài đã được tự động gộp:

@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 ạ.
 

File đính kèm

  • Lấy ký tự trong chuỗi theo nhiều điều kiện.xlsb
    21.4 KB · Đọc: 5
Lần chỉnh sửa cuối:
Upvote 0
Nhanh 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 ạ.
1713603170441.png
Riêng mình thì thích cách dùng từ 'giúp' hơn là dùng từ 'cho'.
 
Upvote 0
Upvote 0
Upvote 0
Nhanh 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 ạ.
@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
 
Upvote 0
@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
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:

@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.
Anh xem lại giúp em với anh nhé.
Em có trình bày ở trong file nhé anh.
 

File đính kèm

  • Lấy ký tự trong chuỗi theo nhiều điều kiện.xlsb
    21.6 KB · Đọc: 2
Lần chỉnh sửa cuối:
Upvote 0
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.
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é!
 
Upvote 0
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é!
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ả)
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.
 
Upvote 0
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ả)
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.
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
 
Upvote 0
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
Hihi....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.
 

File đính kèm

  • Lấy ký tự trong chuỗi theo nhiều điều kiện.xlsb
    22.3 KB · Đọc: 5
Upvote 0
Hihi....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.
Chắc thế này thôi
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)
    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
 
Upvote 0
Web KT
Back
Top Bottom