PDA

View Full Version : Hàm tính tổng một ô trong tất cả các sheets



kelvin
02-10-06, 01:48 PM
Có bạn hỏi mình:"minh muon viet mot ham de tinh tong mot o trong tat ca cac sheet .thi du nhu o A3 chang hen minh viet nhu sau:

Function sumall(cel As Range)’Dim wSht As Worksheet
Dim allwShts As Sheets
Set allwShts = Worksheets
For Each wSht In allwShts
sumall = sumall + cel.value
Next wSht
End function
Nhung ket qua bi loi #VALUE!
Ban co the giup minh nhe!Cam on nhieu"

Mình có nghĩ cách giải quyết tàm tạm trong file att, mong các bạn giúp tiếp cho bạn thanguct@gmail.com

nvson
02-10-06, 02:20 PM
Một cách cực kỳ đơn giản là bạn sử dụng hàm có sẵn trong Excel.
Để tính tổng toàn bộ các ô A1 trong tất cả các sheet ta dùng hàm: Sum()
Tại ô bất kỳ (A3 chẳng hạn) đánh công thức sau:
=SUM(Sheet1:Sheet3!A1)
OK

Nếu bạn thích viết bằng VBA thì sử dụng code sau:

Option Explicit
Public Function tinhtong_sheet(Cell_1 As Range)
Dim Sum_All_Sheet As Double
Dim i As Byte
Dim sheet
i = 0
Sum_All_Sheet = 0
For Each sheet In Worksheets
i = i + 1
Sum_All_Sheet = Sum_All_Sheet + _
Application.Sheets(i).Cells(Cell_1.Row, Cell_1.Column)
Next
tinhtong_sheet = Sum_All_Sheet
End Function

PhanTuHuong
02-10-06, 02:48 PM
Vấn đề này đã được tro đổi ở (tuy nhiên vẫn còn hạn chế là khi thay đổi các giá trị thì nó không tự tính toán lại):



http://www.giaiphapexcel.com/forum/showthread.php?t=121&page=2



To ngvson: Công thức = Sum() của bạn thật đơn giản, hiệu quả. Nhưng tôi hỏi nếu tên các sheet không cùng kiểu thì như thế nào vậy, có nên dùng theo thứ tự các sheet 1,2,3... thì tuỳ biến cao hơn không?

nvson
02-10-06, 03:01 PM
Anh Hướng à. Tên Sheet không quan trọng. Vấn đề là lúc mình đánh tên hàm thôi.
Tại ô cần tính tổng, đánh =sum( rồi chọn ô cần tính tổng, sau đó nhấn phím Shift rồi chọn đến sheet cuối cùng, tiếp đó đánh dấu ) là xong.

Hình như hàm tính tổng của tôi khắc phục được hạn chế không tự động tính toán lại khi giá trị các ô thay đổi!!!!!!!!!

kelvin
06-10-06, 10:57 AM
bạn thanguct@gmail.com có báo kelvin
---------------
Cảm ơn bạn rất nhiều ,mình cũng bận nên hôm nay mới đọc được thư của bạn .Vấn đề của mình đã được mọi người tham gia giúp đỡ .Xin cảm ơn tất cả !!Tạm biệt chúc vui vẻ
--
buiduythang
NCC.,JSC
BaiChayRoad,HalongCity
-----------------------------------
Nếu có ý mới trong v/đề này, mong bạn post lên để mọi người tham khảo thêm.A! nhân tiện hỏi thăm ban điều hành, ở web WKT mỗi khi có tin nhắn từ forum nó đều C/c về địa chỉ e-mail của mình, còn tin nhắn ở đây sao kg thấy default như vậy

hung007007
24-06-08, 06:29 PM
Có bạn hỏi mình:"minh muon viet mot ham de tinh tong mot o trong tat ca cac sheet .thi du nhu o A3 chang hen minh viet nhu sau:

Function sumall(cel As Range)’Dim wSht As Worksheet
Dim allwShts As Sheets
Set allwShts = Worksheets
For Each wSht In allwShts
sumall = sumall + cel.value
Next wSht
End function
Nhung ket qua bi loi #VALUE!
Ban co the giup minh nhe!Cam on nhieu"

Mình có nghĩ cách giải quyết tàm tạm trong file att, mong các bạn giúp tiếp cho bạn thanguct@gmail.com
Bạn "chết" ở chỗ đậm đậm kia kìa, bạn tính qua tên hàm như thế kia là "đại họa" cho việc lập trình sau này, vấn đề này gọi là đệ quy - và chỉ dùng trong trường hợp hiểu rất rõ về tính dừng của hàm.
Để an toàn, nên làm như sau thì khỏi luôn



Function sumall(cel As Range)’Dim wSht As Worksheet
Dim allwShts As Sheets
Dim t as long ' Ví dụ là số nguyên
Set allwShts = Worksheets
For Each wSht In allwShts
t = t+ cel.value
Next wSht
sumall = t
End function

boyxin
25-06-08, 06:09 AM
Có bạn hỏi mình:"minh muon viet mot ham de tinh tong mot o trong tat ca cac sheet .thi du nhu o A3 chang hạn.Ban co the giup minh nhe!Cam on nhieu"

Vấn đề này đã được tro đổi ở (tuy nhiên vẫn còn hạn chế là khi thay đổi các giá trị thì nó không tự tính toán lại):
To ngvson: Công thức = Sum() của bạn thật đơn giản, hiệu quả. Nhưng tôi hỏi nếu tên các sheet không cùng kiểu thì như thế nào vậy, có nên dùng theo thứ tự các sheet 1,2,3... thì tuỳ biến cao hơn không?


Gửi bác file này để tham khảo Histories File (http://www.giaiphapexcel.com/forum/showthread.php?p=76466#post76466)
http://www.giaiphapexcel.com/forum/images/attach/xls.gifSumming_Across02.xls (http://www.giaiphapexcel.com/forum/attachment.php?attachmentid=11325&d=1212930002) (26.0 KB) của ndu96081631

100% là công thức
Có thể tùy biến khoảng sheet được lấy giá trị để cộng
Khi thêm sheet, đổi tên sheet, chuyển vị trí sheet thì List thay đổi theo <-> kết quả cũng thay đổi theo ...----------------------
Post xong nhìn lại mới thấy nhầm mục: đây là mục Các hàm tự tạo cho worksheet thế mà lại tương công thức thuần của excel vào. mong các bác bỏ qua nhé

chibi
25-06-08, 06:40 AM
Function sumall(cel As Range)
Dim wSht As Worksheet
Dim allwShts As Sheets
Dim t as long ' Ví dụ là số nguyên
Set allwShts = Worksheets
For Each wSht In allwShts
t = t+ cel.value
Next wSht
sumall = t
End function
sumall(A1)= Giá trị ô A1 * số sheet