Sửa giúp em code dùng vòng lặp For-Next để tính tổng số lượng (1 người xem)

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

quoc nhat

Thành viên tiêu biểu
Tham gia
8/3/12
Bài viết
567
Được thích
43
Nghề nghiệp
cán bộ ngành y tế
Chào các anh chị
EM có đoạn code như sau:

Dim i As Long, j As Long
For j = 3 To 20000 ' cac o chua ma thuoc '
i = WorksheetFunction.Match(Sheet11.Range("w" & j), Sheet1.[B:B], 0)
Sheet1.Cells(i, 8) = Sheet1.Cells(i, 8) + Sheet11.Range("x" & j)
Next



dùng để tính tổng số lượng của các mặt hàng
Dữ liệu của em tối đa khoảng 20000 dòng
Nhưng em không biết sửa code lại thế nào để code chạy nhanh hơn

Các anh chị giúp em một tay với
Em cảm ơn!
 
Chào các anh chị
EM có đoạn code như sau:

Dim i As Long, j As Long
For j = 3 To 20000 ' cac o chua ma thuoc '
i = WorksheetFunction.Match(Sheet11.Range("w" & j), Sheet1.[B:B], 0)
Sheet1.Cells(i, 8) = Sheet1.Cells(i, 8) + Sheet11.Range("x" & j)
Next



dùng để tính tổng số lượng của các mặt hàng
Dữ liệu của em tối đa khoảng 20000 dòng
Nhưng em không biết sửa code lại thế nào để code chạy nhanh hơn

Các anh chị giúp em một tay với
Em cảm ơn!

Cũng nên có cái file tạm kèm theo thì sẽ dễ dàng hơn rất nhiều.
Dạng bài này chắc cũng đơn giản mà, nhưng code không có file thì gần như khó nhai.
 
Upvote 0
Cũng nên có cái file tạm kèm theo thì sẽ dễ dàng hơn rất nhiều.
Dạng bài này chắc cũng đơn giản mà, nhưng code không có file thì gần như khó nhai.
Xin lỗi anh em quên gủi kèm File lên mất

Dữ liệu em mới ghi tạm được mấy trăm dòng thôi
anh xem file rồi giúp em
ps: trong sheet thẻ kho nút lệnh màu đỏ đó anh
 

File đính kèm

Upvote 0
Xin lỗi anh em quên gủi kèm File lên mất

Dữ liệu em mới ghi tạm được mấy trăm dòng thôi
anh xem file rồi giúp em
ps: trong sheet thẻ kho nút lệnh màu đỏ đó anh
Hãy cảm nhận tốc độ của Dictionary và Array
PHP:
Private Sub CommandButton1_Click()
Dim MaThuoc(), Data(), Res(), i&, n&, k&
Data = Sheet11.Range("W3", Sheet11.[X65536].End(3)).Value
MaThuoc = Sheet1.Range("B9:B214").Value
ReDim Res(1 To UBound(MaThuoc), 1 To 1)
With CreateObject("scripting.dictionary")
    For i = 1 To UBound(MaThuoc)
        If Not .exists(MaThuoc(i, 1)) Then
            k = k + 1
            .Add MaThuoc(i, 1), k
        End If
    Next
    For i = 1 To UBound(Data)
        If .exists(Data(i, 1)) Then
            n = .Item(Data(i, 1))
            Res(n, 1) = Res(n, 1) + Data(i, 2)
        End If
    Next
End With
Sheet1.[H9:H214].Value = Res
End Sub
 
Upvote 0
Hãy cảm nhận tốc độ của Dictionary và Array
PHP:
Private Sub CommandButton1_Click()
Dim MaThuoc(), Data(), Res(), i&, n&, k&
Data = Sheet11.Range("W3", Sheet11.[X65536].End(3)).Value
MaThuoc = Sheet1.Range("B9:B214").Value
ReDim Res(1 To UBound(MaThuoc), 1 To 1)
With CreateObject("scripting.dictionary")
    For i = 1 To UBound(MaThuoc)
        If Not .exists(MaThuoc(i, 1)) Then
            k = k + 1
            .Add MaThuoc(i, 1), k
        End If
    Next
    For i = 1 To UBound(Data)
        If .exists(Data(i, 1)) Then
            n = .Item(Data(i, 1))
            Res(n, 1) = Res(n, 1) + Data(i, 2)
        End If
    Next
End With
Sheet1.[H9:H214].Value = Res
End Sub
Quá tuyệt nhanh không tưởng tưởng được
Cảm ơn anh nhiều lắm
 
Upvote 0
Quá tuyệt nhanh không tưởng tưởng được
Cảm ơn anh nhiều lắm
bài này lâu rồi nhưng hôm nay em đang vướng một chổ là mã thuốc nào số lượng = 0 thì thêm số 0 vào sheet 1
và phải thêm Code như nào ạ?

giúp em lần nữa với ạ!
Em cảm ơn nhiều!
 
Lần chỉnh sửa cuối:
Upvote 0
giúp em với mọi người ơi!
 
