Trợ giúp code VBA

Liên hệ QC

MANHTS

Thành viên chính thức
Tham gia
16/11/20
Bài viết
63
Được thích
4
Hi các Bác
Chúc các bác thật nhiều sức khỏe, 1 năm mới an khang thịnh vượng, làm ăn phát đạt
Chả là em có 1 file cần bác các trợ giúp em
em xin nói sơ qua mục đích ntn. Em có 3 sheet trong đó 2 sheet kia là các dữ liệu nhập bằng tay, em muốn dữ liệu 2 sheet đó được tổng hợp vào 1 sheet thôi
mong các bác bớt chút thời gian quý báu trợ giúp em , file e có đính kèm
em xin chân thành cảm ơn !
 

File đính kèm

  • FILE DMKT - Copy.xlsm
    428.8 KB · Đọc: 12
Điều kiện lọc là gì bạn Tên Hóa chất vật tư tiêu hao + Hãng sản xuất + Mã số SP hay chỉ một trong 3
 
Upvote 0
bạn đợi một tí nhưng lưu ý là nếu điều kiện chỉ lấy mỗi tên hóa chất thì nếu như cùng tên hóa chất mà khác Hãng sản xuất hoặc khác Mã số SP nó cũng sẽ cộng lại đấy nha
 
Upvote 0
bạn đợi một tí nhưng lưu ý là nếu điều kiện chỉ lấy mỗi tên hóa chất thì nếu như cùng tên hóa chất mà khác Hãng sản xuất hoặc khác Mã số SP nó cũng sẽ cộng lại đấy nha
bác à vậy có cách nào thêm điều kiện của mã sản phẩm được k để đỡ bị trùng
 
Upvote 0
Mã:
Option Explicit

Sub Tong_Hop_Cuoi_Nam()
Dim Ton_Kho1(), Ton_Kho2(), KQ()
Dim Dic As Object, DK As String
Dim i As Long, j As Long, K As Long, K1 As Long, K2 As Long, Tong As Long, Rs As Long

Set Dic = CreateObject("Scripting.Dictionary")
With Sheet7
    Ton_Kho1 = .Range("A3", .Range("B" & Rows.Count).End(xlUp)).Resize(, 9).Value
End With
With Sheet8
    Ton_Kho2 = .Range("A3", .Range("B" & Rows.Count).End(xlUp)).Resize(, 9).Value
End With
K1 = UBound(Ton_Kho1)
K2 = UBound(Ton_Kho2)
Tong = K1 + K2
ReDim KQ(1 To Tong, 1 To 9)

    For i = 1 To K1
            DK = Trim(Ton_Kho1(i, 2)) & Trim(Ton_Kho1(i, 3)) & Trim(Ton_Kho1(i, 4))
         If Not Dic.exists(DK) Then
                K = K + 1
                Dic.Add DK, K
                KQ(K, 1) = K
              For j = 2 To 9
                  KQ(K, j) = Ton_Kho1(i, j)
              Next
         Else
              Rs = Dic.Item(DK)
              For j = 5 To 9
                  KQ(Rs, j) = KQ(Rs, j) + Ton_Kho1(i, j)
              Next
         End If
    Next
    For i = 1 To K2
            DK = Trim(Ton_Kho2(i, 2)) & Trim(Ton_Kho2(i, 3)) & Trim(Ton_Kho2(i, 4))
         If Not Dic.exists(DK) Then
                K = K + 1
                Dic.Add DK, K
                KQ(K, 1) = K
              For j = 2 To 9
                  KQ(K, j) = Ton_Kho2(i, j)
              Next
         Else
              Rs = Dic.Item(DK)
              For j = 5 To 9
                  KQ(Rs, j) = KQ(Rs, j) + Ton_Kho2(i, j)
              Next
         End If
    Next
    Set Dic = Nothing
Sheet6.Range("A3").Resize(K, 9).ClearContents
Sheet6.Range("A3").Resize(K, 9) = KQ
End Sub
Sửa lại tên sheets cho đúng sheets trong file (chỗ in đậm bôi đỏ trong code) còn điều kiện thì mình đã thêm cả 3 điều kiện vào,còn nếu chỉ muốn lấy một điều kiện thì xóa nó đi là được
DK = Trim(Ton_Kho1(i, 2)) & Trim(Ton_Kho1(i, 3)) & Trim(Ton_Kho1(i, 4))
phần điều kiện như sau Trim(Ton_Kho1(i, 2)) = tên hóa chất ; rim(Ton_Kho1(i, 3)) = Hãng sản xuất ; Trim(Ton_Kho2(i, 4)) =Mã số SP
 
Upvote 0
Mã:
Option Explicit

Sub Tong_Hop_Cuoi_Nam()
Dim Ton_Kho1(), Ton_Kho2(), KQ()
Dim Dic As Object, DK As String
Dim i As Long, j As Long, K As Long, K1 As Long, K2 As Long, Tong As Long, Rs As Long

Set Dic = CreateObject("Scripting.Dictionary")
With Sheet7
    Ton_Kho1 = .Range("A3", .Range("B" & Rows.Count).End(xlUp)).Resize(, 9).Value
