Xin các sư phụ chỉ giáo về cách dùng sumifs với VBA khác sheet với điều kiện trong khoảng thời gian ngày .

Liên hệ QC

HOANGHUUTUAN

Thành viên mới
Tham gia
29/8/08
Bài viết
26
Được thích
0
Sub abc()
Dim i As Long
Dim lr As Long
Dim lr1 As Long
Dim vaData As Variant
Dim colUnique As Collection
Dim aOutput() As Variant
Dim j As Long
Dim aa As Range
Dim bb As Range
Dim cc As Range
Dim dd As Range
Dim ee As Range
Dim Ngaydau As Date, Ngaycuoi As Date

lr1 = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
vaData = Worksheets("data").Range("A1:G" & lr1).Value
Set colUnique = New Collection
Set aa = Sheet1.Range("A1:A" & lr1)
Set bb = Sheet1.Range("B1:B" & lr1)
Set cc = Sheet1.Range("H1:H" & lr1)
Set dd = Sheet1.Range("I1:I" & lr1)
Set ee = Sheet1.Range("J1:J" & lr1)


For i = LBound(vaData, 1) To UBound(vaData, 1)
On Error Resume Next
colUnique.Add vaData(i, 1), CStr(vaData(i, 1))
On Error GoTo 0
Next i
ReDim aOutput(1 To colUnique.Count, 1 To 1)
For i = 1 To colUnique.Count
aOutput(i, 1) = colUnique.Item(i)
Next i
Sheet2.Range("A2").Resize(UBound(aOutput, 1), UBound(aOutput, 2)).Value = aOutput
lr = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
Ngaydau = CDate(Sheet2.Range("I10").Value)
Ngaycuoi = CDate(Sheet2.Range("J10").Value)
For j = 1 To lr - 1
'Cells(j + 1, 2).Value = Application.WorksheetFunction.SumIf(Sheets("data").Range("A1:A" & lr1), Sheet2.Cells(j + 1, 1), Sheets("data").Range("B1:B" & lr1))
Cells(j + 1, 2).Value = Application.WorksheetFunction.SumIf(aa, Sheet2.Cells(j + 1, 1), bb)
'Cells(j + 1, 4).Value = Application.WorksheetFunction.SumIf(Sheets("data").Range("A1:A" & lr1), Sheet2.Cells(j + 1, 1), Sheets("data").Range("H1:H" & lr1))
Cells(j + 1, 4).Value = Application.WorksheetFunction.SumIf(aa, Sheet2.Cells(j + 1, 1), cc)
Cells(j + 1, 6).Value = Application.WorksheetFunction.SumIfs(dd, aa, Sheet2.Cells(j + 1, 1), ee, ">=" & Ngaydau, ee, "<=" & Ngaycuoi)

Next j

End Sub
 

File đính kèm

  • MT.xlsm
    30.7 KB · Đọc: 80
Chẳng ai muốn làm "sư phụ" của bạn đâu.
Viết kiểu bạn thì sửa lại như vầy thử xem:
PHP:
Public Sub GPE()
Dim lr As Long
Dim Rng As Range
Dim Cll As Range
Dim aa As Range
Dim bb As Range
Dim hh As Range
Dim ii As Range
Dim jj As Range
Dim Ngaydau As Long
Dim Ngaycuoi As Long
With Sheets("data")
    lr = .Range("A60000").End(xlUp).Row
    Set aa = .Range("A1:A" & lr)
    Set bb = .Range("B1:B" & lr)
    Set hh = .Range("H1:H" & lr)
    Set ii = .Range("I1:I" & lr)
    Set jj = .Range("J1:J" & lr)
End With
With Sheets("Tonghop")
    Ngaydau = .Range("I10").Value
    Ngaycuoi = .Range("J10").Value
    Set Rng = .Range("A2", .Range("A2").End(xlDown))
End With
With Application.WorksheetFunction
    For Each Cll In Rng
        Cll(, 2) = .SumIf(aa, Cll, bb)
        Cll(, 4) = .SumIf(aa, Cll, hh)
        Cll(, 6) = .SumIfs(ii, aa, Cll, jj, ">=" & Ngaydau, jj, "<=" & Ngaycuoi)
    Next Cll
End With
    Set aa = Nothing
    Set bb = Nothing
    Set hh = Nothing
    Set ii = Nothing
    Set jj = Nothing
    Set Rng = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
C
Chẳng ai muốn làm "sư phụ" của bạn đâu.
Viết kiểu bạn thì sửa lại như vầy thử xem:
PHP:
Public Sub GPE()
Dim lr As Long
Dim Rng As Range
Dim Cll As Range
Dim aa As Range
Dim bb As Range
Dim hh As Range
Dim ii As Range
Dim jj As Range
Dim Ngaydau As Long
Dim Ngaycuoi As Long
With Sheets("data")
    lr = .Range("A60000").End(xlUp).Row
    Set aa = .Range("A1:A" & lr)
    Set bb = .Range("B1:B" & lr)
    Set hh = .Range("H1:H" & lr)
    Set ii = .Range("I1:I" & lr)
    Set jj = .Range("J1:J" & lr)
End With
With Sheets("Tonghop")
    Ngaydau = .Range("I10").Value
    Ngaycuoi = .Range("J10").Value
    Set Rng = .Range("A2", .Range("A2").End(xlDown))
End With
With Application.WorksheetFunction
    For Each Cll In Rng
        Cll(, 2) = .SumIf(aa, Cll, bb)
        Cll(, 4) = .SumIf(aa, Cll, hh)
        Cll(, 6) = .SumIfs(ii, aa, Cll, jj, ">=" & Ngaydau, jj, "<=" & Ngaycuoi)
    Next Cll
End With
    Set aa = Nothing
    Set bb = Nothing
    Set hh = Nothing
    Set ii = Nothing
    Set jj = Nothing
    Set Rng = Nothing
End Sub
Thank you so much
vi sao phai set lai cac vung = Nothing ?
Anh giai thich giup Em nhe
Bài đã được tự động gộp:

C

Cảm ơn so much
vi sao phai set lai cac vung = Nothing ?
Anh giai thich giup Em nhe
Cho Em hỏi một chút vì sao mình khai báo ngày là kiểu Long mà không phải kiểu Date?
Và kiểu With Application.WorksheetFunction được hiểu như thế nào vậy?
Một lần nữa rất cảm ơn Anh đã giúp
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom