Nhờ các anh chị em viết code VBA dùm!

  • Thread starter Thread starter maithien
  • Ngày gửi Ngày gửi
Liên hệ QC

maithien

Thành viên mới
Tham gia
28/10/11
Bài viết
36
Được thích
0
Chào các anh/chị em!
Nhờ các anh/chị / em giúp dùm viết code VBA để chạy dữ liệu tháng theo năm 2019 và năm 2020 từ tháng 01 đến tháng 12
Khi bên sheet dulieu đưa vào từ tháng 01 đến tháng 12 của năm 2019 và tháng 01 đến 12 năm 2020
Em đã viết hàm Sumifs nhưng vì dữ liệu là 2 năm nên khi chạy rất chậm nhờ các Anh Chị Em viết Code VBA để khi chạy dữ liệu nhanh hơn
Cột D2 em đưa mã Khách vào thì tự động chạy số liệu nếu tháng đó khách đó có lấy hàng
(Em có kèm theo file). Nhờ các anh/chị / em giúp em ạ.
Em chân thành cám ơn!
 

File đính kèm

Chào các anh/chị em!
Nhờ các anh/chị / em giúp dùm viết code VBA để chạy dữ liệu tháng theo năm 2019 và năm 2020 từ tháng 01 đến tháng 12
Khi bên sheet dulieu đưa vào từ tháng 01 đến tháng 12 của năm 2019 và tháng 01 đến 12 năm 2020
Em đã viết hàm Sumifs nhưng vì dữ liệu là 2 năm nên khi chạy rất chậm nhờ các Anh Chị Em viết Code VBA để khi chạy dữ liệu nhanh hơn
Cột D2 em đưa mã Khách vào thì tự động chạy số liệu nếu tháng đó khách đó có lấy hàng
(Em có kèm theo file). Nhờ các anh/chị / em giúp em ạ.
Em chân thành cám ơn!
Nhờ các anh/chị / em giúp dùm viết code VBA để chạy dữ liệu tháng theo năm 2019 và năm 2020 từ tháng 01 đến tháng 12
Mục đích VBA để tính tổng thôi ha bạn?
Số dòng dữ liệu thực tế 2 năm là bao nhiêu dòng mà chậm bạn.
Bạn test trên file này thử.
 

File đính kèm

Chào các anh/chị em!
Nhờ các anh/chị / em giúp dùm viết code VBA để chạy dữ liệu tháng theo năm 2019 và năm 2020 từ tháng 01 đến tháng 12
Khi bên sheet dulieu đưa vào từ tháng 01 đến tháng 12 của năm 2019 và tháng 01 đến 12 năm 2020
Em đã viết hàm Sumifs nhưng vì dữ liệu là 2 năm nên khi chạy rất chậm nhờ các Anh Chị Em viết Code VBA để khi chạy dữ liệu nhanh hơn
Cột D2 em đưa mã Khách vào thì tự động chạy số liệu nếu tháng đó khách đó có lấy hàng
(Em có kèm theo file). Nhờ các anh/chị / em giúp em ạ.
Em chân thành cám ơn!
Bạn thử nhé.
Mã:
Sub laydulieu()
    Dim arr, kq, i As Long, lr As Long, dic As Object, dk As String, a As Long, tong As Double, j As Long
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("dulieu")
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("A3:G" & lr).Value
        For i = 1 To UBound(arr)
            dk = UCase(arr(i, 3) & "#" & arr(i, 1) & "#" & arr(i, 2) & "#" & arr(i, 5))
            If Not dic.exists(dk) Then
               dic.Add dk, arr(i, 7)
            Else
               dic.Item(dk) = dic.Item(dk) + arr(i, 7)
            End If
        Next i
   End With
   With Sheets("baocao")
        lr = .Range("B" & Rows.Count).End(xlUp).Row
        If lr < 5 Then Exit Sub
        arr = .Range("A3:Ab" & lr).Value
        ReDim kq(1 To UBound(arr, 1), 1 To UBound(arr, 2))
        For i = 3 To UBound(arr)
            tong = 0
            For j = 5 To UBound(arr, 2)
                dk = UCase(.Range("D2").Value & "#" & arr(2, j) & "#" & arr(1, j) & "#" & arr(i, 2))
                If dic.exists(dk) Then
                   kq(i - 2, j - 3) = dic.Item(dk)
                   tong = tong + dic.Item(dk)
                End If
            Next j
            kq(i - 2, 1) = tong
       Next i
       .Range("D5:Ab" & lr).Value = kq
  End With
End Sub
 
Thời buổi bi giờ làm việc với dữ liệu đến chục ngàn dòng mà không biết đến Data Model là lạc hậu.
 
