Xin chào các anh chị trong GPE,
Em có file đính kèm, gồm 2 sheet:
- Sheet Data chưa dữ liệu: gồm 2 trường MA và DOANHTHU theo từng MA.
- Sheet Dictionary để chạy code. Mục đích của Code như sau: dùng Dictionary với 2 cách add Key, mục đích là lọc duy nhất theo MA và tính tổng doanh số theo MA đó
[video=youtube;BmIP8nRMnfo]https://www.youtube.com/watch?v=BmIP8nRMnfo&feature=youtu.be[/video]
- Cách 1 mất khoảng 3s
- Cách 2 mất hơn 4s
Với dữ liệu hiện tại là hơn 200 nghìn dòng, và còn tăng thêm nữa. Do đó em muốn hỏi các anh chị để tăng tốc độ code hơn nữa, ngoài cách dùng Dictionary ra.
Em gửi file theo link đính kèm:
https://drive.google.com/file/d/0ByjpV84WDSQQZkxZZE9XR3FQdWc/view?usp=sharing
Xin cảm ơn các anh chị.
Em có file đính kèm, gồm 2 sheet:
- Sheet Data chưa dữ liệu: gồm 2 trường MA và DOANHTHU theo từng MA.
- Sheet Dictionary để chạy code. Mục đích của Code như sau: dùng Dictionary với 2 cách add Key, mục đích là lọc duy nhất theo MA và tính tổng doanh số theo MA đó
[video=youtube;BmIP8nRMnfo]https://www.youtube.com/watch?v=BmIP8nRMnfo&feature=youtu.be[/video]
- Cách 1 mất khoảng 3s
Mã:
Sub Method01()
With Application
.DisplayAlerts = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
Dim Dic As Object, i&, Arr(), STT(), T As Double
T = Timer
Arr = Range(Sheet1.[C2], Sheet1.[I1000000].End(3))
ReDim STT(1 To UBound(Arr), 1 To 1)
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Arr)
Dic(Arr(i, 7)) = Dic(Arr(i, 7)) + Arr(i, 1)
STT(i, 1) = i
Next
With Sheet2
.[B5].Resize(Dic.Count) = Application.Transpose(Dic.keys)
.[C5].Resize(Dic.Count) = Application.Transpose(Dic.items)
.[A5].Resize(Dic.Count) = STT
End With
MsgBox Timer - T
.DisplayAlerts = True
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub
- Cách 2 mất hơn 4s
Mã:
Sub Method02()
With Application
.DisplayAlerts = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
Dim Dic As Object, i&, Arr(), STT(), T As Double
T = Timer
Arr = Range(Sheet1.[C2], Sheet1.[I1000000].End(3))
ReDim STT(1 To UBound(Arr), 1 To 1)
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Arr)
STT(i, 1) = i
If Not Dic.exists(Arr(i, 7)) Then
Dic.Add (Arr(i, 7)), Arr(i, 1)
Else
Dic.Item(Arr(i, 7)) = Dic.Item(Arr(i, 7)) + Arr(i, 1)
End If
Next
With Sheet2
.[F5].Resize(Dic.Count) = Application.Transpose(Dic.keys)
.[G5].Resize(Dic.Count) = Application.Transpose(Dic.items)
.[E5].Resize(Dic.Count) = STT
End With
MsgBox Timer - T
.DisplayAlerts = True
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Với dữ liệu hiện tại là hơn 200 nghìn dòng, và còn tăng thêm nữa. Do đó em muốn hỏi các anh chị để tăng tốc độ code hơn nữa, ngoài cách dùng Dictionary ra.
Em gửi file theo link đính kèm:
https://drive.google.com/file/d/0ByjpV84WDSQQZkxZZE9XR3FQdWc/view?usp=sharing
Xin cảm ơn các anh chị.
Lần chỉnh sửa cuối: