Hỏi về công thức tính tổng, khi thay đổi vùng dữ liệu, công thức cũng thay đổi theo? (1 người xem)

Liên hệ QC

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

nokiano258vn

Thành viên lười biếng
Tham gia
28/8/07
Bài viết
268
Được thích
277
Nghề nghiệp
Bồi thường giải phóng mặt bằng
Hàm SUM

Ô A1 = SUM(A2:A3), có cách nào khi thêm số vào các ô A4, A5…thì A1 = SUM(A2:A5..) không?Tất nhiên là phải tự động.
 
nokiano258vn đã viết:
Ô A1 = SUM(A2:A3), có cách nào khi thêm số vào các ô A4, A5…thì A1 = SUM(A2:A5..) không?Tất nhiên là phải tự động.

Dùng name là được thôi
1/ Đặt name DATA = Sheet1!$A$2:$A$65000
2/ Công thức ở A1 : = SUM(DATA)
Thân
 
Có thể dùng công thức dạng động như thế này:
=SUM(OFFSET(A2,0,0,COUNTA(A2:A65536),1))
ANH TUẤN
 
Phải thay dấu

Cảm ơn các bạn, nhưng tại sao ở công thức của anhtuan lại phải thay dấu "," là dấu ";" thì máy mới nhận.
 
nokiano258vn đã viết:
Cảm ơn các bạn, nhưng tại sao ở công thức của anhtuan lại phải thay dấu "," là dấu ";" thì máy mới nhận.
dấu , hay ; ko quan trọng... đó là do trên máy tính của bạn quy định như thế... Nếu muốn thây đổi thì Excel ko có quyền hạn này... Nó là của Windows quản lý
Bạn vào Start\Settings\Control Panel\Regional and Language Options.. trong Tab Regional Options bạn bấm nút Customize... ngay dòng "List Saparator chính là quy định về dấu "," và ";" đấy... cái này có thể thay đổi dc
Và còn nhiều món có thể tinh chỉnh ở đây, như: định dạng m/d/yy hay dd/mm/yy vân vân...
Mến
ANH TUẤN
 
anhtuan1066 đã viết:
Có thể dùng công thức dạng động như thế này:
=SUM(OFFSET(A2,0,0,COUNTA(A2:A65536),1))
ANH TUẤN
Bác ơi hình như nó chỉ cộng nếu các dãy số được nhập vào liên tiếp, nếu ngắt quãng là nó ...ngủ
 
Uh... đúng rồi... tôi sơ ý điều nay... Đễ xem lại coi có cách nào ngoài cách của anhphuong ko... Tạm thời chưa nghĩ ra
ANH TUẤN
 
anhtuan1066 đã viết:
Nếu muốn thây đổi thì Excel ko có quyền hạn này... Nó là của Windows quản lý
ANH TUẤN
Nếu đang dùng bộ O2003 thì có thể thay đổi được tùy chọn dấu ";" hay dấu "," bằng cách vào Tool Options, tab International, trong mục Number handling, bỏ chọn ở ô Use system separators và thay đổi dấu ";" hoặc "," trong Decimal separators và Thousands separators. (Các bộ Office khác thì tôi chưa thử).
 
Theo như tôi đoán thì đây là dấu phân cách NGÀN và dấu phân cách THẬP PHÂN mà bạn... đâu phải dấu phân cách trong công thức
ANH TUẤN
 
Xin lỗi, em đọc bài không kỹ!!!
À không, em đã thử vài máy trong phòng thì thấy đúng như em đã nới. Trong Start\Settings\Control Panel\Regional and Language Options em giữ mặc định của win, chỉ thay đổi trong Tool Options của excel thì dấu của List Saparator cũng thay đổi từ mặc định là "," sang ";" ???
 
Lần chỉnh sửa cuối:
Thì biết... nhưng mà cái người ta yêu cầu là dấu phân cách trong CÔNG THỨC cơ... cái bạn nói là DẤU PHÂN CÁCH NGÀN và THẬP PHÂN... Tôi cũng đang dùng Excel2003 đây! Đâu có thay đổi dc như bạn nói!
ANH TUẤN
 
