triển khai dữ liệu từ dòng sang vừa dòng vừa cột

Liên hệ QC

buonphatchan12

Thành viên mới
Tham gia
21/10/20
Bài viết
35
Được thích
1
Chào mọi người! EM có vấn đề này cần mọi người giúp đỡ một chút ạ!
Em có một file excel như đính kèm!
Ở trên file có cột A em sẽ là cột được triển khai thành cột ở mảng kết quả, còn các cột còn lại được triển khai theo tổng đựa vào mã ở cột A. Kết quả em cần đã viết ở trên file đính kèm. Code theo dictionary theo hàng ngang thì em biết nhưng thêm điều kiện triển khai ra hàng dọc em chưa được biết. Mong mọi người giúp đỡ em với ạ!
 

File đính kèm

  • test.xlsx
    14.2 KB · Đọc: 18
Chào mọi người! EM có vấn đề này cần mọi người giúp đỡ một chút ạ!
Em có một file excel như đính kèm!
Ở trên file có cột A em sẽ là cột được triển khai thành cột ở mảng kết quả, còn các cột còn lại được triển khai theo tổng đựa vào mã ở cột A. Kết quả em cần đã viết ở trên file đính kèm. Code theo dictionary theo hàng ngang thì em biết nhưng thêm điều kiện triển khai ra hàng dọc em chưa được biết. Mong mọi người giúp đỡ em với ạ!
Chạy code
Mã:
Sub XYZ()
  Dim sArr(), Res(), Res2$(), Dic As Object, tem$, code$
  Dim sRow&, i&, r&, iR&, sCol&, c&, jC&, tDate As Date
 

  Set Dic = CreateObject("scripting.dictionary")
  With Sheets("Sheet1")
    sArr = .Range("A2", Range("F" & Rows.Count).End(xlUp)).Value
    .Range("I4").CurrentRegion.ClearContents
  End With
  sRow = UBound(sArr)
  sCol = 32
  tDate = Date 'tDate = DateValue("2021/4/4")
  ReDim Res(1 To sRow + 2, 1 To sCol)
  ReDim Res2(1 To sRow + 2, 1 To 1)
  r = 2: c = 2
  Res(r, 1) = "Item": Res2(r, 1) = "Code"
  For i = 1 To sRow
    If sArr(i, 5) < 0 Then
      tem = sArr(i, 2)
      If Dic.exists(tem) = False Then
        r = r + 1
        Dic.Add tem, r
        Res(r, 1) = tem: Res2(r, 1) = sArr(i, 3)
      End If
    
      code = sArr(i, 1)
      If Dic.exists(code) = False Then
        c = c + 1
        Dic.Add code, c
        If sCol < c Then
          sCol = sCol + 30
          ReDim Preserve Res(1 To sRow + 2, 1 To sCol)
        End If
        Res(1, c) = tDate
        Res(2, c) = code
      End If

      iR = Dic.Item(tem):    jC = Dic.Item(code)
      If InStr(1, "001,002,003", sArr(i, 3)) Then
        Res(iR, jC) = Res(iR, jC) + sArr(i, 6)
      Else
        Res(iR, jC) = Res(iR, jC) + sArr(i, 5)
      End If
    End If
  Next i
    
  Sheets("Sheet1").Range("I4").Resize(r, c) = Res
  Sheets("Sheet1").Range("J4").Resize(r) = Res2
End Sub
 
Upvote 0
Dòng mà chuyển thành vừa dòng vừa cột là Pivot, hoặc CrossTab.
 
Upvote 0
Chào mọi người! EM có vấn đề này cần mọi người giúp đỡ một chút ạ!
Em có một file excel như đính kèm!
Ở trên file có cột A em sẽ là cột được triển khai thành cột ở mảng kết quả, còn các cột còn lại được triển khai theo tổng đựa vào mã ở cột A. Kết quả em cần đã viết ở trên file đính kèm. Code theo dictionary theo hàng ngang thì em biết nhưng thêm điều kiện triển khai ra hàng dọc em chưa được biết. Mong mọi người giúp đỡ em với ạ!
Tôi thấy bạn ghi kết quả nó khác với kết quả mà bạn đã miêu tả, Thiếu mã N21-895, và số lượng từng Item cũng khác.

1617768072475.png
 
Upvote 0
Tôi thử chạy Pivot, thấy kết quả khác với kết quả mẫu, lại làm biếng kiểm tra nên thôi.
Tôi quên thêm phần chú: "không pivot được thì là lỗi thiết kế bảng dỏm"

Khi bước vào mọt fiule Excel, phải tính trước "mình sẽ làm gì với mớ dữ liệu này?". Và thiết kế bảng cho hợp lý.
Nếu dữ liệu lấy về từ nới khác, thô quá thì nên tìm cách chuyển nó vào bảng chuẩn. Microsoft đã ra Data Model là để dự trường hợp này.
 
Upvote 0
Tôi thấy bạn ghi kết quả nó khác với kết quả mà bạn đã miêu tả, Thiếu mã N21-895, và số lượng từng Item cũng khác.

View attachment 256684
Tôi thấy bạn ghi kết quả nó khác với kết quả mà bạn đã miêu tả, Thiếu mã N21-895, và số lượng từng Item cũng khác.

View attachment 256684
Code mình lấy về đưa vào dữ liệu k đúng cho nên phải sửa chỗ này
1617844137066.png

Thì kết quả nó trả về đúng rồi ạ
1617844168799.png
 
Upvote 0
Web KT

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

Back
Top Bottom