PDA

View Full Version : Hàm tính tuổi



ottieu
21-11-07, 07:29 AM
Em có một câu hỏi xin mọi người giúp đỡ:
Câu hỏi: Giả sử có 1 người sinh ngày 24/03/1984.
Yêu cầu: tính đến ngày hôm nay người đó bao nhiêu tuổi (lưu ý: đủ 365 ngày mới được tính là 1 tuổi)

salam
21-11-07, 07:44 AM
Bạn vào đây để thao khảo nhé.
http://www.giaiphapexcel.com/forum/showthread.php?t=5819

tedaynui
21-11-07, 09:15 AM
Em có một câu hỏi xin mọi người giúp đỡ:
Câu hỏi: Giả sử có 1 người sinh ngày 24/03/1984.
Yêu cầu: tính đến ngày hôm nay người đó bao nhiêu tuổi (lưu ý: đủ 365 ngày mới được tính là 1 tuổi)
Bạn hãy tìm hiểu và dùng hàm DATEDIF
Vấn đề này đã được hướng dẫn tại đây
http://www.giaiphapexcel.com/forum/showthread.php?t=5819

TDN

BNTT
21-11-07, 09:37 AM
Em có một câu hỏi xin mọi người giúp đỡ:
Câu hỏi: Giả sử có 1 người sinh ngày 24/03/1984.
Yêu cầu: tính đến ngày hôm nay người đó bao nhiêu tuổi (lưu ý: đủ 365 ngày mới được tính là 1 tuổi)

Dùng như vầy nè:

A1 = ngày sinh
B1 = ngày hôm nay (hoặc ngày nào đó)

tuổi = INT(DATEDIF(A1,B1,"d")/365)

Vì cái lưu ý trên của bạn, nên phải dùng thêm hàm INT.

ThuNghi
21-11-07, 09:44 AM
tuổi = INT(DATEDIF(A1,B1,"d")/365)
Hình như là dư, tuổi = DATEDIF(A1,B1,"Y") là OK rồi nếu đủ 1 năm thì sẽ thông báo. Chắc bạn ấy chưa nghĩ là 365 hay 365,25 đâu.
Còn không đơn giản hơn dùng
INT((B1-A1+1)/365)

BNTT
21-11-07, 10:02 AM
Cảm ơn Anh ThuNghi.
Đúng là chỉ cần dùng: tuổi = DATEDIF(A1,B1,"Y") là đủ rồi.
Tại em dùng "d", quên mất là có thể dùng "y".

Nhưng mà anh ThuNghi ơi, còn cái này
tuổi = INT((B1-A1+1)/365) thi lại hổng có ổn nơi.
Ý bạn ấy là phải đủ 365 ngày thì mới đủ tuổi, thế mà em thử cho B1 = 20/3/2007 (là còn thiếu đến 3 ngày) thì tuổi nó tăng lên 23 rồi, chắc bạn ấy không chịu đâu (hic).

anhtuan1066
21-11-07, 10:12 AM
Bài toán này có thấy lâu rồi trên diển đàn.. Và các bạn cũng đã hỏi rất nhiều lần với công việc có liên quan đến tính số năm, số tháng.. vân vân.. Tôi nghĩ đây chỉ là bài tập, tuy nhiên câu hỏi trong bài thì có vẽ.. ko rõ ràng lắm... Nếu nói là đũ 365 ngày thì tính 1 tuổi thì ko thể dùng DATEDIF... Nhưng kết quả đạt dc sẽ ko thỏa mản người xem vì sai quá nhiều... Đúng ra yêu cầu bài toán phải nên ghi là: Đũ năm, đũ tháng, đũ ngày thì mới xem là tròn tuổi
Nói chung, đã gọi là tính tuổi thì nên dùng DATEDIF... Theo tôi người ra đề đã sai lầm khi ra câu hỏi này...
Một số thầy dạy tin học khi dạy đến đây có khi còn bắt học sinh phải dùng INT (theo đáp án)... Còn dùng DATEDIF ra kết quả chính xác thì lại ko chịu.. Thật cố chấp!... Giáo viên chấm bài chưa chắc có người biết DATEDIF là cái quái gì (điều này tôi xác nhận là có thật).. học sinh làm đúng lại chấm sai thì thật là oan ức...
Mến
ANH TUẤN

DOLIEU
21-11-07, 12:40 PM
Bạn thử dùng hàm Days360 xem nhé. (Xem file đính kèm)

anhtuan1066
21-11-07, 03:07 PM
Nếu mà dùng Day360 thì càng sai ác liệt hơn nữa

ottieu
22-11-07, 09:10 PM
Anhtuan nói đúng đấy. Đây chỉ là một bài tập. Thầy tin của em đưa ra lời giải rồi. Đáp án giống như của Anh ThuNghi. Một vấn đề nho nhỏ mà nảy sinh ra nhiều tranh cãi thế. Cám ơn các anh đã giúp em hiểu thêm.

anhtuan1066
22-11-07, 09:15 PM
Cái này là tranh luận chứ ko phải tranh cải (cải lộn)... hi.. hi... Có tranh luận mới đi đến dc kết luận tốt nhất chứ bạn... Tôi chỉ sợ đề tài đưa ra chẳng ma nào thèm ngó tới thì mới oải... Tranh luận sợ gì... Rất tốt nữa là khác...

Mr Okebab
23-11-07, 12:07 AM
Em có một câu hỏi xin mọi người giúp đỡ:
Câu hỏi: Giả sử có 1 người sinh ngày 24/03/1984.
Yêu cầu: tính đến ngày hôm nay người đó bao nhiêu tuổi (lưu ý: đủ 365 ngày mới được tính là 1 tuổi)

Xin hỏi là 366 ngày hoặc 400 ngày thì tính là mấy tuổi ???
Hay nói cách khác : 1,2 năm hay 1,1 năm (1 năm 365 ngày) thì tính là mấy tuổi hả bạn ???


Thân!

BNTT
23-11-07, 12:21 AM
Ông Tía này, đừng làm khó anh em thế.
Cứ hiểu đơn sơ đi:

đủ 365 ngày thì là 1 tuổi
nhỏ hơn 365 ngày là 0 tuổi
chưa đủ (365 x 2 =) 730 ngày thì vẫn là 1 tuổi
v.v...
Ở đây không có khái niệm 1,2 năm hay 1,1 năm gì hết. Tuổi là số nguyên dương.

Tui nghĩ không phải bạn Ottieu ra đề khó đâu,
mà ngay cả Prudential cũng tính tuổi theo kiểu tui vừa nói khi bán hợp đồng bảo hiểm nhân thọ (!)

Mr Okebab
23-11-07, 12:33 AM
Ông Tía này, đừng làm khó anh em thế.
Cứ hiểu đơn sơ đi:

đủ 365 ngày thì là 1 tuổi
nhỏ hơn 365 ngày là 0 tuổi
chưa đủ (365 x 2 =) 730 ngày thì vẫn là 1 tuổi
v.v...
Ở đây không có khái niệm 1,2 năm hay 1,1 năm gì hết. Tuổi là số nguyên dương.

Tui nghĩ không phải bạn Ottieu ra đề khó đâu,
mà ngay cả Prudential cũng tính tuổi theo kiểu tui vừa nói khi bán hợp đồng bảo hiểm nhân thọ (!)

Vậy thì sao lại hướng dẫn làm dateif làm gì :
= INT((B1-A1)/365)
= ROUNDDOWN((B1-A1)/365;0)

Như vậy có phải đơn giản hơn không !!??

Thân!

BNTT
23-11-07, 08:46 AM
Tía xem nhé (lười kém file quá nên ghi thẳng vào đây luôn):

A1 = 11/1/1969
B1= DATEDIF($A$1,A2,"Y")
C1= INT((A2-$A$1)/365)
D1= ROUNDDOWN((A2-A1)/365,0)

Rồi A2 = 1/1/2007 -----> A13 = 12/1/2007

Sau đó kéo công thức của 3 cột B, C, D xuống.

Tía so sánh đi: Theo yêu cầu thì đúng ngày 11/1/2007 mới nhảy tuổi (=38), còn 10/1/2007 thì vẫn là 37

Chỉ có mỗi cái DATEDIF (cột B) mới thỏa mãn điều kiện này.

Xem và cho tui biết ý kiến với nghe.

Mr Okebab
23-11-07, 10:23 AM
Tía xem nhé (lười kém file quá nên ghi thẳng vào đây luôn):

A1 = 11/1/1969
B1= DATEDIF($A$1,A2,"Y")
C1= INT((A2-$A$1)/365)
D1= ROUNDDOWN((A2-A1)/365,0)

Rồi A2 = 1/1/2007 -----> A13 = 12/1/2007

Sau đó kéo công thức của 3 cột B, C, D xuống.

Tía so sánh đi: Theo yêu cầu thì đúng ngày 11/1/2007 mới nhảy tuổi (=38), còn 10/1/2007 thì vẫn là 37

Chỉ có mỗi cái DATEDIF (cột B) mới thỏa mãn điều kiện này.

Xem và cho tui biết ý kiến với nghe.

Đọc kỹ nhé :


Em có một câu hỏi xin mọi người giúp đỡ:
Câu hỏi: Giả sử có 1 người sinh ngày 24/03/1984.
Yêu cầu: tính đến ngày hôm nay người đó bao nhiêu tuổi (lưu ý: đủ 365 ngày mới được tính là 1 tuổi)

ottieu nói như thế tớ lại hiểu : Nghĩa là cứ 365 ngày thì được 1 tuổi, năm nhuận hay không thì .. không biết.
Vì vậy tớ mới hỏi :


Xin hỏi là 366 ngày hoặc 400 ngày thì tính là mấy tuổi ???
Hay nói cách khác : 1,2 năm hay 1,1 năm (1 năm 365 ngày) thì tính là mấy tuổi hả bạn ???
Bác lại trả lời :

đủ 365 ngày thì là 1 tuổi
nhỏ hơn 365 ngày là 0 tuổi
chưa đủ (365 x 2 =) 730 ngày thì vẫn là 1 tuổi
v.v...


Như vậy nghĩa là chúng ta đang lấy ngày làm căn cứ, cứ đủ 365 ngày thì là . . . 1 tuổi. Đủ 730 ngày thì là . . . 2 tuổi.
Vì vậy mới có mấy cái hàm trên.

Nếu không thì cứ . . hiểu theo nghĩa bình thường đi. Sao lại ra câu hỏi như thế ???

Hiểu lầm thôi, nhưng muốn nhắc mọi người ra câu hỏi thì phải chặt chẽ, tránh hiểu lầm lung tung.
Thân!

anhtuan1066
23-11-07, 11:00 AM
Ko phải bạn ấy cho đề sai hay cố tình gì cả... Có trách thì trách ông thầy ra đề ấy
Cái này tôi dám khẳng định là bài tập của 1 trường tin học, vì tôi có làm giúp người ta rồi... Nói chung là ra đề vô lý
Với bài toán này thì DATEDIF đương nhiên là chính xác nhất, tuy nhiên nếu làm thế thì chắc gì dc điểm cao.. nguyên nhân là sai đáp án, hoặc đơn giản hơn là ông thầy ổng chả biết DATEDIF là quái gì... Tôi quá rành vụ này nên lần đó tôi cũng chả dám làm bằng DATEDIF (dùng INT).. sợ thằng nhóc bị Zero nó chưởi mình NGU...
ha... ha...
ANH TUẤN

tigertiger
23-11-07, 11:52 AM
hic, vụ này nghe mới nhỉ, làm khác thầy mà đúng thì thành sai hic:D, nên có câu rằng:

Thầy nói khó hiểu là "thầy giỏi"
Trò nói khó hiểu là "trò dốt"

hi hi hi

ducnhan1982
13-09-11, 05:10 PM
=INT((TODAY()-A1)/365)
Trong đó A1 là ô chứa ngày sinh