Cách tách dữ liệu trong 1 dòng thành nhiều dòng

Liên hệ QC

lamhongquanghp

Thành viên mới
Tham gia
31/8/11
Bài viết
5
Được thích
0
Em có 1 file dữ liệu có 1 dòng chưa nhiều dữ liệu cần tách ra mỗi dữ liệu 1 dòng. Bác nào có công thức làm chỉ em với
Đây là dữ liệu của em
Ví dụ: với số công bố 34520 thì có 9 mã hàng, giờ em muốn tách ra thành 9 dòng, mỗi dòng là 2 cột gồm 1 cột ghi số công bố 34520 và cột còn lại ghi 1 trong 9 mã hàng trên
Đa tạ các bác
 

File đính kèm

  • CBCL.xlsx
    14.2 KB · Đọc: 65
Em có 1 file dữ liệu có 1 dòng chưa nhiều dữ liệu cần tách ra mỗi dữ liệu 1 dòng. Bác nào có công thức làm chỉ em với
Đây là dữ liệu của em
Ví dụ: với số công bố 34520 thì có 9 mã hàng, giờ em muốn tách ra thành 9 dòng, mỗi dòng là 2 cột gồm 1 cột ghi số công bố 34520 và cột còn lại ghi 1 trong 9 mã hàng trên
Đa tạ các bác
bài này công thức thì chưa biết có hay không, cho dù có đi chăng nữa thì cũng rất chậm... bài này giải quyết bằng macro thì ok không có vấn đề gì?
 
Em có 1 file dữ liệu có 1 dòng chưa nhiều dữ liệu cần tách ra mỗi dữ liệu 1 dòng. Bác nào có công thức làm chỉ em với
Đây là dữ liệu của em
Ví dụ: với số công bố 34520 thì có 9 mã hàng, giờ em muốn tách ra thành 9 dòng, mỗi dòng là 2 cột gồm 1 cột ghi số công bố 34520 và cột còn lại ghi 1 trong 9 mã hàng trên
Đa tạ các bác
Bạn xem file nhé.
 

File đính kèm

  • CBCL.xlsx
    15.1 KB · Đọc: 150
bài này công thức thì chưa biết có hay không, cho dù có đi chăng nữa thì cũng rất chậm... bài này giải quyết bằng macro thì ok không có vấn đề gì?
Bác có thể giải quyết bằng Macro ra 1 sheet bên cạnh giúp em ko?
Bác có hướng giải quyết bằng hàm không hướng cho em bước đi cơ bản để em tự nghiên cứu hàm cũng được ạ :D
 
Em có 1 file dữ liệu có 1 dòng chưa nhiều dữ liệu cần tách ra mỗi dữ liệu 1 dòng. Bác nào có công thức làm chỉ em với
Đây là dữ liệu của em
Ví dụ: với số công bố 34520 thì có 9 mã hàng, giờ em muốn tách ra thành 9 dòng, mỗi dòng là 2 cột gồm 1 cột ghi số công bố 34520 và cột còn lại ghi 1 trong 9 mã hàng trên
Đa tạ các bác
Bạn tham khảo:
PHP:
Sub abc()
    Dim x, dArr(), Sp
    Dim i As Long, j As Long, k As Long, n As Long
    Application.ScreenUpdating = False
    With Range("A4").CurrentRegion
        x = .Value
        ReDim dArr(1 To UBound(x) * 5, 1 To UBound(x, 2))
        For i = 1 To UBound(x)
            Sp = Split(x(i, 3), ",")
            For j = 0 To UBound(Sp)
                If Len(Sp(j)) Then
                    k = k + 1
                    For n = 1 To UBound(x, 2) - 1
                        dArr(k, n) = x(i, n)
                    Next n
                    dArr(k, n) = Sp(j)
                End If
            Next j
        Next i
        .Resize(k).Value = dArr()
    End With
    Columns.AutoFit
    Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
dùng công thức khác để tách dữ liệu
 

File đính kèm

  • CBCL.xlsx
    15 KB · Đọc: 92
Em có 1 file dữ liệu có 1 dòng chưa nhiều dữ liệu cần tách ra mỗi dữ liệu 1 dòng. Bác nào có công thức làm chỉ em với
Đây là dữ liệu của em
Ví dụ: với số công bố 34520 thì có 9 mã hàng, giờ em muốn tách ra thành 9 dòng, mỗi dòng là 2 cột gồm 1 cột ghi số công bố 34520 và cột còn lại ghi 1 trong 9 mã hàng trên
Đa tạ các bác

