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
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