Nhờ giúp đỡ gộp 2 cột theo điều kiện

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

Eric.Shen

Thành viên chính thức
Tham gia
26/1/23
Bài viết
74
Được thích
9
Chào các bác,
Em đang có một bài toán cần gộp 2 cột theo điều kiện
Cụ thể là cột A là cột gốc, cột B chứa các dữ liệu được phân cách nhau bởi dấu "/"
Em muốn nối dữ liệu ở cột A với từng dữ liệu riêng biệt của cột B tương ứng ạ
Cụ thể em có để tệp và hình ảnh bên dưới
Các bác giúp em cái code với nhé
Em cảm ơn ạ
 

File đính kèm

  • Book1.xlsm
    9.7 KB · Đọc: 16
  • Capture.JPG
    Capture.JPG
    52.1 KB · Đọc: 21
Em đang có một bài toán cần gộp 2 cột theo điều kiện
Bạn đăng vào box lập trình. Chắc cũng biết code. Duyệt từ 1 tới cuối của cột A có dữ liệu
Với mỗi phần tử của cột A. Tách cột B theo dấu "/". Tách bằng split (1)
Duyệt từ 0 tới phần tử của (1)
Xong nối 2 kết quả lại với nhau là có kết quả bạn muốn rồi.
 
Upvote 0
Chào các bác,
Em đang có một bài toán cần gộp 2 cột theo điều kiện
Cụ thể là cột A là cột gốc, cột B chứa các dữ liệu được phân cách nhau bởi dấu "/"
Em muốn nối dữ liệu ở cột A với từng dữ liệu riêng biệt của cột B tương ứng ạ
Cụ thể em có để tệp và hình ảnh bên dưới
Các bác giúp em cái code với nhé
Em cảm ơn ạ
Làm theo gọi ý của #2.
Hãy thử xem trong khi chờ các giải pháp khác.
Mã:
Option Explicit

Sub Gop()
Dim i&, j&, Lr&, t&
Dim Arr(), KQ(), S
With Sheet1
    Lr = .Cells(Rows.Count, 2).End(xlUp).Row
    If Lr <= 2 Then MsgBox " Không có dư liêu": Exit Sub
    Arr = .Range("B3:C" & Lr).Value
    ReDim KQ(1 To 1000, 1 To 1)
    For i = 1 To UBound(Arr)
        S = Split(Arr(i, 2), "/")
        For j = 0 To UBound(S)
            t = t + 1
            KQ(t, 1) = Arr(i, 1) & "/" & S(j)
        Next j
    Next i
    If t Then
        .Range("F3").Resize(1000, 1).ClearContents
        .Range("F3").Resize(t, 1) = KQ
    End If
End With
MsgBox " Xong"

End Sub
Các vấn đề về bấy lỗi, bạn tự làm.
 
Upvote 0
Bạn đăng vào box lập trình. Chắc cũng biết code. Duyệt từ 1 tới cuối của cột A có dữ liệu
Với mỗi phần tử của cột A. Tách cột B theo dấu "/". Tách bằng split (1)
Duyệt từ 0 tới phần tử của (1)
Xong nối 2 kết quả lại với nhau là có kết quả bạn muốn rồi.
Em mới tự học được một chút rất ít nên nhiều trường hợp chưa hình dung ra được bác ạ
vẫn đang phải nhờ các bác viết giúp để học thêm ạ
Bài đã được tự động gộp:

Làm theo gọi ý của #2.
Hãy thử xem trong khi chờ các giải pháp khác.
Mã:
Option Explicit

Sub Gop()
Dim i&, j&, Lr&, t&
Dim Arr(), KQ(), S
With Sheet1
    Lr = .Cells(Rows.Count, 2).End(xlUp).Row
    If Lr <= 2 Then MsgBox " Không có dư liêu": Exit Sub
    Arr = .Range("B3:C" & Lr).Value
    ReDim KQ(1 To 1000, 1 To 1)
    For i = 1 To UBound(Arr)
        S = Split(Arr(i, 2), "/")
        For j = 0 To UBound(S)
            t = t + 1
            KQ(t, 1) = Arr(i, 1) & "/" & S(j)
        Next j
    Next i
    If t Then
        .Range("F3").Resize(1000, 1).ClearContents
        .Range("F3").Resize(t, 1) = KQ
    End If
End With
MsgBox " Xong"

End Sub
Các vấn đề về bấy lỗi, bạn tự làm.
Em thử thấy ok rồi bác ạ
Em cảm ơn bác nhiều ạ
 