Em diễn đạt chưa đủ ý.
Đại thể như thế này:
Trong Start\Settings\Control Panel\Regional and Language Options\List Saparator vẫn là dấu ",".
Trong Tool Options của excel thì dấu của Decimal separators là "," và Thousands separators là "." thì dấu của List Saparator là dấu ";".
Còn ngược lại khi ta đảo dấu của Decimal separators và Thousands separators cho nhau thì dấu của List Saparator là dấu "," !!!
 
Uh... thế thì tôi hiểu rồi... Vậy thì trong Excel2002 cũng có... Ko biết Excel2000 thì sao?
ANH TUẤN
 
Trong Excel2000 thì em không thấy tab International trong menu Tool Options.
Thân!
 
Tôi ghi macro ở Book1, đặt nút cho các macro. Ở Book1 các macro thực hiện rất tốt nhưng mở các file khác thì khi thực hiện máy lại hiện thông báo Update Values: .. […xla]sheet1 và phải tìm thủ công file.xla đó. Có cách nào khắc phục việc này không? Và có cách nào để khi mở file không lên thêm Book1 không?
 
Cụ thể là file bạn làm ấy như thế nào... Bạn cứ đưa "nguyên con" cái file đang bị lỗi ấy lên thì mọi người mới phát hiện dc tại sao nó lỗi...
Có điều là macro bạn đặt trong file book1 tất nhiên nó chỉ làm việc trong book1 thôi chứ...Lý nào tất cả các file khác đều chạy dc, đúng ko?
Trong này bạn có nói cái gì đó liên quan đến .xla... với file loại này tôi nghĩ có liên quan đến Add-ins đấy... Bạn phải vào menu Tool\Add-Ins, Browse tới file xla thì tất cả các file Excel trên máy bạn mới có thể hoạt động dc
ANH TUẤN
 
AddIns

Tôi đã save as cái Book1 vào C:\Documents and Settings\NOKIANO.258\Application Data\Microsoft\AddIns và đã Add-ins nó ra nhưng khi thực hiện macro vẫn phải mò vào để tìm nó ra. Nếu xoá Book1 đi thì coi như bỏ
 
AddIns

Tôi gửi cái file đó, nhưng hình như dung lượng lớn quá, không lên được
 
Lần chỉnh sửa cuối:
Nếu ko thể post file thì bạn có thể nói bẳng Record macro ấy như thế nao? Nó đễ làm gì... Tiếp theo bạn copy đoạn code đã Record rồi post lên đây là dc rồi.. đâu cần post nguyên file...
ANH TUẤN
 
Tôi có bảng tính gồm Loại cây; Kích thước cây; ĐVT; Đơn giá; Mật độ cây. Nếu thay 'C:\Documents and Settings\NOKIANO.258\Application Data\Microsoft\AddIns[Tinh cay.xla]DG'! là DG! Thì OK nhưng như vậy thì mỗi lần làm lại phải copy cái DG đấy vào sheet bên cạnh thì bất tiện quá.

Sub nhapcay()
'
' Macro6 Macro
' Macro recorded 10/4/2007 by Nokiano258
'

'

ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,'C:\Documents and Settings\NOKIANO.258\Application Data\Microsoft\AddIns[Tinh cay.xla]DG'!R4C1:R2000C6,2,0)"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,'C:\Documents and Settings\NOKIANO.258\Application Data\Microsoft\AddIns[Tinh cay.xla]DG'!R4C1:R2000C6,3,0)"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,'C:\Documents and Settings\NOKIANO.258\Application Data\Microsoft\AddIns[Tinh cay.xla]DG'!R4C1:R2000C6,4,0)"
ActiveCell.Offset(0, 2).Range("A1").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,'C:\Documents and Settings\NOKIANO.258\Application Data\Microsoft\AddIns[Tinh cay.xla]DG'!R4C1:R2000C6,5,0)"
ActiveCell.Offset(0, 2).Range("A1").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,'C:\Documents and Settings\NOKIANO.258\Application Data\Microsoft\AddIns[Tinh cay.xla]DG'!R4C1:R2000C6,6,0)"
ActiveCell.Offset(1, -6).Range("A1").Select
End Sub
 
