vuminh1601
Thành viên thường trực
- Tham gia
- 7/9/07
- Bài viết
- 336
- Được thích
- 354
- Nghề nghiệp
- Kế toán
Option Explicit
Function YouSum(SumRange As Range, LookUpRange As Range, Optional Crit1 As Variant _
, Optional Crit2, Optional Crit3)
Dim WF As Object, Rw1 As Double, Rw2 As Double, Rw3 As Double, Col As Byte
Col = SumRange.Column - LookUpRange.Column
Set WF = Application.WorksheetFunction
If IsMissing(Crit1) And IsMissing(Crit2) And IsMissing(Crit3) Then
YouSum = WF.Sum(SumRange)
Else
If Not IsMissing(Crit3) Then _
Rw3 = LookUpRange.Find(Crit3, , xlFormulas, xlWhole).Offset(, 2).Value
If Not IsMissing(Crit2) Then _
Rw2 = LookUpRange.Find(Crit2).Offset(, 2).Value
If Not IsMissing(Crit1) Then _
Rw1 = LookUpRange.Find(Crit1).Offset(, Col).Value
YouSum = Rw1 + Rw2 + Rw3
End If
End Function
|=> "Mình thử chép công thức sang cột D thì hàm tính sai ( Như hình kèm theo)"
Mình đã trù đến chuyện này thông qua biến Col; Nhưng trong 3 biến, thì mới thay có 1 ký số 2 thành Col; Còn 2 con 2 nữa mình lơ đãng quá; Bạn sửa lại giúp nha.
Mình nghĩ, nếu tra tìm tổng ở nhiều cột khác nhau, thì ta fải ghép nhiều hàm tự tạo lại thôi;
Ví du cú fáp =YouSum(C5:C111,A5:A111,A5,A11,5151) + YouSum(D15:E101,A5:A111,A9,A21,551)
Rw3 = LookUpRange.Find(Crit3, , xlFormulas, xlWhole).Offset(, col).Value
và đoạn
Rw2 = LookUpRange.Find(Crit2).Offset(, col).Value
Vì trong VBA cũng có rất nhiều hàm & có những cái trùng về chức năng, cú fáp, . . . với hàm trong Excel; Chắc để dễ fân biệt nên ông í làm zậy đó mà!Hơn nữa hàm SUM của Excel khi dùng trong VBA phải dùng cái này Set WF = Application.WorksheetFunction
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2