Code:
Sub Transpose_range()
Dim SoDong As Long
Dim Arr As Variant
SoDong = Sheet1.Range("B5").End(xlDown).Row
Sheet2.Range("B2").Resize(, SoDong - 3) = WorksheetFunction.Transpose(Sheet1.Range("B5:B" & SoDong))
For i = 5 To SoDong
If Sheet1.Cells(i, "C").Value Like "*,*" Then
Arr = Split(Sheet1.Cells(i, "C"), ", ")
Sheet2.Cells(3, i - 3).Resize(UBound(Arr) + 1, 1) = WorksheetFunction.Transpose(Arr)
Else
Sheet2.Cells(3, i - 3) = Sheet1.Cells(i, "C")
End If
Next
End Sub

File đính kèm.
 

File đính kèm

  • Transpose_range.xlsm
    25.6 KB · Đọc: 58
Bạn xem giúp mình tự động tách dong theo cột số lượng với
1/ "Tách dong theo cột số lượng": Khó hiểu. Viết xong cũng chẳng đọc lại xem mình viết có đủ dấu, chính tả không.
2/ Công "đào mộ" cũng đáng để giúp 1 Sub "cùi bắp"
PHP:
Option Explicit

Public Sub Gpe()
Application.ScreenUpdating = False
Dim sArr(), dArr(), I As Long, J As Long, N As Long, K As Long, R As Long, x As Long
    sArr = Range("A1", Range("A1000000").End(xlUp)).Resize(, 10).Value
    R = UBound(sArr)
ReDim dArr(1 To R * 50, 1 To 3)
For I = 2 To R
    For J = 3 To 10
        x = Val(sArr(I, J))
        If x > 0 Then
            For N = 1 To x
                K = K + 1
                dArr(K, 1) = sArr(I, 1)
                dArr(K, 2) = sArr(I, 2)
                dArr(K, 3) = sArr(1, J)
            Next N
        End If
    Next J
Next I
Range("N2").Resize(100000, 3).ClearContents
Range("N2").Resize(K, 3) = dArr
End Sub
 
1/ "Tách dong theo cột số lượng": Khó hiểu. Viết xong cũng chẳng đọc lại xem mình viết có đủ dấu, chính tả không.
2/ Công "đào mộ" cũng đáng để giúp 1 Sub "cùi bắp"
PHP:
Option Explicit

Public Sub Gpe()
Application.ScreenUpdating = False
Dim sArr(), dArr(), I As Long, J As Long, N As Long, K As Long, R As Long, x As Long
    sArr = Range("A1", Range("A1000000").End(xlUp)).Resize(, 10).Value
    R = UBound(sArr)
ReDim dArr(1 To R * 50, 1 To 3)
For I = 2 To R
    For J = 3 To 10
        x = Val(sArr(I, J))
        If x > 0 Then
            For N = 1 To x
                K = K + 1
                dArr(K, 1) = sArr(I, 1)
                dArr(K, 2) = sArr(I, 2)
                dArr(K, 3) = sArr(1, J)
            Next N
        End If
    Next J
Next I
Range("N2").Resize(100000, 3).ClearContents
Range("N2").Resize(K, 3) = dArr
End Sub
Cho phép em xin được mở rộng thêm tình huống này chút.

Nhờ Thầy và mọi người hướng dẫn thêm giúp trường hợp muốn tách dữ liệu các cột theo từng nhóm như kết quả file đính kèm thì cần chỉnh code như thế nào?

Mong được mọi người giúp đỡ!
 

File đính kèm

  • Tách dòng theo nhóm.xlsb
    243.3 KB · Đọc: 19
Cho phép em xin được mở rộng thêm tình huống này chút.

Nhờ Thầy và mọi người hướng dẫn thêm giúp trường hợp muốn tách dữ liệu các cột theo từng nhóm như kết quả file đính kèm thì cần chỉnh code như thế nào?

Mong được mọi người giúp đỡ!
Cột số liệu bạn lấy như nào thế
 
Cột số liệu bạn lấy như nào thế
Có vẻ copy nguyên cột xuống thôi thì phải bạn ạ.

Cảm ơn hai bạn đã quan tâm.
Trường hợp này là mình cần dồn các cột có số liệu khác 0 từ Cột C đến Cột J về lại một cột theo từng nhóm bạn ah!

1638676878600.png

File kết quả cần xử lý mình có gửi lại ở bài trên!
 
Trường hợp này là mình cần dồn các cột có số liệu khác 0 từ Cột C đến Cột J về lại một cột theo từng nhóm bạn ah!
Nếu thế thì sort theo cái cột Q, Hạng mục ấy là được chứ có làm gì nữa đâu
 
Nếu thế thì sort theo cái cột Q, Hạng mục ấy là được chứ có làm gì nữa đâu
Mình có chỉnh lại code một chút nhưng kết quả chưa được như ý đồ bài #12, mong bạn và mọi người chỉnh giúp:
PHP:
Public Sub Gpe()
Application.ScreenUpdating = False
Dim sArr(), dArr(), i As Long, J As Long, N As Long, K As Long, R As Long, x As Long
    sArr = Range("A1", Range("A1000000").End(xlUp)).Resize(, 10).Value
    R = UBound(sArr)