Lần chỉnh sửa cuối:
Đúng theo tôi nên dùng cách như anh tuấn là hợp lý nhất. Đặt tên vùng cần tính tổng là song
Dùng name là được thôi
1/ Đặt name DATA = Sheet1!$A$2:$A$65000
2/ Công thức ở A1 : = SUM(DATA)
Thân
Chúc thành công!
 
Tạo name với tham chiếu từ dòng 2 đến dòng 65000 là đơn giản nhất!
Nhưng có cách nào tạo 1 name động sao cho nó nhận biết dc dòng cuối cùng có dử liệu ko nhỉ? Phòng trường hợp dử liệu ko liên tục ấy mà... Giã định là ko dùng macro nha!
ANH TUẤN
 
Cái hàm sum(offset) mà anhtuan bảo, tôi đã dùng được và không sợ bị xoá ở giữa vì tôi tính tổng của cột thành tiền, nếu ô nào trống thì có nghĩa là kết quả ở đó bằng 0 và nó vẫn tính bình thường
 
Tạo name với tham chiếu từ dòng 2 đến dòng 65000. Thì tôi chết, vì như thế nó sẽ cộng cả của cái tổng của người khác vào tổng chung
 
Nhưng Offset sẽ ko dùng dc trong trường hợp dử liệu bị cách quảng... Bạn thử test trong trường hợp này xem: A2=5... A3=7... A4, A5, A6 rỗng... A7=10... Nếu nó tổng dc = 22 thì OK... hi... hi...
ANH TUẤN
 
nokiano258vn đã viết:
Tôi có bảng tính gồm Loại cây; Kích thước cây; ĐVT; Đơn giá; Mật độ cây. Nếu thay 'C:\Documents and Settings\NOKIANO.258\Application Data\Microsoft\AddIns[Tinh cay.xla]DG'! là DG! Thì OK nhưng như vậy thì mỗi lần làm lại phải copy cái DG đấy vào sheet bên cạnh thì bất tiện quá.

Nhìn công thức của bạn thì như vậy là bạn để Data trong Xla, vậy bạn làm như thế này thư xem,
Bạn đã save book1 thành addin tên là tinh cay.xla (trong này có đơn giá của cây và nằm ở sheet DG, đúng không ạ?)
Bạn vào menu Tools/Addins
Bấm chọn Browse, browse đến file tinh cay.xla
OK
OK

rồi, bây giờ dữ liệu trong bảng DG được load tự động mỗi khi bạn mở Excel

phần còn lại thì bạn sửa các công thức có liên quan đến bảng DG trong file tinh cay.xla thành [tinh cay.xla]DG!$D$1:$F$2000,

Không biết đúng ý bạn không, nếu chưa được thì bạn cứ xoá bớt data trong file tinh cay.xla đi, nén lại rồi post lên. Bạn phài post cả file có công thức dùng để tham chiếu đến file tinh cay.xla. đại khái là các file liên quan.

Thân.
 
anhtuan1066 đã viết:
Nhưng Offset sẽ ko dùng dc trong trường hợp dử liệu bị cách quảng... Bạn thử test trong trường hợp này xem: A2=5... A3=7... A4, A5, A6 rỗng... A7=10... Nếu nó tổng dc = 22 thì OK... hi... hi...
ANH TUẤN
Thực ra tôi không đặt như vậy, vì các số trong cột của tôi luôn có. Vì là cột thành tiền nên phải có ít nhất là khối lượng nhân đơn giá, nếu một trong hai ô khối lượng hoặc đơn giá là 0 thì đương nhiên bên cột thành tiền là 0 không ảnh hưởng gì đến kết quả cả phải không.
 
Uh... tất nhiên tôi hiểu cách bạn làm... nhưng ở đây là tôi muốn hỏi mọi người về cách làm Offset, sao cho nó nhận biết dc cell cuối cùng... may mắn là cột của bạn luôn có dử liệu, (số 0 cũng xem như là có dử liệu)... Trong 1 trường hợp đặt biệt nào đó khác với trường hợp của bạn, cell = rổng nằm cắt ngang qua vùng dử liệu thì coi như.. thua... Ít nhất là cho đến hiện tại tôi vẫn ko tìm dc cách hoàn hảo nếu ko dùng VBA
ANH TUẤN
 
anhtuan1066 đã viết:
tôi muốn hỏi mọi người về cách làm Offset, sao cho nó nhận biết dc cell cuối cùng

Bác Tuấn xem cái em làm nhé, nếu được thì bác cải tiến hộ em.
 

File đính kèm

anhtuan1066 đã viết:
Uh... tất nhiên tôi hiểu cách bạn làm... nhưng ở đây là tôi muốn hỏi mọi người về cách làm Offset, sao cho nó nhận biết dc cell cuối cùng... may mắn là cột của bạn luôn có dử liệu, (số 0 cũng xem như là có dử liệu)... Trong 1 trường hợp đặt biệt nào đó khác với trường hợp của bạn, cell = rổng nằm cắt ngang qua vùng dử liệu thì coi như.. thua... Ít nhất là cho đến hiện tại tôi vẫn ko tìm dc cách hoàn hảo nếu ko dùng VBA
ANH TUẤN

Anh Tuấn đọc tài liệu hàm mảng chưa?

Anh vào đọc mục u và v mục 3 các ví dụ

http://www.giaiphapexcel.com/forum/showpost.php?p=30743&postcount=56

TP.
 
Cám ơn Phong... về mảng tôi vẫn còn yếu lắm.. đễ ngâm cứu thêm cái...
Với Soibien: Nè... cái tôi muốn nói là ko dùng macro cơ mà... thế mới cay... A1, A2 và A6 có dử liệu... A3, A4, A5 rỗng... thế thì làm sao điều khiển offset từ A1 cho nó mở rộng đúng 6 dòng nhỉ...
KO DÙNG VBA... KHÓ LÀ Ở CHỔ ĐÓ ĐÓ...
ANH TUẤN
 
anhtuan1066 đã viết:
Cám ơn Phong... về mảng tôi vẫn còn yếu lắm.. đễ ngâm cứu thêm cái...
Với Soibien: Nè... cái tôi muốn nói là ko dùng macro cơ mà... thế mới cay... A1, A2 và A6 có dử liệu... A3, A4, A5 rỗng... thế thì làm sao điều khiển offset từ A1 cho nó mở rộng đúng 6 dòng nhỉ...
KO DÙNG VBA... KHÓ LÀ Ở CHỔ ĐÓ ĐÓ...
ANH TUẤN

Trời, em có dùng VBA đâu. Dynamic Name mà, em định nghĩa 2 cái, Data là dynamic name (offset....), còn lastrow cũng là name mà. Bác coi kỹ cái file em gửi đó.
 
LastRow={=MAX((INDIRECT("$A$1:$A65535")<>"")*(ROW(INDIRECT("$A$1:$A$65535"))))}
Quá hay luôn, đang thắc mắc, nếu refer to thì không cần {}. Hay quá ha.
 
Ah... đễ xem lại.. tại tôi thấy trong file có macro nên tường... Remove macro và kiểm tra lại cái nhé!
......................................
Xem rồi.... Ai dà... công thức này hơi bị độc à nha! Cám ơn nhiều nhiều
Đề nghị BQT nên đưa bài này vào những bài toán hay đi
ANH TUẤN
 
Lần chỉnh sửa cuối:
SoiBien đã viết:
Trời, em có dùng VBA đâu. Dynamic Name mà, em định nghĩa 2 cái, Data là dynamic name (offset....), còn lastrow cũng là name mà. Bác coi kỹ cái file em gửi đó.

Tuyệt cú mèo ah nha! Hay! Cám ơn SoiBien. Nhớ giúp giùm vụ bữa trước nha, rất cần đấy. Thanhk
 
Nói thật nha... thấy thì nó hay... nhưng tôi vẩn ngờ ngợ... chưa thật sự hiểu lắm cái name này... Sói biển có thể giãi thích sơ qua chút ko?
Tuy nhiên... ko uổng công làm quen đại cao thủ.. vừa giõi lại vừa khiêm tốn... ha.. ha..
Nhằn riêng: Tối nào cảm thấy cô đơn thì Alo 1 tiếng qua Biên Hòa uống cafe nhé! Tôi luôn sẳn sàng...
ANH TUẤN
 
