Gộp chuỗi giống nhau và cộng số lượng

Liên hệ QC

Ngày mai trời lại sáng

Thành viên thường trực
Tham gia
4/7/21
Bài viết
339
Được thích
139
Xin chào các bạn,
Mong các bạn giúp đỡ một hàm tự tạo để thực hiện công việc gộp các chuỗi mẹ giống nhau vào 1 , cộng dồn số lượng sau dấu ":" thứ nhất trong chuỗi con với, cụ thể:

Chuỗi ban đầu:
20220521:960:LT1-F/C-1:X220521-1/06h50:08h10;20220521:960:LT7-F/C-13:X220521-13/11h20:13h10;20220521:960:LT13-F/C-25:X220521-25/20h35:21h05;20220521:960:LT1-F/C-1:X220521-1/06h50:08h10

Quy tắc chuỗi:
Các chuỗi mẹ được nối với nhau bởi dấu ";"
Các chuỗi con được nối với nhau vởi dấu ":"

Kết quả mong muốn sau gộp:
20220521:1920:LT1-F/C-1:X220521-1/06h50:08h10;20220521:960:LT7-F/C-13:X220521-13/11h20:13h10;20220521:960:LT13-F/C-25:X220521-25/20h35:21h05

Cảm ơn các bạn.
 
Chi tiết ví dụ như vậy là chưa đủ. Code cho bạn mất công code lại.
Nếu bạn biết tại sao tôi nói chưa đủ thì chỉ cần giải thích thêm.
Nếu không biết thì thêm ít nhất 3 ví dụ nữa.
 
Upvote 0
Dùng tạm cái này:
PHP:
Option Explicit
Function GopChuoi(ByVal cell As Range)
Dim i&, pos1, pos2, num, s, id As String, dic As Object, key
Set dic = CreateObject("Scripting.dictionary")
s = Split(cell, ";")
    For i = 0 To UBound(s)
        pos1 = InStr(1, s(i), ":")
        pos2 = InStr(pos1 + 1, s(i), ":")
        id = Left(s(i), pos1) & Mid(s(i), pos2)
        num = Val(Mid(s(i), pos1 + 1, pos2 - pos1 - 1))
        If Not dic.exists(id) Then
            dic.Add id, num
        Else
            dic(id) = dic(id) + num
        End If
    Next
For Each key In dic.keys
    GopChuoi = GopChuoi & Replace(key, "::", ":" & dic(key) & ":")
Next
End Function
Capture.PNG
 

File đính kèm

  • Book2.xlsm
    16.8 KB · Đọc: 8
Upvote 0
Chi tiết ví dụ như vậy là chưa đủ. Code cho bạn mất công code lại.
Nếu bạn biết tại sao tôi nói chưa đủ thì chỉ cần giải thích thêm.
Nếu không biết thì thêm ít nhất 3 ví dụ nữa.
Hehe cháu chào chú,
Bài này cháu cũng đã thử với Dic rồi nhưng có lẽ thuật toán hơi ngu ngơ lên đi lòng vòng nhiều quá ngứa mắt cháu xoá đi rồi sau đó up lên đây nhờ mọi người giúp để tham khảo.
Về ví dụ chi tiết nữa cháu xin bổ sung thên là các tham số trong chuỗi con con cố định nghĩa là các dấu ":" cố định nếu tham số nào không có thì để trống chỗ đó 2 dấnu "::" gần nhau, số lượng trong chuỗi con luôn lớn hơn 0.
Chuỗi mẹ có thể 1 hoặc thậm trí rất nhiều khoảng 10 và các chuỗi mẹ nếu giống nhau cũng không phải là cố định về vị trí phải giống nhau có thể vị trí 1 giống vị trí 4 và vị trí 5 giống vị trí 6 v.v..
Bài đã được tự động gộp:

Dùng tạm cái này:
PHP:
Option Explicit
Function GopChuoi(ByVal cell As Range)
Dim i&, pos1, pos2, num, s, id As String, dic As Object, key
Set dic = CreateObject("Scripting.dictionary")
s = Split(cell, ";")
    For i = 0 To UBound(s)
        pos1 = InStr(1, s(i), ":")
        pos2 = InStr(pos1 + 1, s(i), ":")
        id = Left(s(i), pos1) & Mid(s(i), pos2)
        num = Val(Mid(s(i), pos1 + 1, pos2 - pos1 - 1))
        If Not dic.exists(id) Then
            dic.Add id, num
        Else
            dic(id) = dic(id) + num
        End If
    Next
For Each key In dic.keys
    GopChuoi = GopChuoi & Replace(key, "::", ":" & dic(key) & ":")
Next
End Function
View attachment 275316
Cảm ơn anh nhiều, em sẽ thử rồi thông tin lại
 
Upvote 0
Dùng tạm cái này:
PHP:
Option Explicit
Function GopChuoi(ByVal cell As Range)
Dim i&, pos1, pos2, num, s, id As String, dic As Object, key
Set dic = CreateObject("Scripting.dictionary")
s = Split(cell, ";")
    For i = 0 To UBound(s)
        pos1 = InStr(1, s(i), ":")
        pos2 = InStr(pos1 + 1, s(i), ":")
        id = Left(s(i), pos1) & Mid(s(i), pos2)
        num = Val(Mid(s(i), pos1 + 1, pos2 - pos1 - 1))
        If Not dic.exists(id) Then
            dic.Add id, num
        Else
            dic(id) = dic(id) + num
        End If
    Next
For Each key In dic.keys
    GopChuoi = GopChuoi & Replace(key, "::", ":" & dic(key) & ":")
Next
End Function
View attachment 275316
Cảm ơn anh @bebo021999 chuỗi này sau khi gộp bị mất dấu chấm phẩy ";" giữa các chuỗi mẹ anh ơi.
 
Upvote 0
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom