chantinh2th
Thành viên mới

- Tham gia
- 6/10/11
- Bài viết
- 13
- Được thích
- 3
Em tìm được trên mạng có một Function về hàm SumifAMS giúp Sumif trên nhiều Sheet khá hay. Trước hết xin chia sẽ lại các bạn nào cần dùng mà không search thấy trên google
Công thức của hàm này : SumifAMS(đối tượng, range 1 sheet1, range 2 sheet1, range 1 sheet2, range 2 sheet2......)
Khó khăn em cần giúp đỡ:
Khi em viết sẵn hàm này cho 1 ô cell( vì em không biết wookbook đó có bao nhiêu sheet nên em cố gắng coppy cho công thức dài thật dài ra, để nó tổng quát,tức là dù có bao nhiêu sheet thì nó vẫn tính toán được. Kiểu thế này:
SumifAMS(đối tượng, range 1 sheet1, range 2 sheet1, range 1 sheet2, range 2 sheet2, range 1 sheet 3,range 2 sheet 3, range 1 sheet 4, range 2 sheet 4, range 1 sheet 5, range 2 sheet 5)
Tuy nhiên do hiện tại wookbook nó chưa có các sheet 3,4,5 đó nên nó không cho viết hàm như vậy.
Xin các bác có thể chế biến lại một tí cái Function trên cho nó phù hợp hơn không.
Hoặc giúp em một đoạn code, mà khi đó em nhập số lượng Sheet vào, ví dụ có 5 sheet thì ta nhập là 5, tên sheet có dạng sheetn. Bấm Button. Và công thức tại ô cell kia nó tự động nhãy ra thành:
SumifAMS(đối tượng, range 1 sheet1, range 2 sheet1, range 1 sheet2, range 2 sheet2, range 1 sheet 3,range 2 sheet 3, range 1 sheet 4, range 2 sheet 4, range 1 sheet 5, range 2 sheet 5)
Xin cảm ơn!
Function SumIFAMS(lookup_value As Range, ParamArray cellranges() As Variant)
Dim i As Integer, rng1 As Variant, temp As Single, a As Boolean
Dim rng2 As Variant, value As Variant, j As Single
If (UBound(cellranges) + 1) Mod 2 <> 0 Then
MsgBox "The number of range arguments must be even. 2, 4 , 8 ... and so on"
Exit Function
End If
For i = LBound(cellranges) To UBound(cellranges) Step 2
If cellranges(i).Rows.Count <> cellranges(i + 1).Rows.Count Then
MsgBox "The number of rows in range arguments don´t match."
End If
If cellranges(i).Columns.Count <> 1 Then
MsgBox "Range arguments can only have size one column each."
Exit Function
End If
rng1 = cellranges(i).value
rng2 = cellranges(i + 1).value
For j = LBound(rng1) To UBound(rng1)
For Each value In lookup_value
If UCase(rng1(j, 1)) = UCase(value) Then a = True
Next value
If a = True Then temp = temp + rng2(j, 1)
a = False
Next j
Next i
SumIFAMS = temp
End Function
Công thức của hàm này : SumifAMS(đối tượng, range 1 sheet1, range 2 sheet1, range 1 sheet2, range 2 sheet2......)
Khó khăn em cần giúp đỡ:
Khi em viết sẵn hàm này cho 1 ô cell( vì em không biết wookbook đó có bao nhiêu sheet nên em cố gắng coppy cho công thức dài thật dài ra, để nó tổng quát,tức là dù có bao nhiêu sheet thì nó vẫn tính toán được. Kiểu thế này:
SumifAMS(đối tượng, range 1 sheet1, range 2 sheet1, range 1 sheet2, range 2 sheet2, range 1 sheet 3,range 2 sheet 3, range 1 sheet 4, range 2 sheet 4, range 1 sheet 5, range 2 sheet 5)
Tuy nhiên do hiện tại wookbook nó chưa có các sheet 3,4,5 đó nên nó không cho viết hàm như vậy.
Xin các bác có thể chế biến lại một tí cái Function trên cho nó phù hợp hơn không.
Hoặc giúp em một đoạn code, mà khi đó em nhập số lượng Sheet vào, ví dụ có 5 sheet thì ta nhập là 5, tên sheet có dạng sheetn. Bấm Button. Và công thức tại ô cell kia nó tự động nhãy ra thành:
SumifAMS(đối tượng, range 1 sheet1, range 2 sheet1, range 1 sheet2, range 2 sheet2, range 1 sheet 3,range 2 sheet 3, range 1 sheet 4, range 2 sheet 4, range 1 sheet 5, range 2 sheet 5)
Xin cảm ơn!