End With
With Sheet8
    Ton_Kho2 = .Range("A3", .Range("B" & Rows.Count).End(xlUp)).Resize(, 9).Value
End With
K1 = UBound(Ton_Kho1)
K2 = UBound(Ton_Kho2)
Tong = K1 + K2
ReDim KQ(1 To Tong, 1 To 9)

    For i = 1 To K1
            DK = Trim(Ton_Kho1(i, 2)) & Trim(Ton_Kho1(i, 3)) & Trim(Ton_Kho1(i, 4))
         If Not Dic.exists(DK) Then
                K = K + 1
                Dic.Add DK, K
                KQ(K, 1) = K
              For j = 2 To 9
                  KQ(K, j) = Ton_Kho1(i, j)
              Next
         Else
              Rs = Dic.Item(DK)
              For j = 5 To 9
                  KQ(Rs, j) = KQ(Rs, j) + Ton_Kho1(i, j)
              Next
         End If
    Next
    For i = 1 To K2
            DK = Trim(Ton_Kho2(i, 2)) & Trim(Ton_Kho2(i, 3)) & Trim(Ton_Kho2(i, 4))
         If Not Dic.exists(DK) Then
                K = K + 1
                Dic.Add DK, K
                KQ(K, 1) = K
              For j = 2 To 9
                  KQ(K, j) = Ton_Kho2(i, j)
              Next
         Else
              Rs = Dic.Item(DK)
              For j = 5 To 9
                  KQ(Rs, j) = KQ(Rs, j) + Ton_Kho2(i, j)
              Next
         End If
    Next
    Set Dic = Nothing
Sheet6.Range("A3").Resize(K, 9).ClearContents
Sheet6.Range("A3").Resize(K, 9) = KQ
End Sub
Sửa lại tên sheets cho đúng sheets trong file (chỗ in đậm bôi đỏ trong code) còn điều kiện thì mình đã thêm cả 3 điều kiện vào,còn nếu chỉ muốn lấy một điều kiện thì xóa nó đi là được
DK = Trim(Ton_Kho1(i, 2)) & Trim(Ton_Kho1(i, 3)) & Trim(Ton_Kho1(i, 4))
phần điều kiện như sau Trim(Ton_Kho1(i, 2)) = tên hóa chất ; rim(Ton_Kho1(i, 3)) = Hãng sản xuất ; Trim(Ton_Kho2(i, 4)) =Mã số SP
em cảm ơn bác rất rất nhiều để em thử code
 
Upvote 0
Hi bác em sử dụng code của bác rồi ạ. nhưng mà có 1 vấn đề là từ cột C đến cột H sheet9 khi sd code thì nó tự cộng nên thành 2 cái bác giúp em bỏ cái đó dc k? em có đính kèm file theo luôn
 

File đính kèm

  • FILE DMKT - Copy (1).xlsm
    440.9 KB · Đọc: 2
Upvote 0
Bạn xem file này đi.
Bài đã được tự động gộp:

Hi bác em sử dụng code của bác rồi ạ. nhưng mà có 1 vấn đề là từ cột C đến cột H sheet9 khi sd code thì nó tự cộng nên thành 2 cái bác giúp em bỏ cái đó dc k? em có đính kèm file theo luôn
còn cái file bạn gửi lên là do bạn sửa code lại sai nên nó chạy bị lỗi.
trong code gốc mình gửi là For j = 2 To 9 và For j = 5 To 9 thì bạn sửa thành For j = 2 To 4 và For j = 2 To 9 dãn đến kết quả bị lỗi
 

File đính kèm

  • FILE DMKT - Copy.xlsm
    436.2 KB · Đọc: 7
Upvote 0
Bạn xem file này đi.
Bài đã được tự động gộp:


còn cái file bạn gửi lên là do bạn sửa code lại sai nên nó chạy bị lỗi.
trong code gốc mình gửi là For j = 2 To 9 và For j = 5 To 9 thì bạn sửa thành For j = 2 To 4 và For j = 2 To 9 dãn đến kết quả bị lỗi
em hiểu rồi bác em chỉ cần sửa lại là for i 5 to 9 thành for i 9 to 9 là được bác à hihi em cảm ơn bác nhiều ạ
 
Upvote 0
em hiểu rồi bác em chỉ cần sửa lại là for i 5 to 9 thành for i 9 to 9 là được bác à hihi em cảm ơn bác nhiều ạ
thực ra bạn chỉ cần sửa cái tên sheets chỗ này để nó lấy dữ liệu đúng sheet và trả về kết quả đúng sheets thôi,còn cấu trúc gữi liệu không thay đổi thì code không cần sửa gì đâu bạn
Nhận tiện bạn sửa tiêu đề bài viết luôn đi,sửa thành tổng hợp dữ liệu từ nhiều sheets hoặc tổng hợp dữ liệu bằng vba gì đó,chứ tiêu đề vậy là chưa hợp lệ đâu
1609320405538.png
1609320425708.png
 
Upvote 0
Web KT

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

Back
Top Bottom