hỏi cách làm nhẹ và tăng tốc file (1 người xem)

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

Người dùng đang xem chủ đề này

evils88

Thành viên chính thức
Tham gia
4/5/11
Bài viết
68
Được thích
2
chào các thầy và các anh chị trong GPE, nhờ có diễn đàn mình e đã tự có cho mình 1 file excel theo dõi kho đơn giản phục vụ nhu cầu công việc của mình, e đã đơn giản và xóa đi 1 số chi tiết để cho nhẹ file nhưng file vẫn rất nặng, mỗi lần vào ì ạch, nguyên do hàng tháng e phải vào số liệu nhiều có khi lên đên 10000 cell, có cách nào thay những công thức mảng này sang vba được không, e chưa biết gì về vba mong mọi người giúp e

 

File đính kèm

chào các thầy và các anh chị trong GPE, nhờ có diễn đàn mình e đã tự có cho mình 1 file excel theo dõi kho đơn giản phục vụ nhu cầu công việc của mình, e đã đơn giản và xóa đi 1 số chi tiết để cho nhẹ file nhưng file vẫn rất nặng, mỗi lần vào ì ạch, nguyên do hàng tháng e phải vào số liệu nhiều có khi lên đên 10000 cell, có cách nào thay những công thức mảng này sang vba được không, e chưa biết gì về vba mong mọi người giúp e


Sau khi nhập liệu xong ở sheet nhập liệu, cho chạy code sẻ có kết quả ở sheet "nhaplieu" và "tonghop"
Mã:
Sub nhaplieu()
Dim tenhang, tenkhang, NL, TH As Variant, mahang, makhang As Range, d_th, d_kh As Object, k, r, i As Long
With Sheet1
    Set mahang = .Range(.[b7], .[b600000].End(3))
    tenhang = mahang.Resize(, 3).Value
    Set makhang = .Range(.[f6], .[f600000].End(3))
    tenkhang = makhang.Resize(, 2).Value
End With
With Sheet2
    NL = .[a8].Resize(.[a600000].End(3).Row - 7, 9)
End With
With Sheet3
.[a8:g500].ClearContents
.[a8].Resize(UBound(tenhang), 3) = tenhang
.[f8].Resize(UBound(tenhang)).Value = .[c8].Resize(UBound(tenhang)).Value
 TH = .[a8].Resize(UBound(tenhang), 6)
End With
Set d_th = CreateObject("Scripting.Dictionary")
Set d_kh = CreateObject("Scripting.Dictionary")

For i = 1 To UBound(NL)
    If Not d_kh.EXISTS(NL(i, 3)) Then
        r = Application.Match(NL(i, 3), makhang, 0)
        If TypeName(r) <> "Error" Then
            d_kh.Add (NL(i, 3)), r
            NL(i, 4) = tenkhang(r, 2)
        End If
     Else
        NL(i, 4) = tenkhang(d_kh.Item(NL(i, 3)), 2)
    End If
    
    If Not d_th.EXISTS(NL(i, 5)) Then
        r = Application.Match(NL(i, 5), mahang, 0)
        If TypeName(r) <> "Error" Then
            d_th.Add (NL(i, 5)), r
            NL(i, 6) = tenhang(r, 2)
            TH(r, 4) = NL(i, 7)
            TH(r, 5) = NL(i, 8)
            TH(r, 6) = TH(r, 3) + TH(r, 4) - TH(r, 5)
        End If
     Else
     k = d_th.Item(NL(i, 5))
        NL(i, 6) = tenhang(k, 2)
        TH(k, 4) = TH(k, 4) + NL(i, 7)
        TH(k, 5) = TH(k, 5) + NL(i, 8)
        TH(k, 6) = TH(k, 3) + TH(k, 4) - TH(k, 5)
    End If

 Next
 With Sheet2
    .[a8].Resize(.[a600000].End(3).Row - 7, 9) = NL
End With

With Sheet3
.[a8].Resize(UBound(TH), 6) = TH
End With

Set d_th = Nothing
Set d_kh = Nothing
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
chào các thầy và các anh chị trong GPE, nhờ có diễn đàn mình e đã tự có cho mình 1 file excel theo dõi kho đơn giản phục vụ nhu cầu công việc của mình, e đã đơn giản và xóa đi 1 số chi tiết để cho nhẹ file nhưng file vẫn rất nặng, mỗi lần vào ì ạch, nguyên do hàng tháng e phải vào số liệu nhiều có khi lên đên 10000 cell, có cách nào thay những công thức mảng này sang vba được không, e chưa biết gì về vba mong mọi người giúp e


có mấy cái tui thấy khó hiểu quá bạn giúp tui giải thích được không ?
1/cái bảng tổng hợp với cái bảng danh mục sao không phải là 1 mà lại chia ra để 2 nơi vậy
2/tui thấy người ta nhập liệu thường chỉ chọn 1 trong 2 : hoặc là ghi mã (hàng , khách hàng) hoặc là ghi tên . ghi ra cả 2 vừa mã vừa tên vậy chỉ tổ năng file thêm chứ được gì đâu . hay bạn bị bắt buộc phải làm thế ?

Let'GâuGâu : theo kinh nghiệm thực tế của tui thì không phải cứ bấm nút là tổng hợp từ A đến Zích . ví dụ hôm nay người dùng nhập liệu từ dòng 1 đến 500 => trừ vào tồn kho
ngày mai nhập từ dòng 500 -> 1000 không lẽ tiếp tục lấy số liệu từ dòng 1-> 500 trừ tiếp vào tồn kho lần nữa . hihi
thường người dùng muốn có hộp thoại để tùy chọn sẽ lấy dữ liệu từ dòng bao nhiêu đến dòng bao nhiêu để đi trừ vào tồn kho .
 
Upvote 0
mình gộp vào nhưng bị lỗi vòng lặp k biết sửa ra sao nên nên đành chia ra 2 sheet như vậy
danh mục khách hàng cũng khá nhiều, phải theo dõi cả lượng xuất bán từng nhà, chia ra 1 sheet nữa sẽ rõ ràng hơn nhưng sẽ nặng thêm nên mình để mã như vậy để lọc auto filter cuối tháng khớp sổ, bên hàng cũng vậy
 
Upvote 0
Let'GâuGâu : e đang thử và thấy rất ổn, cảm ơn bác nhiều, phần này e đưa sang file excel 03 thì lỗi (e sử dụng 2 máy, 1 máy dùng excel 03, 1 máy excel 07) chắc e phải cài lại thành 07 hết %#^#$
 
Upvote 0
Let'GâuGâu : e đang thử và thấy rất ổn, cảm ơn bác nhiều, phần này e đưa sang file excel 03 thì lỗi (e sử dụng 2 máy, 1 máy dùng excel 03, 1 máy excel 07) chắc e phải cài lại thành 07 hết %#^#$

tôi nghĩ là code ko có vấn đề gì với 2003 hay 2007, mà cái botton activeX control mà tôi vẻ trên 2010 nó báo lổi khi xài trên 2003, bạn xoá cái button đó đi và tạo lại cái khác là được
===========
còn nếu cài lại thì cài luôn 2010, 2007 có lẻ là một sản phẩm lổi của microsoft
2013 tôi chưa xài nên hỏng biết
 
Upvote 0
Web KT

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

Back
Top Bottom