Giúp cộng các mã giống nhau và chuyển sang sheet khác

Liên hệ QC

BBmall

Thành viên chính thức
Tham gia
10/5/18
Bài viết
56
Được thích
2
Mã:
Sub banhang()
    Dim arr, arr1, arr2, lr As Long, a As Long, i As Long, j As Integer, dic As Object, dk As String, b As Long
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("Ban hang")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr < 2 Then Exit Sub
         arr2 = .Range("A2:C" & lr).Value
    End With
    With Sheets("Data ban hang")
         lr = .Range("A2:" & "A" & Rows.Count).End(xlDown).Row
         arr = .Range("A2:C" & lr).Value
         ReDim arr1(1 To UBound(arr2, 1), 1 To 3)
         For i = 1 To UBound(arr, 1)
             dic.Item(arr(i, 1)) = i
         Next i
         For i = 1 To UBound(arr2, 1)
         If arr2(i, 1) <> "" Then
            b = dic.Item(arr2(i, 1))
            If b Then
               For j = 2 To 3
                   arr(b, j) = arr2(i, j)
               Next j
            Else
               a = a + 1
               For j = 1 To 3
                  arr1(a, j) = arr2(i, j)
               Next j
            End If
         End If
         Next i
         .Range("A2:C" & lr).Value = arr
         If a Then .Range("A" & lr + 1).Resize(a, 3).Value = arr1
    End With
End Sub
Mình không biết gì cái này. Chỉ là lụm về sài mà bây giờ mình muốn thêm theo ý không tự sửa đc và không ra nên đăng lên xin anh em giúp mình xíu
Cụ thể code trên là copy từ A3:C của sheet "Ban hang". Dựa vào ô của cột A của "Data ban hang" để thêm mới hoặc đè lên dữ liệu
Giờ mình mong muốn là có cột số lượng (ví dụ cột B) thì mình cộng dồn dựa vào ô của cột A của "Data bán hang" còn lại là đè lên ạ
Ví dụ cho dễ hình dung : Mình có 3 cột là : MÃ - SỐ LƯỢNG - TIỀN
Giờ mình nhập mã bên sheet "Ban hang" xong chuyển qua sheet "Data ban hang". Nếu cùng MÃ thì cộng số lượng còn khác mã thì thêm mới
Thanks mọi người và chúc tất cả khỏe mạnh để cùng nhau vượt qua đại dịch
 
Bạn không up file thì mọi người cũng không biết code kiểu gì luôn.
 
Mã:
Sub banhang()
    Dim arr, arr1, arr2, lr As Long, a As Long, i As Long, j As Integer, dic As Object, dk As String, b As Long
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("Ban hang")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr < 2 Then Exit Sub
         arr2 = .Range("A2:C" & lr).Value
    End With
    With Sheets("Data ban hang")
         lr = .Range("A2:" & "A" & Rows.Count).End(xlDown).Row
         arr = .Range("A2:C" & lr).Value
         ReDim arr1(1 To UBound(arr2, 1), 1 To 3)
         For i = 1 To UBound(arr, 1)
             dic.Item(arr(i, 1)) = i
         Next i
         For i = 1 To UBound(arr2, 1)
         If arr2(i, 1) <> "" Then
            b = dic.Item(arr2(i, 1))
            If b Then
               For j = 2 To 3
                   arr(b, j) = arr2(i, j)
               Next j
            Else
               a = a + 1
               For j = 1 To 3
                  arr1(a, j) = arr2(i, j)
               Next j
            End If
         End If
         Next i
         .Range("A2:C" & lr).Value = arr
         If a Then .Range("A" & lr + 1).Resize(a, 3).Value = arr1
    End With
