Nhờ các bạn giúp tôi rút gọn hàm tính tổng này với! (1 người xem)

  • Thread starter Thread starter nam0099
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

nam0099

Thành viên mới
Tham gia
28/5/08
Bài viết
28
Được thích
4
Đây là ô tôi tính tổng số học sinh nữ dân tộc Kinh ở nhiều sheet
=SUMPRODUCT(('5_A'!$F$6:$F$58="Nữ")*('5_A'!$I$6:$I$58="Kinh"))+SUMPRODUCT(('5_B'!$F$6:$F$58="Nữ")*('5_B'!$I$6:$I$58="Kinh"))+SUMPRODUCT(('5_C'!$F$6:$F$58="Nữ")*('5_C'!$I$6:$I$58="Kinh"))+SUMPRODUCT(('5_D'!$F$6:$F$58="Nữ")*('5_D'!$I$6:$I$58="Kinh"))+SUMPRODUCT(('5_E'!$F$6:$F$58="Nữ")*('5_E'!$I$6:$I$58="Kinh"))+SUMPRODUCT('5_G'!$F$6:$F$58="Nữ")*('5_G'!$I$6:$I$58="Kinh"))+SUMPRODUCT(('5_H'!$F$6:$F$58="Nữ")*('5_H'!$I$6:$I$58="Kinh"))
 
VBA cũng sẽ là phương án tuyệt với để thay SUMPRODUCT()
 
Đây là ô tôi tính tổng số học sinh nữ dân tộc Kinh ở nhiều sheet
=SUMPRODUCT(('5_A'!$F$6:$F$58="Nữ")*('5_A'!$I$6:$I$58="Kinh"))+SUMPRODUCT(('5_B'!$F$6:$F$58="Nữ")*('5_B'!$I$6:$I$58="Kinh"))+SUMPRODUCT(('5_C'!$F$6:$F$58="Nữ")*('5_C'!$I$6:$I$58="Kinh"))+SUMPRODUCT(('5_D'!$F$6:$F$58="Nữ")*('5_D'!$I$6:$I$58="Kinh"))+SUMPRODUCT(('5_E'!$F$6:$F$58="Nữ")*('5_E'!$I$6:$I$58="Kinh"))+SUMPRODUCT('5_G'!$F$6:$F$58="Nữ")*('5_G'!$I$6:$I$58="Kinh"))+SUMPRODUCT(('5_H'!$F$6:$F$58="Nữ")*('5_H'!$I$6:$I$58="Kinh"))
Có thể viết vầy cũng được:
Mã:
=SUMPRODUCT(COUNTIFS(INDIRECT("5_"&{"A","B","C","D","E","G","H"}&"!$F$6:$F$58"),"Nữ",INDIRECT("5_"&{"A","B","C","D","E","G","H"}&"!$I$6:$I$58"),"Kinh"))
Để đơn giản hơn thì lập một bảng các tên sheet, rồi thay bảng đó vào chỗ "5_"&{"A","B","C","D","E","G","H"} của công thức trên là được!!!
 
Tôi gửi File Tổng hợp lên bạn giúp tôi với nhé
 

File đính kèm

Tôi làm theo công thức trên của bạn đc rồi. Cảm ơn bạn nhiều nhiều.
 
Nhưng hàm trên của bạn lại sử
COUNTIFS nên một số máy dùng offic 2003 không đọc đc
 
Nhưng hàm trên của bạn lại sử
COUNTIFS nên một số máy dùng offic 2003 không đọc đc
Vậy đổi thử hàm này xem:
PHP:
M5=SUMPRODUCT((T(OFFSET(INDIRECT("'5_"&{"A","B","C","D","E","G","H"}&"'!F5"),ROW($1:$53),))="Nữ")*(T(OFFSET(INDIRECT("'5_"&{"A","B","C","D","E","G","H"}&"'!I5"),ROW($1:$53),))=$K5))
Enter fill xuống.

Chúc bạn ngày vui.
 
Vậy đổi thử hàm này xem:
PHP:
M5=SUMPRODUCT((T(OFFSET(INDIRECT("'5_"&{"A","B","C","D","E","G","H"}&"'!F5"),ROW($1:$53),))="Nữ")*(T(OFFSET(INDIRECT("'5_"&{"A","B","C","D","E","G","H"}&"'!I5"),ROW($1:$53),))=$K5))
Enter fill xuống.

Chúc bạn ngày vui.
Cái này chắc không fill xuống đc bạn quocgiacan à. Vì các dòng xuống tiêp theo là tổng của các dân tộc khác. Vậy có cách nào nhanh hơn kg? Nếu kg tôi lại phải sửa tên từng dòng vậy!
 
Cái này chắc không fill xuống đc bạn quocgiacan à. Vì các dòng xuống tiêp theo là tổng của các dân tộc khác. Vậy có cách nào nhanh hơn kg? Nếu kg tôi lại phải sửa tên từng dòng vậy!
Tôi làm thấy bình thường mà.

Bạn xem thử file kèm.

Chúc bạn ngày vui.
 

File đính kèm

Cái này chắc không fill xuống đc bạn quocgiacan à. Vì các dòng xuống tiêp theo là tổng của các dân tộc khác. Vậy có cách nào nhanh hơn kg? Nếu kg tôi lại phải sửa tên từng dòng vậy!
Tôi thấy trong file của bạn có "cả đống" Module, sao không tính chuyện dùng Hàm tự tạo nhỉ?
 
Đúng rồi lúc trước tôi mở ra trên điện thoại mà chưa nhập cụ thể trên bẳng Excel nên nói vậy. Giờ nhập vào fill thấy ok. "nhanh, gon, nhẹ" cảm ơn bạn nhiều.
Vậy sẳn, cột L bạn dùng công thức của @eke_rula gửi điều chỉnh lại cho gọn luôn, vì chỉ là COUNTIF() nên chắc excel 2003 sử dụng được:
PHP:
L5=SUMPRODUCT(COUNTIF(INDIRECT("'5_"&{"A","B","C","D","E","G","H"}&"'!$I$6:$I$58"),$K5))
Enter fill xuống.

Lưu ý: K11="HMông " đang có khoảng trắng cuối chữ bạn xóa khoảng trắng đó đi thì công thức ra là 1 tại L11.

Chúc bạn ngày vui.
p/s: Về "nhanh, gọn, nhẹ" thì bạn nói đúng chữ "gọn" hơn cho so sánh với công thức của bạn thôi, chứ nhanh và nhẹ bạn phải dùng VBA.
 
Lần chỉnh sửa cuối:
Bạn Ba Tê ơi tôi kg biết nhiều lắm về VBA lắm chỉ đang mò mẫm làm thôi nếu đc bạn chỉ giúp tôi 1 đoạn bằng module để tôi học hỏi.
Cho bạn hàm tự tạo này:
PHP:
Function COUNTSHEETS(rng3 As Range, condi2 As Variant, rng4 As Range, condi1 As Variant)
Dim i As Long, j As Long, k As Long, LR As Long
Dim arr, darr
If rng3.Count <> rng4.Count Then
    MsgBox ("Hai vung khong bang nhau, xin vui long chon lai!!!")
    Exit Function
End If
rng = rng3.Address: rng2 = rng4.Address
LR = Range(rng).Count
ReDim arr(1 To LR, 1 To 1), darr(1 To LR, 1 To 1), tarr(1 To LR, 1 To 1)
Set ws = ThisWorkbook
With ws
    For i = 1 To ws.Sheets.Count
        arr = Sheets(i).Range(rng).Value
        darr = Sheets(i).Range(rng2).Value
        For j = 1 To UBound(arr)
            If LCase(CStr(arr(j, 1))) = LCase(CStr(condi2)) And LCase(CStr(darr(j, 1))) = LCase(CStr(condi1)) Then k = k + 1
        Next j
    Next i
End With
COUNTSHEETS = k
End Function
 

File đính kèm

Chứ ý tôi nói ở trên rồi đấy. Mấy cha kia dùng in đi rét xử đó thấy không? Còn có file đính kèm tường minh hơn thì code 1 đoạn là xong...
//mà học lỏm (học nhiều) để làm gì? Biết nhiều khổ lắm...:D
Anh có thể viết cho em đoạn code làm bài này được không ạ? Cám ơn anh!!
 
Chứ ý tôi nói ở trên rồi đấy. Mấy cha kia dùng in đi rét xử đó thấy không? Còn có file đính kèm tường minh hơn thì code 1 đoạn là xong...
//mà học lỏm (học nhiều) để làm gì? Biết nhiều khổ lắm...:D
rõ biết là khổ, vẫn phải ép anh ạ không thì ngày càng ngu
 
Bạn Ba Tê ơi tôi kg biết nhiều lắm về VBA lắm chỉ đang mò mẫm làm thôi nếu đc bạn chỉ giúp tôi 1 đoạn bằng module để tôi học hỏi.
Hàm tự tạo thì phải khai báo tất cả, không thể nhìn bằng mắt mà biết có bi nhiều lớp.
 

File đính kèm

Bài viết mới nhất

Back
Top Bottom