Upvote 0
hoặc giacatdu đại, thì thử như sau, thêm dòng có ghi chú:
Mã:
[COLOR=#000000][COLOR=#007700]Private [/COLOR][COLOR=#0000BB]Sub CommandButton1_Click[/COLOR][COLOR=#007700]()
[/COLOR][COLOR=#0000BB]Dim MaThuoc[/COLOR][COLOR=#007700](), [/COLOR][COLOR=#0000BB]Data[/COLOR][COLOR=#007700](), [/COLOR][COLOR=#0000BB]Res[/COLOR][COLOR=#007700](), [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]&, [/COLOR][COLOR=#0000BB]n[/COLOR][COLOR=#007700]&, [/COLOR][COLOR=#0000BB]k[/COLOR][COLOR=#007700]&
[/COLOR][COLOR=#0000BB]Data [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Sheet11[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"W3"[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Sheet11[/COLOR][COLOR=#007700].[[/COLOR][COLOR=#0000BB]X65536[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]3[/COLOR][COLOR=#007700])).[/COLOR][COLOR=#0000BB]Value
MaThuoc [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Sheet1[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"B9:B214"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value
ReDim Res[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1 To UBound[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]MaThuoc[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]1 To 1[/COLOR][COLOR=#007700])
[/COLOR][COLOR=#0000BB]With CreateObject[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"scripting.dictionary"[/COLOR][COLOR=#007700])
    For [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To UBound[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]MaThuoc[/COLOR][COLOR=#007700])
        If [/COLOR][COLOR=#0000BB]Not [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]exists[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]MaThuoc[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700])) [/COLOR][COLOR=#0000BB]Then
            k [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]k [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1
            [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Add MaThuoc[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]k
        End [/COLOR][COLOR=#007700]If
[/COLOR][/COLOR][COLOR=#ff0000]        Res(i,1)=0  ''2015 them dong nay vao code[/COLOR][COLOR=#000000][COLOR=#007700]
    [/COLOR][COLOR=#0000BB]Next
    [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To UBound[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Data[/COLOR][COLOR=#007700])
        If .[/COLOR][COLOR=#0000BB]exists[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Data[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700])) [/COLOR][COLOR=#0000BB]Then
            n [/COLOR][COLOR=#007700]= .[/COLOR][COLOR=#0000BB]Item[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Data[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]))
            [/COLOR][COLOR=#0000BB]Res[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]n[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#0000BB]Res[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]n[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) + [/COLOR][COLOR=#0000BB]Data[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700])
        [/COLOR][COLOR=#0000BB]End [/COLOR][COLOR=#007700]If
    [/COLOR][COLOR=#0000BB]Next
End With
Sheet1[/COLOR][COLOR=#007700].[[/COLOR][COLOR=#0000BB]H9[/COLOR][COLOR=#007700]:[/COLOR][COLOR=#0000BB]H214[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Res
End Sub 
[/COLOR][/COLOR]
 
Upvote 0
hoặc giacatdu đại, thì thử như sau, thêm dòng có ghi chú:
Mã:
[COLOR=#000000][COLOR=#007700]Private [/COLOR][COLOR=#0000BB]Sub CommandButton1_Click[/COLOR][COLOR=#007700]()
[/COLOR][COLOR=#0000BB]Dim MaThuoc[/COLOR][COLOR=#007700](), [/COLOR][COLOR=#0000BB]Data[/COLOR][COLOR=#007700](), [/COLOR][COLOR=#0000BB]Res[/COLOR][COLOR=#007700](), [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]&, [/COLOR][COLOR=#0000BB]n[/COLOR][COLOR=#007700]&, [/COLOR][COLOR=#0000BB]k[/COLOR][COLOR=#007700]&
[/COLOR][COLOR=#0000BB]Data [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Sheet11[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"W3"[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Sheet11[/COLOR][COLOR=#007700].[[/COLOR][COLOR=#0000BB]X65536[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]3[/COLOR][COLOR=#007700])).[/COLOR][COLOR=#0000BB]Value
MaThuoc [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Sheet1[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"B9:B214"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value
ReDim Res[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1 To UBound[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]MaThuoc[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]1 To 1[/COLOR][COLOR=#007700])
[/COLOR][COLOR=#0000BB]With CreateObject[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"scripting.dictionary"[/COLOR][COLOR=#007700])
    For [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To UBound[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]MaThuoc[/COLOR][COLOR=#007700])
        If [/COLOR][COLOR=#0000BB]Not [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]exists[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]MaThuoc[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700])) [/COLOR][COLOR=#0000BB]Then
            k [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]k [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1
            [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Add MaThuoc[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]k
        End [/COLOR][COLOR=#007700]If
[/COLOR][/COLOR][COLOR=#ff0000]        Res(i,1)=0  ''2015 them dong nay vao code[/COLOR][COLOR=#000000][COLOR=#007700]
    [/COLOR][COLOR=#0000BB]Next
    [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To UBound[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Data[/COLOR][COLOR=#007700])
        If .[/COLOR][COLOR=#0000BB]exists[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Data[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700])) [/COLOR][COLOR=#0000BB]Then
            n [/COLOR][COLOR=#007700]= .[/COLOR][COLOR=#0000BB]Item[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Data[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]))
            [/COLOR][COLOR=#0000BB]Res[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]n[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#0000BB]Res[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]n[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) + [/COLOR][COLOR=#0000BB]Data[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700])
        [/COLOR][COLOR=#0000BB]End [/COLOR][COLOR=#007700]If
    [/COLOR][COLOR=#0000BB]Next
End With
Sheet1[/COLOR][COLOR=#007700].[[/COLOR][COLOR=#0000BB]H9[/COLOR][COLOR=#007700]:[/COLOR][COLOR=#0000BB]H214[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Res
End Sub 
[/COLOR][/COLOR]
đúng ý em rồi anh ơi
cảm ơn anh nhiều lắm!
 
Upvote 0

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

Back
Top Bottom