Viết hàm Sumifs cho Excel 2003

Liên hệ QC

songmai

Thành viên chính thức
Tham gia
6/8/07
Bài viết
92
Được thích
36
Giới tính
Nam
Thấy nhiều bạn dùng Excel 2003 có nhu cầu dùng hàm sumifs như ở Excel 2007 trở lên nhưng Excel 2003 lại không có, mình viết đại cái hàm như vậy nhưng chỉ có tối đa 3 điều kiện. Vì kiến thức, kinh nghiệm có hạn nên code còn thô lắm. Mong mọi người lượng thứ và góp ý thêm để hoàn thiện.

Function SUMIFS(SumRng As Range, Rng1 As Range, Cri_1 As String, Optional Rng2 As Range, Optional Cri_2 As String, Optional Rng3 As Range, Optional Cri_3 As String)
Dim Colm1, Colm2, Colm3 As Long
Dim SumRow As Long
Dim Reslt As Double
Dim EachRng As Range

Colm1 = Rng1.Column
If Rng2 Is Nothing And Rng3 Is Nothing Then
Reslt = WorksheetFunction.SumIf(Rng1, Cri_1, SumRng)
End If

On Error Resume Next
If Not Rng2 Is Nothing And Rng3 Is Nothing Then
Colm2 = Rng2.Column
For Each EachRng In SumRng
SumRow = EachRng.Row
If Cri_2 = "" Then
MsgBox "Thieu dieu kien thu 2!!!"
Exit Function
ElseIf Cells(SumRow, Colm1) = Cri_1 And Cells(SumRow, Colm2) = Cri_2 Then
If Rng1.Row <= SumRow And Rng2.Row <= SumRow Then
Reslt = Reslt + EachRng.Value
End If
End If
Next
End If

If Not Rng3 Is Nothing Then
Colm3 = Rng3.Column
Colm2 = Rng2.Column
For Each EachRng In SumRng
SumRow = EachRng.Row
If Cri_3 = "" Then
MsgBox "Thieu dieu kien thu 3!!!"
Exit Function
ElseIf Cells(SumRow, Colm1) = Cri_1 And Cells(SumRow, Colm2) = Cri_2 And Cells(SumRow, Colm3) = Cri_3 Then
If Rng1.Row <= SumRow And Rng2.Row <= SumRow And Rng3.Row <= SumRow Then
Reslt = Reslt + EachRng.Value
End If
End If
Next
End If

SUMIFS = Reslt

End Function
 
Thấy nhiều bạn dùng Excel 2003 có nhu cầu dùng hàm sumifs như ở Excel 2007 trở lên nhưng Excel 2003 lại không có, mình viết đại cái hàm như vậy nhưng chỉ có tối đa 3 điều kiện. Vì kiến thức, kinh nghiệm có hạn nên code còn thô lắm. Mong mọi người lượng thứ và góp ý thêm để hoàn thiện.

Function SUMIFS(SumRng As Range, Rng1 As Range, Cri_1 As String, Optional Rng2 As Range, Optional Cri_2 As String, Optional Rng3 As Range, Optional Cri_3 As String)
Dim Colm1, Colm2, Colm3 As Long
Dim SumRow As Long
Dim Reslt As Double
Dim EachRng As Range

Colm1 = Rng1.Column
If Rng2 Is Nothing And Rng3 Is Nothing Then
Reslt = WorksheetFunction.SumIf(Rng1, Cri_1, SumRng)
End If

On Error Resume Next
If Not Rng2 Is Nothing And Rng3 Is Nothing Then
Colm2 = Rng2.Column
For Each EachRng In SumRng
SumRow = EachRng.Row
If Cri_2 = "" Then
MsgBox "Thieu dieu kien thu 2!!!"
Exit Function
ElseIf Cells(SumRow, Colm1) = Cri_1 And Cells(SumRow, Colm2) = Cri_2 Then
If Rng1.Row <= SumRow And Rng2.Row <= SumRow Then
Reslt = Reslt + EachRng.Value
End If
End If
Next
End If

If Not Rng3 Is Nothing Then
Colm3 = Rng3.Column
Colm2 = Rng2.Column
For Each EachRng In SumRng
SumRow = EachRng.Row
If Cri_3 = "" Then
MsgBox "Thieu dieu kien thu 3!!!"
Exit Function
ElseIf Cells(SumRow, Colm1) = Cri_1 And Cells(SumRow, Colm2) = Cri_2 And Cells(SumRow, Colm3) = Cri_3 Then
If Rng1.Row <= SumRow And Rng2.Row <= SumRow And Rng3.Row <= SumRow Then
Reslt = Reslt + EachRng.Value
End If
End If
Next
End If

SUMIFS = Reslt

End Function
Cám ơn ban đã chia sẻ, có điều trong 2003 nếu không có hàm sumifs thì vẫn còn sumproduct. nếu đã dùng sumifs thì dùng excel 2007 trở lên sẽ sum được nhiều hơn 3 điều kiện--=0
 
Upvote 0
Web KT
Back
Top Bottom