Copy dữ liệu dòng thành cột bằng VBA hoặc dùng Pivot
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ụ
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
Bình luận