ReDim dArr(1 To R * 50, 1 To 4)
For i = 2 To R
    For J = 3 To 10
        x = Val(sArr(i, J))
        If x > 0 Then
            For N = 1 To x
                K = K + 1
                dArr(K, 1) = sArr(i, 1)
                dArr(K, 2) = sArr(i, 2)
                dArr(K, 3) = sArr(1, J)
                dArr(K, 4) = sArr(i, J)
            Next N
        End If
    Next J
Next i
Range("N2").Resize(100000, 4).ClearContents
Range("N2").Resize(K, 4) = dArr
Range("N1", Range("N1000000").End(xlUp)).Resize(, 4).RemoveDuplicates Columns:=Array(1, 2, 3, 4), Header:=xlYes
Range("N1", Range("N1000000").End(xlUp)).Resize(, 4).Sort Key1:=Range("P2"), Order1:=xlAscending, Key2:=Range("N2"), Order1:=xlAscending, Orientation:=xlTopToBottom, Header:=xlYes
End Sub
 
Mình có chỉnh lại code một chút nhưng kết quả chưa được như ý đồ bài #12, mong bạn và mọi người chỉnh giúp:
Thử code coi đúng ý không?
Mã:
Sub XYZ()
    Dim Arr(), Res(), i&, J&, iRow&, R&, ii&, K&
    With Sheet1
        R = Application.WorksheetFunction.Sum(.Range("C:J")) * 2
        If R > .Rows.Count Then MsgBox "Khong du dong de chua": Exit Sub
        iRow = .Range("B" & Rows.Count).End(3).Row
        Arr = .Range("A1:J" & iRow).Value
        ReDim Res(1 To R, 1 To 4)
        For i = 2 To UBound(Arr, 1)
            For J = 3 To UBound(Arr, 2)
                If Val(Arr(i, J)) > 0 Then
                    For ii = 1 To Arr(i, J)
                        K = K + 1
                        Res(K, 1) = Arr(i, 1)
                        Res(K, 2) = Arr(i, 2)
                        Res(K, 3) = Arr(i, J)
                        Res(K, 4) = Arr(1, J)
                    Next
                End If
            Next
        Next
        .Range("R2:R" & .Rows.Count).ClearContents
        .Range("R2").Resize(K, 4).Value = Res
        .Range("R2").Resize(K, 4).Sort .Range("U1"), xlAscending
    End With
End Sub
 
Thử code coi đúng ý không?
Mã:
Sub XYZ()
    Dim Arr(), Res(), i&, J&, iRow&, R&, ii&, K&
    With Sheet1
        R = Application.WorksheetFunction.Sum(.Range("C:J")) * 2
        If R > .Rows.Count Then MsgBox "Khong du dong de chua": Exit Sub
        iRow = .Range("B" & Rows.Count).End(3).Row
        Arr = .Range("A1:J" & iRow).Value
        ReDim Res(1 To R, 1 To 4)
        For i = 2 To UBound(Arr, 1)
            For J = 3 To UBound(Arr, 2)
                If Val(Arr(i, J)) > 0 Then
                    For ii = 1 To Arr(i, J)
                        K = K + 1
                        Res(K, 1) = Arr(i, 1)
                        Res(K, 2) = Arr(i, 2)
                        Res(K, 3) = Arr(i, J)
                        Res(K, 4) = Arr(1, J)
                    Next
                End If
            Next
        Next
        .Range("R2:R" & .Rows.Count).ClearContents
        .Range("R2").Resize(K, 4).Value = Res
        .Range("R2").Resize(K, 4).Sort .Range("U1"), xlAscending
    End With
End Sub
Trước hết, mình cảm ơn bạn đã quan tâm và giúp đỡ!
Mình xin lỗi do mình trình bày vấn đề chưa rõ, kết quả mình cần trường hợp này là mình muốn "Gom các cột có số liệu khác 0 từ Cột C đến Cột J về lại một cột theo từng nhóm", kết quả như mẫu file đính kèm. Nhờ bạn và mọi người xem thêm giúp nhé!
 

File đính kèm

  • Gom du lieu nhieu Cot.xlsb
    508.6 KB · Đọc: 15
Trước hết, mình cảm ơn bạn đã quan tâm và giúp đỡ!
Mình xin lỗi do mình trình bày vấn đề chưa rõ, kết quả mình cần trường hợp này là mình muốn "Gom các cột có số liệu khác 0 từ Cột C đến Cột J về lại một cột theo từng nhóm", kết quả như mẫu file đính kèm. Nhờ bạn và mọi người xem thêm giúp nhé!
Bạn nên xoá dữ liệu bớt đi. Để lại 1 ít thôi. Và kết quả điền bằng tay xem thế nào. mình vẫn chưa thông được cái đoạn
Gom các cột có số liệu khác 0 từ Cột C đến Cột J về lại một cột theo từng nhóm
này luôn ấy
 
Web KT
Back
Top Bottom