Chào các anh/chị em!
Nhờ các anh/chị / em giúp dùm viết code VBA để chạy dữ liệu tháng theo năm 2019 và năm 2020 từ tháng 01 đến tháng 12
Khi bên sheet dulieu đưa vào từ tháng 01 đến tháng 12 của năm 2019 và tháng 01 đến 12 năm 2020
Em đã viết hàm Sumifs nhưng vì dữ liệu là 2 năm nên khi chạy rất chậm nhờ các Anh Chị Em viết Code VBA để khi chạy dữ liệu nhanh hơn
Cột D2 em đưa mã Khách vào thì tự động chạy số liệu nếu tháng đó khách đó có lấy hàng
(Em có kèm theo file). Nhờ các anh/chị / em giúp em ạ.
Em chân thành cám ơn!
Bài này dùng PivotTable là nhanh gọn nhất. Bạn thử xem sao nhé
 
Chào các anh/chị em!
Nhờ các anh/chị / em giúp dùm viết code VBA để chạy dữ liệu tháng theo năm 2019 và năm 2020 từ tháng 01 đến tháng 12
Khi bên sheet dulieu đưa vào từ tháng 01 đến tháng 12 của năm 2019 và tháng 01 đến 12 năm 2020
Em đã viết hàm Sumifs nhưng vì dữ liệu là 2 năm nên khi chạy rất chậm nhờ các Anh Chị Em viết Code VBA để khi chạy dữ liệu nhanh hơn
Cột D2 em đưa mã Khách vào thì tự động chạy số liệu nếu tháng đó khách đó có lấy hàng
(Em có kèm theo file). Nhờ các anh/chị / em giúp em ạ.
Em chân thành cám ơn!
Sau khi xem nội dung File tôi có góp ý cho bạn như sau:
1/ Nên sửa tiêu đề là "Giúp Code lọc dữ liệu khách hàng từ tháng, năm đến tháng, năm và tổng hợp số lượng". Mục đích giúp thành viên khác gõ từ khóa tìm kiếm bài viết cần cái tương tự cho dễ, nếu tiêu đề thế này "Nhờ các anh chị em viết code VBA dùm!" thì gõ từ khóa nó chẳng ra cái giống gì?
2/ Nên gộp cột tháng năm vào 1 cột để thuận tiện cho việc việc viết code lọc dữ liệu.
3/ Việc tổng hợp dữ liệu thì nên sử dụng PivotTable.
 
Bạn thử nhé.
Mã:
Sub laydulieu()
    Dim arr, kq, i As Long, lr As Long, dic As Object, dk As String, a As Long, tong As Double, j As Long
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("dulieu")
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("A3:G" & lr).Value
        For i = 1 To UBound(arr)
            dk = UCase(arr(i, 3) & "#" & arr(i, 1) & "#" & arr(i, 2) & "#" & arr(i, 5))
            If Not dic.exists(dk) Then
               dic.Add dk, arr(i, 7)
            Else
               dic.Item(dk) = dic.Item(dk) + arr(i, 7)
            End If
        Next i
   End With
   With Sheets("baocao")
        lr = .Range("B" & Rows.Count).End(xlUp).Row
        If lr < 5 Then Exit Sub
        arr = .Range("A3:Ab" & lr).Value
        ReDim kq(1 To UBound(arr, 1), 1 To UBound(arr, 2))
        For i = 3 To UBound(arr)
            tong = 0
            For j = 5 To UBound(arr, 2)
                dk = UCase(.Range("D2").Value & "#" & arr(2, j) & "#" & arr(1, j) & "#" & arr(i, 2))
                If dic.exists(dk) Then
                   kq(i - 2, j - 3) = dic.Item(dk)
                   tong = tong + dic.Item(dk)
                End If
            Next j
            kq(i - 2, 1) = tong
       Next i
       .Range("D5:Ab" & lr).Value = kq
  End With
End Sub
Cám ơn bạn đã hỗ trợ, mình chép nguyên phần này vào mà chạy không được giờ phải làm them gì nữa không ha bạn chỉ dùm với.
 
Hình như Code trên chưa chính xác thì Phải
 
Xin các bạn viết gìum code VBA thay cho hàm sumifs cho danh sach mặt hàng hiên có.
Cám ơn các bạn
 
Ecc sumif hay hàm của excel là vô địch bạn còn muốn udf sumifs
 
Vì đã có code để lấy ra danh sách riêng biệt của sự kết hợp 3 điều kiện dưới đây, cho nên mình mới muốn (mà không làm được) code VBA của hàm sumifs cho 3 điều kiện
Mã hàng
Mã Phụ

Nếu có thể xin gíup gìum.
Cám ơn bạn,
 
Lần chỉnh sửa cuối:
Vì đã có code để lấy ra danh sách riêng biệt của sự kết hợp 3 điều kiện dưới đây, cho nên mình mới muốn (mà không làm được) code VBA của hàm sumifs cho 3 điều kiện
Part number
Revision
Lot
Nếu có thể xin gíup gìum.
Cám ơn bạn,
Nếu vậy bạn biết sài hàm simifs không?. Hàm tự viết không bao giờ tối ưu bằng hàm excel cả. Mình đang sài điện thoại nên không thể đọc file của bạn được.
 
Mình biết dùng hàm Sumifs , chỉ muốn biết thêm về VBA
Cám ơn bạn
 

File đính kèm

Cám ơn bạn, tôi đã sửa bài viết và tập tin đính kèm rồi
 
Web KT

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

Back
Top Bottom