Copy dữ liệu dòng thành cột bằng VBA hoặc dùng Pivot

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Vui lòng giúp chuyển đổi Cột thành Dòng theo file đính kèm – Do file này dữ liệu gần 500,000 dòng nên file rất nặng

Trong đây có 02 Sheet:

– Sheet 1: dữ liệu gốc "tên DATA"
– Sheet 2: Pivot – mình đang sử dụng Pivot nhưng file excel quá nặng vì còn phải xử lý nhiều file tồn kho khác trong đây. Nên mình cần hỗ trợ

1. Ở Sheet "Pivot" có thể dùng VBA lấy dữ liệu từ Sheet DATA để làm Pivot thành dữ liệu như file đính kèm – trong đây Cột C tất cả các dòng được chuyển thành từng cột riêng biệt
2. Có thể dùng VBA để chuyển đổi Cột C "Ma_Kho" thành từng cột ở Sheet "Pivot" còn lại thì dữ liệu giống như Sheet "Pivot"

Xin cảm ơn

Tạo sheet lưu kết quả

Sub XYZ()
  Dim sArr(), aKho(), aHang(), Res(), Dic As Object, iKey$
  Dim i&, sRow, k&, iR&, jC&, sR&, sC&

Application.ScreenUpdating = False
  Set Dic = CreateObject("scripting.dictionary")
  Dic.CompareMode = vbTextCompare
  ReDim aKho(1 To 1, 1 To 16000) 'Tam lay 16000 Cot
  ReDim aHang(1 To 10000, 1 To 7) 'Tam lay 10000 dòng (10.000 Ma Vat Tu)
  With Sheets("DATA")
    sArr = .Range("C2", .Range("X" & Rows.Count).End(xlUp)).Value
  End With
  sRow = UBound(sArr)
  For i = 1 To sRow
    iKey = sArr(i, 1)
    If Dic.exists(iKey) = False Then
      sC = sC + 1
      Dic.Item(iKey) = sC
      aKho(1, sC) = iKey
    End If
    iKey = sArr(i, 22) & "|" & sArr(i, 20) & "|" & sArr(i, 21) & "|" & sArr(i, 8) & "|" & sArr(i, 12) & "|" & sArr(i, 7)
    If Dic.exists(iKey) = False Then
      sR = sR + 1
      Dic.Item(iKey) = sR
      aHang(sR, 1) = sArr(i, 22)
      aHang(sR, 2) = sArr(i, 20)
      aHang(sR, 3) = sArr(i, 21)
      aHang(sR, 4) = sArr(i, 8)
      aHang(sR, 5) = sArr(i, 12)
      aHang(sR, 6) = sArr(i, 7)
      aHang(sR, 7) = iKey
    End If
  Next i
  ReDim Res(1 To sR, 1 To sC)
  With Sheets("KQ")
    .Range("A5").Resize(sR, 7) = aHang
    .Range("A5").Resize(sR, 7).Sort .Range("G5"), 1, Orientation:=xlTopToBottom
    aHang = .Range("A5").Resize(sR, 7).Value
    .Range("G4").Resize(1, sC) = aKho
    .Range("G4").Resize(1, sC).Sort .Range("G4"), 1, Orientation:=xlLeftToRight
    aKho = .Range("G4").Resize(1, sC).Value

For i = 1 To sR
      Dic.Item(aHang(i, 7)) = i
    Next i
    For j = 1 To sC
      Dic.Item(aKho(1, j)) = j
    Next j
    For i = 1 To sRow
      iKey = sArr(i, 22) & "|" & sArr(i, 20) & "|" & sArr(i, 21) & "|" & sArr(i, 8) & "|" & sArr(i, 12) & "|" & sArr(i, 7)
      iR = Dic.Item(iKey)
      jC = Dic.Item(sArr(i, 1))
      Res(iR, jC) = Res(iR, jC) + sArr(i, 17)
    Next i
    .Range("G5").Resize(sR, sC) = Res
  End With
  Application.ScreenUpdating = True
End Sub

www.giaiphapexcel.com/diendan/threads/copy-d%E1%BB%AF-li%E1%BB%87u-d%C3%B2ng-th%C3%A0nh-c%E1%BB%99t-b%E1%BA%B1ng-vba-ho%E1%BA%B7c-d%C3%B9ng-pivot.153523/#post-1007848

Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Khóa học SprinGO phù hợp

Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ

Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...

Xem khóa học
★★★★★ 5 ★ 1 👤 3 ▥ 0
Quảng cáo

Bạn nên đọc

Bình luận

Quảng cáo

Cũ vẫn chất

Xem thêm