Upvote 0
Bạn đăng vào box lập trình. Chắc cũng biết code. Duyệt từ 1 tới cuối của cột A có dữ liệu
Với mỗi phần tử của cột A. Tách cột B theo dấu "/". Tách bằng split (1)
Duyệt từ 0 tới phần tử của (1)
Xong nối 2 kết quả lại với nhau là có kết quả bạn muốn rồi.
Sao không sử dụng Power query cho đơn giản mà nhất thiết phải dùng đến VBA cho phức tạp:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
// Bước 2: Chia cột B thành các cột con
SplitColumn = Table.SplitColumn(Source, "Cột B", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"Cột B.1", "Cột B.2", "Cột B.3", "Cột B.4","Cột B.5"}),
#"Unpivoted Only Selected Columns" = Table.Unpivot(SplitColumn, {"Cột B.1", "Cột B.2", "Cột B.3", "Cột B.4","Cột B.5"}, "Attribute", "Value"),
#"Added Custom" = Table.AddColumn(#"Unpivoted Only Selected Columns", "Kết quả", each [Cột A]&"/"&[Value]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Attribute"})
in
#"Removed Columns"
 
Upvote 0
Sao không sử dụng Power query cho đơn giản mà nhất thiết phải dùng đến VBA cho phức tạp:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
// Bước 2: Chia cột B thành các cột con
SplitColumn = Table.SplitColumn(Source, "Cột B", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"Cột B.1", "Cột B.2", "Cột B.3", "Cột B.4","Cột B.5"}),
#"Unpivoted Only Selected Columns" = Table.Unpivot(SplitColumn, {"Cột B.1", "Cột B.2", "Cột B.3", "Cột B.4","Cột B.5"}, "Attribute", "Value"),
#"Added Custom" = Table.AddColumn(#"Unpivoted Only Selected Columns", "Kết quả", each [Cột A]&"/"&[Value]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Attribute"})
in
#"Removed Columns"
Cảm ơn bác ạ
Em vừa đang muốn học thêm chút VBA từ các bác nữa
bên cạnh đó phần dữ liệu trên em còn muốn dùng kết quả để tiếp tục trực tiếp thực hiện một số tính toán tiếp theo nên VBA sẽ thuận tiện hơn ạ
 
Upvote 0
Sao không sử dụng Power query cho đơn giản mà nhất thiết phải dùng đến VBA cho phức tạp:
...
Đối với dân DPE, lập trình VBA vừa xịn, vừa gọn (dễ xin code) hơn Power Query nhiều.
Năm trước tôi còn tưởng người ta sẽ cố học PQ, nhưng bây giờ thì đã rõ ràng.
Tất cả các công cụ mới của MS đưa vào Excel để khắc chế dữ liệu khủng đều bị dân GPE chê. Cái vỏ VBA hào nhoáng hơn.

Bạn đăng vào box lập trình. Chắc cũng biết code. Duyệt từ 1 tới cuối của cột A có dữ liệu
Với mỗi phần tử của cột A. Tách cột B theo dấu "/". Tách bằng split (1)
Duyệt từ 0 tới phần tử của (1)
Xong nối 2 kết quả lại với nhau là có kết quả bạn muốn rồi.
Đây là hiện tượng có nhiều người giúp đỡ quá cho nên sáng kiến đi trước kiến thức, bạn ạ.
 
Upvote 0
Thêm cách cho bạn. Power query
Mã:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Custom1 = Table.TransformColumns(Source,{"Cột B", each Text.Split(_,"/")}),
    #"Expanded Cột B" = Table.ExpandListColumn(Custom1, "Cột B"),
    #"Merged Columns" = Table.CombineColumns(#"Expanded Cột B",{"Cột A", "Cột B"},Combiner.CombineTextByDelimiter("/", QuoteStyle.None),"Result")
in
    #"Merged Columns"
 
Upvote 0
Đối với dân DPE, lập trình VBA vừa xịn, vừa gọn (dễ xin code) hơn Power Query nhiều.
Năm trước tôi còn tưởng người ta sẽ cố học PQ, nhưng bây giờ thì đã rõ ràng.
Tất cả các công cụ mới của MS đưa vào Excel để khắc chế dữ liệu khủng đều bị dân GPE chê. Cái vỏ VBA hào nhoáng hơn.


Đây là hiện tượng có nhiều người giúp đỡ quá cho nên sáng kiến đi trước kiến thức, bạn ạ.
Đến power query, còn có người giúp sẵn query còn gì làm , mà phải suy nghĩ cho mệt bác.
 
Upvote 0
Web KT

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

Back
Top Bottom