Chuyển dữ liệu sắp xếp theo hàng ngang về dạng cột dọc

Liên hệ QC

hoangtuaotrang_hp_vn

Thành viên tiêu biểu
Tham gia
17/5/09
Bài viết
792
Được thích
661
Em muốn chuyển và tập hợp dữ liệu ở tất cả các sheet của file "Du lieu" về chung 1 sheet của file "Mong muon" (theo cấu trúc của file "Mong muon" luôn ạ ,

Em thử làm thủ công thì thấy lâu quá, mong anh/chị giúp giải pháp cho nhanh hơn với ạ

Em chân thành cảm ơn

chuyen du lieu hang ngang ve cot doc.jpg
 

File đính kèm

  • Mong muon.xlsx
    13.5 KB · Đọc: 6
  • Du lieu.xlsx
    924.9 KB · Đọc: 6
Lần chỉnh sửa cuối:

File đính kèm

  • Du lieu.xlsm
    945.6 KB · Đọc: 8
Em chào các anh/chị,

em lại gặp phải vấn đề với dạng bài này,

Em có sheet 'Du lieu' muốn chuyển dạng hàng ngang thành cột dọc như sheet 'Mong Muon', chi tiết em mô tả trong file,

mong anh/chị giúp em với ạ,

Em chân thành cảm ơn anh/chị
 

File đính kèm

  • Chuyen du lieu hang ngang thanh hang doc.xlsx
    165 KB · Đọc: 8
Em chào các anh/chị,

em lại gặp phải vấn đề với dạng bài này,

Em có sheet 'Du lieu' muốn chuyển dạng hàng ngang thành cột dọc như sheet 'Mong Muon', chi tiết em mô tả trong file,

mong anh/chị giúp em với ạ,

Em chân thành cảm ơn anh/chị
Bạn xem code nhé.Những dòng không có lỗi nào sẽ không cho vào đấy.
Mã:
Sub chuyencot()
    Dim arr, arr1, i As Long, j As Long, lr As Long, lc As Integer, a As Long, T
    With Sheets("du lieu")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         lc = .Cells(1, Columns.Count).End(xlToLeft).Column
         arr = .Range("A1").Resize(lr, lc).Value
         ReDim arr1(1 To UBound(arr, 1) * 20, 1 To UBound(arr, 2))
         For i = 1 To UBound(arr, 2)
             arr1(1, i) = arr(1, i)
         Next i
         For i = 13 To UBound(arr, 2)
             T = Split("(" & arr(1, i), "(")
            If UBound(T) > 1 Then arr(1, i) = Left(T(UBound(T)), Len(T(UBound(T))) - 1) Else arr(i, 1) = T(1)
         Next i
         a = 1
         For i = 2 To UBound(arr, 1)
             a = a + 1
             For j = 1 To 10
                 arr1(a, j) = arr(i, j)
             Next j
             For j = 13 To UBound(arr, 2)
                 arr1(a, j) = arr(i, j)
             Next j
             For j = 13 To UBound(arr, 2)
                 If Len(arr(i, j)) > 0 Then
                    arr1(a, 11) = arr(1, j)
                    arr1(a, 12) = arr(i, j)
                    a = a + 1
                 End If
             Next j
             a = a - 1
        Next i
    End With
    With Sheets("mong muon")
         .Cells.ClearContents
         If a Then .Range("A1").Resize(a, lc).Value = arr1
    End With
End Sub
 

File đính kèm

  • Chuyen du lieu hang ngang thanh hang doc.xlsm
    258 KB · Đọc: 7
@snow25 : anh ơi, anh giúp em thêm chút được không ạ, em muốn copy thông tin giống nhau xuống các dòng dưới (riêng số lượng nhập thì không copy xuống vì sẽ bị trùng lặp khi dùng hàm thống kê ạ) Copy thông tin của dòng trên.png
 
@snow25 : anh ơi, anh giúp em thêm chút được không ạ, em muốn copy thông tin giống nhau xuống các dòng dưới (riêng số lượng nhập thì không copy xuống vì sẽ bị trùng lặp khi dùng hàm thống kê ạ) View attachment 213459
Bạn xem code.
Mã:
Sub chuyencot()
    Dim arr, arr1, i As Long, j As Long, lr As Long, lc As Integer, a As Long, T, k As Integer
    With Sheets("du lieu")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         lc = .Cells(1, Columns.Count).End(xlToLeft).Column
         arr = .Range("A1").Resize(lr, lc).Value
         ReDim arr1(1 To UBound(arr, 1) * 20, 1 To UBound(arr, 2))
         For i = 1 To UBound(arr, 2)
             arr1(1, i) = arr(1, i)
         Next i
         For i = 13 To UBound(arr, 2)
             T = Split("(" & arr(1, i), "(")
            If UBound(T) > 1 Then arr(1, i) = Left(T(UBound(T)), Len(T(UBound(T))) - 1) Else arr(i, 1) = T(1)
         Next i
         a = 1
         For i = 2 To UBound(arr, 1)
             a = a + 1
             arr1(a, 10) = arr(i, 10)
             For j = 13 To UBound(arr, 2)
                 arr1(a, j) = arr(i, j)
             Next j
             For j = 13 To UBound(arr, 2)
                 If Len(arr(i, j)) > 0 Then
                    For k = 1 To 9
                       arr1(a, k) = arr(i, k)
                    Next k
                    arr1(a, 11) = arr(1, j)
                    arr1(a, 12) = arr(i, j)
                    a = a + 1
                 End If
             Next j
             a = a - 1
        Next i
    End With
    With Sheets("mong muon")
         .Cells.ClearContents
         If a Then .Range("A1").Resize(a, lc).Value = arr1
    End With
End Sub
 
Web KT
Back
Top Bottom