Tính tổng các sheet

Liên hệ QC

xaydung.vig

Thành viên mới
Tham gia
10/7/19
Bài viết
9
Được thích
0
Nhờ các bác giúp e lập hàm tính tổng dữ liệu các sheet sắp xếp lung tung (file đính kèm) . E xin cảm ơn !
 

File đính kèm

  • tính tổng.xlsx
    11.6 KB · Đọc: 12
Nhờ các bác giúp e lập hàm tính tổng dữ liệu các sheet sắp xếp lung tung (file đính kèm) . E xin cảm ơn !
Dùng thử hàm này nhé.
Mã:
Function tinhtong(ByVal dk As String, ParamArray mang()) As Double
         Dim T, arr, tong As Double, i As Long
         For Each T In mang
             arr = T.Value
             For i = 1 To UBound(arr)
                If arr(i, 1) = dk Then
                   tong = tong + arr(i, 3)
                End If
             Next i
         Next
         tinhtong = tong
End Function
Mã:
=tinhtong(B2;Sheet2!$B$2:$D$6;Sheet3!$B$2:$D$6;Sheet4!$B$2:$D$11)
 

File đính kèm

  • tính tổng.xlsm
    16.9 KB · Đọc: 10
Cảm ơn các Bác đã giúp đỡ ạ
 
Lần chỉnh sửa cuối:
Bác snow25 ơi sao cái VBA bác viết nó tính tổng không chính xác vậy có bị lỗi chỗ nào không Bác? như số lượng Cam, Chanh trong file e gửi cộng không chính xác . Mong Bác xem lại giúp ạ. Thanks
 

File đính kèm

  • tính tổng3.xlsm
    18.5 KB · Đọc: 4
Lần chỉnh sửa cuối:
Bác snow25 ơi sao cái VBA bác viết nó tính tổng không chính xác vậy có bị lỗi chỗ nào không Bác? như số lượng Cam, Chanh trong file e gửi cộng không chính xác . Mong Bác xem lại giúp ạ. Cảm ơn
Lý do là các ký tự "cam" & "chanh" trong các Sheets của bạn không giống nhau.
 
Lần chỉnh sửa cuối:
Loại tính tổng lu xu bu này nó nguy hiểm vô cùng. Chỉ lệch 1 chút là tính sai.
Bạn ấy xâm mình mới đứng ra viết code chứ tôi thì đầu hàng.
 
Cái này khỏi cần hàm. Nếu là dữ liệu "tĩnh" thì dùng công cụ của anh @huuthang_bd còn nếu dữ liệu "động" thì dùng Query để tổng hợp lại rồi dùng Pivot là nhanh mà đơn giản mà bạn.
 
Cái tổng nó lấy từng vùng của nhiều sheets chả theo quy luật nào. Có đến 2 chỗ để sai:
1. tham gõ vào không đúng, chỉ cần lệch 1 chút là sai bấy.
2. cái vùng nó bị dời đi thì function đâu biết?
Lúc tôi thử hàm thì ra kết quả đúng vì dữ liệu như vậy. Ai biết ngày mai dữ liệu lệch 1 chút.
"nguy hiểm vô cùng" ở chỗ nếu tôi không biết là nó tính lệch thì tin tức tôi nhận được và lấy ra từ nó sai bấy hết. (giả dụ hàm này đưa kết quả vào một hàm khác để tính tiếp?)
 
Cái tổng nó lấy từng vùng của nhiều sheets chả theo quy luật nào. Có đến 2 chỗ để sai:
1. tham gõ vào không đúng, chỉ cần lệch 1 chút là sai bấy.
2. cái vùng nó bị dời đi thì function đâu biết?
Lúc tôi thử hàm thì ra kết quả đúng vì dữ liệu như vậy. Ai biết ngày mai dữ liệu lệch 1 chút.
"nguy hiểm vô cùng" ở chỗ nếu tôi không biết là nó tính lệch thì tin tức tôi nhận được và lấy ra từ nó sai bấy hết. (giả dụ hàm này đưa kết quả vào một hàm khác để tính tiếp?)
Nếu viết thì nên viết theo kiểu hàm sumifs á bác?
 
Nếu viết thì nên viết theo kiểu hàm sumifs á bác?
Hầu hết các hàm của Excel đều dựa trên giả thiết rằng bảng tính đã tương đối chuẩn, và cách tính toán cũng chuẩn.
Chả hàm nào áp dụng an toàn nổi với trường hợp lung lung.
Ngừoi dùng phải tự biết cấu trúc file thế nào để làm việc.
Trên nguyên tắc, người làm chủ Excel phải biết uyển chuển yêu cầu của mình trước, sau đó mới thiết kế, cuối cùng mới bắt đầu tính toán.
Ở đây, người ta ỷ lại vào sự đa năng của code để bỏ tất cả các công đoạn trên. Đa năng thì rất dễ bị bỏ sót. Vì vậy, nếu dùng code để đáp ứng những yêu cầu phức tạp thì mỗi lần tính cần phải kiểm soát lại xem nó có sơ xuất, bỏ sót cái gì không.
 
Lần chỉnh sửa cuối:
Bác snow25 ơi sao cái VBA bác viết nó tính tổng không chính xác vậy có bị lỗi chỗ nào không Bác? như số lượng Cam, Chanh trong file e gửi cộng không chính xác . Mong Bác xem lại giúp ạ. Cảm ơn
Thêm vài lệnh
Mã:
Function TinhTong(ByVal dkStr As String, ByVal jCol As Long, ParamArray sArr()) As Double
    Dim Rng, Arr(), tong As Double, i As Long, sRow As Long
    If Len(dkStr) > 0 Then
        dkStr = LCase(Application.Trim(dkStr))
        For Each Rng In sArr
             Arr = Rng.Value
             sRow = UBound(Arr)
             For i = 1 To sRow
                If LCase(Application.Trim(Arr(i, 1))) = dkStr Then
                   If IsNumeric(Arr(i, 3)) Then tong = tong + Arr(i, 3)
                End If
             Next i
         Next
         TinhTong = tong
    End If
End Function
 

File đính kèm

  • tính tổng3.xlsm
    18.5 KB · Đọc: 2
Web KT
Back
Top Bottom