Code VBA tính tổng từ 2 bảng khác nhau thành 1 bảng

Liên hệ QC

moihocvba

Thành viên thường trực
Tham gia
16/8/20
Bài viết
211
Được thích
50
Chào anh chị GPE, anh chị giúp em viết một code VBA lấy giá trị tên hàng và không trùng từ CỬA HÀNG 1 VÀ CỬA HÀNG 2 sau đó cộng số lượng đó lại cho ra kết quả là bảng TỔNG 2 CỬA HÀNG giúp em với!
Tổng hợp từ 1 bảng thì em dùng dictionary đc, nhưng kết hợp 2 bảng tự nhiên em bị rối.
Em cảm ơn anh chị nhiều ạ!

1621217710296.png
 

File đính kèm

  • Loc Trung.xlsm
    9.7 KB · Đọc: 20
Bạn copy code này về sử dụng và sửa lại theo ý muốn
Mã:
Sub Gop_Dulieu()
Dim sArr1(), sArr2(), Dic As Object, Res()
Dim i As Long, k As Long, tmp As String, sArr(), n As Long, x As Long
Set Dic = CreateObject("scripting.dictionary")
With Sheets("DL1")
   sArr1 = .Range("B5", .Range("B" & Rows.Count).End(3)).Resize(, 9).Value
End With
With Sheets("DL2")
   sArr2 = .Range("B5", .Range("B" & Rows.Count).End(3)).Resize(, 9).Value
End With
sArr = Array(sArr1, sArr2)
ReDim Res(1 To (UBound(sArr1) + UBound(sArr2)), 1 To 9)
For n = LBound(sArr) To UBound(sArr)
   For i = 1 To UBound(sArr(n))
      If sArr(n)(i, 1) <> Empty Then
         tmp = sArr(n)(i, 1) & sArr(n)(i, 2) & sArr(n)(i, 3) & sArr(n)(i, 4) & sArr(n)(i, 5) & sArr(n)(i, 6)
         tmp = Replace(LCase(tmp), " ", "")
         If Not Dic.exists(tmp) Then
            k = k + 1
            Dic.Add tmp, k
            Res(k, 1) = sArr(n)(i, 1)
            Res(k, 2) = sArr(n)(i, 2)
            Res(k, 3) = sArr(n)(i, 3)
            Res(k, 4) = sArr(n)(i, 4)
            Res(k, 5) = sArr(n)(i, 5)
            Res(k, 6) = sArr(n)(i, 6)
            Res(k, n + 7) = sArr(n)(i, 8) 'lay so luong
            Res(k, 9) = sArr(n)(i, 9) 'thanh tien
         Else
            x = Dic.Item(tmp)
            Res(x, n + 7) = Res(x, n + 7) + sArr(n)(i, 8) 'cong don so luong
            Res(x, 9) = Res(x, 9) + sArr(n)(i, 9) 'cong don thanh tien
         End If
      End If
   Next
   k = k + 1
Next
Sheets("GOP").Range("B5").Resize(k, 9) = Res 'gan ket qua xuong sheet
End Sub
Còn sắp xếp lại theo ngày, mỗi ngày cách nhau 1 dòng trống.
"Đụng hàng" ở đây nữa
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn copy code này về sử dụng và sửa lại theo ý muốn
Mã:
Sub Gop_Dulieu()
Dim sArr1(), sArr2(), Dic As Object, Res()
Dim i As Long, k As Long, tmp As String, sArr(), n As Long, x As Long
Set Dic = CreateObject("scripting.dictionary")
With Sheets("DL1")
   sArr1 = .Range("B5", .Range("B" & Rows.Count).End(3)).Resize(, 9).Value
End With
With Sheets("DL2")
   sArr2 = .Range("B5", .Range("B" & Rows.Count).End(3)).Resize(, 9).Value
End With
sArr = Array(sArr1, sArr2)
ReDim Res(1 To (UBound(sArr1) + UBound(sArr2)), 1 To 9)
For n = LBound(sArr) To UBound(sArr)
   For i = 1 To UBound(sArr(n))
      If sArr(n)(i, 1) <> Empty Then
         tmp = sArr(n)(i, 1) & sArr(n)(i, 2) & sArr(n)(i, 3) & sArr(n)(i, 4) & sArr(n)(i, 5) & sArr(n)(i, 6)
         tmp = Replace(LCase(tmp), " ", "")
         If Not Dic.exists(tmp) Then
            k = k + 1
            Dic.Add tmp, k
            Res(k, 1) = sArr(n)(i, 1)
            Res(k, 2) = sArr(n)(i, 2)
            Res(k, 3) = sArr(n)(i, 3)
            Res(k, 4) = sArr(n)(i, 4)
            Res(k, 5) = sArr(n)(i, 5)
            Res(k, 6) = sArr(n)(i, 6)
            Res(k, n + 7) = sArr(n)(i, 8) 'lay so luong
            Res(k, 9) = sArr(n)(i, 9) 'thanh tien
         Else
            x = Dic.Item(tmp)
            Res(x, n + 7) = Res(x, n + 7) + sArr(n)(i, 8) 'cong don so luong
            Res(x, 9) = Res(x, 9) + sArr(n)(i, 9) 'cong don thanh tien
         End If
      End If
   Next
   k = k + 1
Next
Sheets("GOP").Range("B5").Resize(k, 9) = Res 'gan ket qua xuong sheet
End Sub
Em cảm ơn bác ạ!
Em xin lỗi chút là do đề bài lúc em gửi có chút sơ sót là thiếu cột thành tiền cho bên nhập. mong bác sửa giúp em được không ạ!
 

File đính kèm

  • GOPDL.xlsm
    21.2 KB · Đọc: 3
Lần chỉnh sửa cuối:
Upvote 0
chào anh em diễn đàn.
mình đang làm 1 cái báo cáo tự động và sau khi get data được về rồi thì không muốn xử lý data thô bằng tay, mình muốn viết 1 macro để thay thế hàm consolidate trong excel. khi data được convert về thì chỉ cần chạy macro đó là những trường giống nhau sẽ được sum tổng lại.
anh/em tư vấn mình cái, code VBA mình khg rành lắm
 
Upvote 0
Web KT

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

Back
Top Bottom