Hì, giờ em ngồi đọc lại bài này từ đầu đến cuối đến công thức của anh Soibien mới thấy nó giống bài này.

Hì, vậy anh TuanGiang và anh Soibien, tư tưởng lớn gặp nhau!.}}}}}
 
[B đã viết:
anhtuan1066][/B]có thể giãi thích sơ qua chút ko?



Offset thì không phải giải thích phải không ạ

còn lastrow thì giải thích tạm thế này nha anh:
VD mình có 3 ô a1 = 3, a2 = (trống, blank), a3 = "C"
vậy thì khi dùng công thức mảng

Với Indirect(a1:a3<>"")
  • thì mình có 1 mảng với 3 giá trị sau : {true,false,true} hoặc hiểu là {1,0,1}
với Row(indirect(a1:a3))
  • thì mình có 1 mảng trả về chứa dòng của từng cell trong mảng trả về bởi Indirect, với vd trên mình sẽ có mảng {1,2,3}

đem 2 mảng {1,0,1}, {1,2,3} nhân với nhau, mình sẽ có mảng {1,0,3}

vậy cuối cùng hàm Max sẽ trả về phần tử lớn nhất trong mảng là 3.


Không biết giải thích vậy có rõ không nữa, nếu ai có cách nào dễ hiểu hơn thì post lên nha. Tks.

Nhưng công thức mà em làm không nhập chung thành 1 được, mà em phải tách ra làm 2, tính lastrow riêng, rồi gán lastrow vào trong công thức offset thì được, nhập chung thì không được, chẳng hiểu sao nữa ???? Bạn nào biết vui lòng giải thích cho mình với

1 điều nữa là không dùng tới địa chỉ A65536 được ??????????

(bởi vậy em mới nhờ anh cải tiến giùm đó ạ!!!)
 
Lần chỉnh sửa cuối:
Secret_grasses đã viết:
Hì, giờ em ngồi đọc lại bài này từ đầu đến cuối đến công thức của anh Soibien mới thấy nó giống bài này.

Hì, vậy anh TuanGiang và anh Soibien, tư tưởng lớn gặp nhau!.}}}}}

Chài, vậy là ăn cắp bản quyền rồi, xin lỗ bác TuanGiang nhé, không cố ý! :D
 
{=MAX(IF($A$1:$A$50<>"",ROW($A$1:$A$50),0))}
Hai công thức có khác nhau.
{=MAX((INDIRECT("$A$1:$A$50")<>"")*(ROW(INDIRECT("$A$1:$A$50"))))}
Nó hay ở chỗ này INDIRECT("$A$1:$A$50")<>""
 
Rất hay đấy. Với tớ thì hàm mảng luôn là ẩn số bởi tính logic của nó. Học mãi mà vẫn như chưa biết gì.

Cảm ơnn nhiều.
 
Hai công thức này, của SoiBien và Tuan Giang ko cái nào tính dc tới Row 65536... Nếu tính từ A2 trở đi thì dc.. Tóm lại tổng số Row tối đa có thể dc chỉ là 65535 ??? Tôi thật sự thắc mắc ko hiểu tại sao lại như vậy?
 
Row 65.535 có được không bác ???
 
Dc.... chỉ tối đa 65535 thôi...
 
anhtuan1066 đã viết:
Dc.... chỉ tối đa 65535 thôi...

Vậy là dòng cuối cùng để . . . làm cảnh, nghĩa là như cái . . . dậu mùng tơi nhà nàng, báo hiệu rằng . . . đã hết đất của nhà mình rồi, bước qua là . . nhà nàng đấy.--=0--=0
 
Nói chung 65535 dòng cũng quá đũ, nhưng thắc mắc vẫn cứ là thắc mắc thôi... Excel2007 thì chơi tuốt:
=MAX(IF(A:A<>"",ROW(A:A),1))
Hi... hi... Chẳng hiểu
 

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

Back
Top Bottom