Cách tách dữ liệu trong 1 dòng thành nhiều dòng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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

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

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

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

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

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

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
 
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
Mình gửi lại file kết quả đã lược bớt dữ liệu.

1638786763367.png

Khi thực hiện thao tác thủ công bằng tay sẽ thực hiện các bước như sau:
  1. Filter Cột A:C, lọc những giá trị > 0, copy vùng lọc được sang Cột N:Q;
  2. Tiếp đó, Filter Cột D, lọc những giá trị > 0, copy vùng lọc được (Cột A, B, D), copy paste nối tiếp sang vùng ở Cột N:Q;
  3. Filter Cột E, lọc những giá trị > 0, copy vùng lọc được (Cột A, B, E), copy paste nối tiếp sang vùng ở Cột N:Q;
  4. ....
  5. Làm tương tự với những Cột còn lại cho tới hết những cột còn lại.
 

File đính kèm

Mình gửi lại file kết quả đã lược bớt dữ liệu.
Chỉnh lại code
Mã:
Sub XYZ()
    Dim Arr(), Res(), i&, J&, iRow&, K&
With Sheet1
    iRow = .Range("B" & Rows.Count).End(3).Row
    Arr = .Range("A1:J" & iRow).Value
    ReDim Res(1 To UBound(Arr, 1) * (UBound(Arr, 2) - 2), 1 To 4)
    For J = 3 To UBound(Arr, 2)
        For i = 2 To UBound(Arr, 1)
            If Val(Arr(i, J)) > 0 Then
                K = K + 1
                Res(K, 1) = Arr(i, 1)
                Res(K, 2) = Arr(i, 2)
                Res(K, 3) = Arr(1, J)
                Res(K, 4) = Arr(i, J)
            End If
        Next
    Next
    .Range("N2:Q" & .Rows.Count).ClearContents
    .Range("N2").Resize(K, 4).Value = Res
End With
End Sub
 
Chỉnh lại code
Mã:
Sub XYZ()
    Dim Arr(), Res(), i&, J&, iRow&, K&
With Sheet1
    iRow = .Range("B" & Rows.Count).End(3).Row
    Arr = .Range("A1:J" & iRow).Value
    ReDim Res(1 To UBound(Arr, 1) * (UBound(Arr, 2) - 2), 1 To 4)
    For J = 3 To UBound(Arr, 2)
        For i = 2 To UBound(Arr, 1)
            If Val(Arr(i, J)) > 0 Then
                K = K + 1
                Res(K, 1) = Arr(i, 1)
                Res(K, 2) = Arr(i, 2)
                Res(K, 3) = Arr(1, J)
                Res(K, 4) = Arr(i, J)
            End If
        Next
    Next
    .Range("N2:Q" & .Rows.Count).ClearContents
    .Range("N2").Resize(K, 4).Value = Res
End With
End Sub
Kết quả đúng như mình cần rồi. Chân thành cảm bạn!
 
Thì bạn cứ Copy & dán thôi;
Nếu muốn đỡ vất vả thì thực hiện việc Copy & dán nhuần nghuyễn, sau đó mở bộ thu macro lên là OK mà!
Nếu thấy các câu lệnh trong macro lôi thôi thì gởi lên anh cộng đồng cô gọn cho duyên dáng thêm!
Chúc ngày nghỉ cuối tuần vui vẻ!
 
Thì bạn cứ Copy & dán thôi;
Nếu muốn đỡ vất vả thì thực hiện việc Copy & dán nhuần nghuyễn, sau đó mở bộ thu macro lên là OK mà!
Nếu thấy các câu lệnh trong macro lôi thôi thì gởi lên anh cộng đồng cô gọn cho duyên dáng thêm!
Chúc ngày nghỉ cuối tuần vui vẻ!
ANH CHỊ CÓ CÁCH NÀO CHỈ E VỚI Ạ, E MỚI TÌM HỌC CÒN NHIỀU THỨ KHÔNG BIẾT Ạ!
 
PHP:
Sub CopyDongThanhBang()
 Dim Col As Integer, J As Long, Dong As Long

 Col = [B1].CurrentRegion.Cells.Count
 Dong = 4
 For J = 1 To Col Step 5
    Cells(1, J).Resize(, 5).Copy Destination:=Cells(Dong, "A")
    Dong = Dong + 1
 Next J
End Sub
 
Bài viết toàn chữ hoa là phạm quy. Hỏng biết mấy người nghiện code có biết hông? Hay đối với cơn nghiện thì cái gì cũng phê được?
 
Đúng, bài viết toàn chữ in đang là sai;
& cái sai này đã có người được phân công (phải nghiện) lo trước; /(HÀ, KHÀ, /(hà, khà, . . . . .
Trước mình cũng tham gia, nhưng giờ thì MAC KE NO. . . . .!

CB05.jpg
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom