xaydung.vig
Thành viên mới

- Tham gia
- 10/7/19
- Bài viết
- 12
- Được thích
- 0
Dùng thử hàm này nhé.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 !
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
=tinhtong(B2;Sheet2!$B$2:$D$6;Sheet3!$B$2:$D$6;Sheet4!$B$2:$D$11)
Bạn có thể dùng công cụ Consolidate có sẵn trong Excel, chỉ mất 10 giây.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 !
Lý do là các ký tự "cam" & "chanh" trong các Sheets của bạn không giống nhau.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
Như vậy là sao ạ?Loại tính tổng lu xu bu này nó nguy hiểm vô cùng
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:Như vậy là sao ạ?
Nếu viết thì nên viết theo kiểu hàm sumifs á bác?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?)
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.Nếu viết thì nên viết theo kiểu hàm sumifs á bác?
Thêm vài lệnhBá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
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
Nghĩa là khi mình giải thì phải hình dung ra những biến tướng khác của bài toán?uyển chuển yêu cầu của mình trước