End Sub
Mình không biết gì cái này. Chỉ là lụm về sài mà bây giờ mình muốn thêm theo ý không tự sửa đc và không ra nên đăng lên xin anh em giúp mình xíu
Cụ thể code trên là copy từ A3:C của sheet "Ban hang". Dựa vào ô của cột A của "Data ban hang" để thêm mới hoặc đè lên dữ liệu
Giờ mình mong muốn là có cột số lượng (ví dụ cột B) thì mình cộng dồn dựa vào ô của cột A của "Data bán hang" còn lại là đè lên ạ
Ví dụ cho dễ hình dung : Mình có 3 cột là : MÃ - SỐ LƯỢNG - TIỀN
Giờ mình nhập mã bên sheet "Ban hang" xong chuyển qua sheet "Data ban hang". Nếu cùng MÃ thì cộng số lượng còn khác mã thì thêm mới
Thanks mọi người và chúc tất cả khỏe mạnh để cùng nhau vượt qua đại dịch
Thử chỉnh lệnh
Mã:
               For j = 2 To 3
                   arr(b, j) = arr2(i, j)
               Nex
Thành
Mã:
               For j = 2 To 3
                   arr(b, j) =arr(b, j) + arr2(i, j)
               Nex
 
Mình không biết gì cái này. Chỉ là lụm về sài mà bây giờ mình muốn thêm theo ý không tự sửa đc và không ra nên đăng lên xin anh em giúp mình xíu
Cụ thể code trên là copy từ A3:C của sheet "Ban hang". Dựa vào ô của cột A của "Data ban hang" để thêm mới hoặc đè lên dữ liệu
Giờ mình mong muốn là có cột số lượng (ví dụ cột B) thì mình cộng dồn dựa vào ô của cột A của "Data bán hang" còn lại là đè lên ạ
Ví dụ cho dễ hình dung : Mình có 3 cột là : MÃ - SỐ LƯỢNG - TIỀN
Giờ mình nhập mã bên sheet "Ban hang" xong chuyển qua sheet "Data ban hang". Nếu cùng MÃ thì cộng số lượng còn khác mã thì thêm mới
Thanks mọi người và chúc tất cả khỏe mạnh để cùng nhau vượt qua đại dịch
Đoán ý của bạn không biết có đúng không, bởi vì diễn giải như bạn rối như canh hẹ.
Sửa lại code của bạn chứ nếu là tôi thì tôi không viết dic như thế. Xem file.
 

File đính kèm

  • SuaCode_BBmall.xlsm
    168.9 KB · Đọc: 4
Tôi sẽ viết thế này:
Rich (BB code):
Sub BanHang_New()
    Dim arr, arr1, arr2, lr As Long, RwArr As Long, i As Long, j As Integer, dic As Object, k As Long
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("Ban hang")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr < 2 Then Exit Sub
         arr2 = .Range("A2:C" & lr).Value
    End With
    With Sheets("Data ban hang")
        lr = .Range("A2:" & "A" & Rows.Count).End(xlDown).Row
        arr = .Range("A2:C" & lr).Value
        ReDim arr1(1 To UBound(arr2, 1), 1 To 3)
        For i = 1 To UBound(arr, 1)
            dic.Item(arr(i, 1)) = i
            For j = 1 To 3
               arr1(i, j) = arr(i, j)
            Next j
        Next i
        RwArr = UBound(arr, 1)
        For i = 1 To UBound(arr2, 1)
            If arr2(i, 1) <> "" And Not dic.Exists(arr2(i, 1)) Then
                k = k + 1
                dic.Add arr2(i, 1), RwArr + k
                For j = 1 To 3
                   arr1(RwArr + k, j) = arr2(i, j)
                Next j
            Else
                For j = 2 To 3
                    arr1(dic.Item(arr2(i, 1)), j) = arr1(dic.Item(arr2(i, 1)), j) + arr2(i, j)
                Next
            End If
        Next i
         .Range("A2").Resize(RwArr + k, 3).Value = arr1
    End With
End Sub
 
Thanks cả đã hỗ trợ ạ. Em làm được rồi. Chúc cả nhà nhiều sức khỏe
 
Web KT
Back
Top Bottom