Cách đếm số tháng theo điều kiện (1 người xem)

Liên hệ QC

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

Gia_Khue

Thành viên chính thức
Tham gia
18/12/07
Bài viết
83
Được thích
13
Nghề nghiệp
BI
Kính gửi cả nhà /-*+/

GK hôm nay ngồi hì hục ;;;;;;;;;;; mãi mà làm chưa ra cách đếm tháng. Nếu dùng If thì câu lệnh nó dài ơi là dài -+*/ , mà GK viết xong thì nó báo lỗi tè le tét lét :=\+ .

Cả nhà xem giúp GK có giải pháp nào đơn giản và chính xác hơn không với nhé.

Ví dụ:
Có 3 cột A: Ngày bắt đầu; cột B: Ngày hiện hành ; cột C sẽ cho mình biết kết quả từ ngày bắt đầu cho đến ngày hiện hành là mấy tháng. Tuy nhiên, cách tính tháng ở cột C này lại phải theo điều kiện:
nếu cột A: 1/9/2007 ; cột B : 25/12/2007 ---> cột C : 3 tháng

nếu cột A: 2/9/2007 ; cột B : 25/12/2007 ----> cột C: 2 tháng

nếu cột A: 1/12/2007 ; cột B : 25/12/2007 ---- cột C: 0 tháng

tức là chỉ tính những tháng tròn thôi, còn không tròn, dù chỉ thiếu 1 ngày cũng tính nó = 0. GK muốn nó ghi nhận giá trị là 0 chứ không phải ra 1 cell trống đâu ạ.

Nhân tiện, mấy bác giúp GK cái hàm Now với, GK muốn nó luôn hiện ngày hiện hành ở cột B, thế nhưng uýnh lệnh kiểu gì nó cũng hỏng thèm ra, ko biết nó bị làm sao nữa.

Cả nhà có giải pháp nào hay thì chỉ GK với nhé. Hì hì, GK hỏng có biết viết VB đâu, GK chỉ biết sửa trên nền code có sẵn thôi à. Bác nào mà kiu GK viết = VB là GK lăn đùng ra mà xỉu luôn )(*^= .

Cám ơn cả nhà trước nhé.
 
Lần chỉnh sửa cuối:
B2=Now() chắc chắn ra ngày hiện hành, nếu không ra dạng ngày bạn phải Format cell - Date - Short date
C2=Datedif(A2,B2,"M") bảo đảm thỏa 8 điều kiện hiện hành của bạn.
Nếu vẫn có khó khăn bạn phải gởi File kèm theo, mọi người mới giúp được.
 
Lần chỉnh sửa cuối:
Trước tiên, cám ơn PTM0412 vì đã trả lời cho GK.

Cái hàm Now, GK uýnh hoài vẫn hỏng được dù đã format cell như bạn chỉ.

Vừa mới làm thử theo cách bạn chỉ, do chọn là Month nên nó chỉ đếm Month thôi, trong khi đó GK chỉ tính đó là 1 tháng nếu nó bắt đầu từ ngày đầu đến ngày cuối tháng.

Trong file đính kèm, cột C là kết quả làm theo công thức bạn chỉ, còn cột D là đáng lẽ kết quả phải vậy.

Bạn xem rồi chỉ giúp GK nhé.

Cám ơn bạn lần nữa.
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn xem File kèm theo, dòng 4 bạn nhẩm sai, từ 15/8 đến 15/12 là tròn 4 tháng, đến 25/12 là có lẻ mấy ngày, datedif () phải ra 4.
Vấn đề bạn thấy cột B không đúng như bạn nghĩ vì bạn quên: Cột A bạn format ngày Vietnamese, cột B bạn format ngày English, ngôn nggữ có hiển thị ở dòng language của hộp thoại Format mà bạn không để ý.
Tuy nhiên đã format là ngày thì datedif() cũng đúng dù là ngôn ngữ gì.
 

File đính kèm

Ôi, bạn hiểu lầm ý của GK rồi

Cách tính tháng của GK là bắt buộc phải từ đầu tháng đến cuối tháng mới tính là 1 tháng, do đó nếu ngày bắt đầu là 02/11, thì cho đến ngày 02/12 vẫn không đuợc tính là 1 tháng.

GK thấy nó phức tạp chính ở cái chỗ đấy đó bạn. GK nghĩ mãi chẳng ra. !$@!!

Bạn xem lại giúp GK với.

Hàm Now, mình hiểu ra rồi. %#^#$

Tks bạn.
 
Bạn không nói rõ đk 1 tháng phải bắt đầu từ ngày 1, nên tớ tính sai. Nhưng cũng có cách. Xem File mới.
Còn ngày cột B bạn Format lại Vietnamese hoặc dùng Format Painter từ A5, đừng từ A4 vì A4 là dd/mm/yyyy, quét vào cả khối A4:B9 luôn.
 

File đính kèm

Ơ, bạn ơi, với những ngày bắt đầu là mùng 1 thì nó tính được, nhưng nếu hỏng phải ngày mùng 1 thì nó báo lỗi #NAME?

Máy bạn có bị vậy ko? Hay do máy mình nhỉ?

Tks bạn vì đã chịu khó xem giúp mình dù đêm đã khuya. %#^#$
 
Bạn mở Menu - Tool - Add-Ins xem đã đánh dấu Analysis ToolPark chưa? nếu chưa thì đánh dấu vào rồi OK, nếu nó đòi đưa CD thì bỏ đĩa CD cài đặt Ofice vào. Nói lẹ làm lẹ, 15 phút nữaa tớ di ngủ.
 
Bác "Not Very Old Man" ơi, bác cứ ngủ đi, để em thay cho...
Em nghĩ không phải thiếu Analysis ToolPark đâu, vì nếu thiếu thì nó đã báo #NAME? cả đám rồi chứ không chỉ riêng gì mấy hàng ngày không phải là 1 như Gia Khuê nói.

Bạn Gia Khuê, bạn thử đổi công thức này xem sao (ở C4 và kéo xuống C9):
=IF(DAY(A4)=1, DATEDIF(A4, B4, "M"), DATEDIF(A4, B4, "M") -1)

P/S: Tôi không biết bạn bao nhiêu tuổi, nhưng có lẽ bạn không thể lớn hơn bác ptm0412.. và cũng để lịch sự tí, mong bạn đừng xưng "tớ" trong diễn đàn khi bạn chưa biết bạn đang nói chuyện với ai, bạn có thể xưng tôi, hoặc xưng em. Góp ý tí nhé.
 
Lần chỉnh sửa cuối:
Đúng là thiếu Analysis ToolPark mà. Hỏi GK xem. Mình thử đúng rồi mới Post lên. Khi day() =1 nó không xét tới hàm eomonth() nên ra kq, ngược lại nó không biết eomonth() là gì nên #name.
Tuy nhiên datedif()-1 cũng đúng rồi, khỏi CD.
 
Lần chỉnh sửa cuối:
Í, mình xem lại rồi, datedif()-1 có chỗ không ổn, đố các bạn biết!
Giải thưởng là 1 nửa thùng bia của enmuaxuan (nếu tớ kiếm được).
Phen này bắt GiaKhue gọi anh xưng em đàng hoàng, hề hề.
 
Hình như cốt lỗi vấn đề này là đếm xem có bao nhiêu ngày = 1 thì phải?
Nó là công thức mãng này đây:
Mã:
{=SUM(IF(DAY((A1-1+ROW(INDIRECT("1:"&(B1-A1)+1))))=1,1,0))}
Với A1 là ngày bắt đều, B1 là ngày kết thúc...
Tham khảo vụ đếm này tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=2943
ANH TUẤN
 
ptm0412 đã viết:
Í, mình xem lại rồi, datedif()-1 có chỗ không ổn, đố các bạn biết!
Giải thưởng là 1 nửa thùng bia của enmuaxuan (nếu tớ kiếm được).
Phen này bắt GiaKhue gọi anh xưng em đàng hoàng, hề hề.
Kiếm bia uống thử...
Bác PTM0412 ơi, có phải cái bác nói là trường hợp công thức cho ra kết quả âm không?
Nếu là âm thì cho nó bằng 0 (chưa có tháng nào):

=IF(DAY(A4)=1, DATEDIF(A4, B4, "M"), MAX(DATEDIF(A4, B4, "M") -1, 0))
Còn không phải vụ này thì... để em nghĩ tiếp.

@Gia Khuê: Mới chuẩn bị "băm nhát đầu" mà bạn đã đau khổ, vậy mình "băm nát bấy" rồi thì sao đây?
 
anhtuan1066 đã viết:
Hình như cốt lỗi vấn đề này là đếm xem có bao nhiêu ngày = 1 thì phải?
Nó là công thức mãng này đây:
Mã:
{=SUM(IF(DAY((A1-1+ROW(INDIRECT("1:"&(B1-A1)+1))))=1,1,0))}
Với A1 là ngày bắt đều, B1 là ngày kết thúc...
Tham khảo vụ đếm này tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=2943
ANH TUẤN
Bác hiểu sai vấn đề của Gia Khuê rùi...
Ý của Gia Khuê là đếm xem có bao nhiêu "tháng tròn" giữa hai khoảng thời gian
Ví dụ:
  • Từ 1/9/2007 đến 26/12/2007, chỉ có tháng 9, 10, và 11 là "đủ", nghĩa là kết quả = 3
  • Từ 2/9/2007 đến 26/12/2007, chỉ có tháng 10 và 11 là "đủ" (tháng 9 thiếu 1 ngày, không tính) nên kết quả = 2
Công thức mảng của bác vẫn tính dư 1 tháng.
A1 = 1/11/2007, B1 = 26/12/2007
{=SUM(IF(DAY((A1-1+ROW(INDIRECT("1:"&(B1-A1)+1))))=1,1,0))} cho kết quả = 2
Nhưng đây chỉ có mỗi tháng 11 là tròn, tháng 12 chưa đủ, nên kết quả phải bằng 1 thôi:
=IF(DAY(A4)=1, DATEDIF(A4, B4, "M"), MAX(DATEDIF(A4, B4, "M") -1, 0)) cho kết quả = 1
 
Mất nửa thùng bia rồi, mới 5 phút!
Cho tớ nợ tới khi tìm được enmuaxuan, xem tớ có đúng trong topic Cây thư mục không nhé!
Mà công thức như vây không ngắn gọn bằng eomonth().
@ anhtuan:
Cốt lõi là đếm số ngày 1 và đếm số ngày cuối tháng tương ứng với số ngày 1 của từng tháng đếm được, 2 cái khớp nhau mới tính . Theo hướng này thì phức tạp lắm lắm .
 
Trời.. tôi biết chứ... đây chỉ là gợi ý.. bạn thích làm thế nào là tùy... Dù sao nó vẫn là đếm ngày có DAY = 1, đúng ko? Kết hợp thêm vụ ngày cuối có trùng với cuối tháng hay ko (thêm mỗi cái IF ngắn nữa)? Hic...
Là gợi ý... các bạn hiểu ko nhỉ? Công thức này còn làm dc 1 đóng việc khác nữa đấy.. ví dụ:
-Đếm có bao nhiêu ngày chẳn giữa 2 thời điểm
-Đếm có bao nhiêu ngày lẽ giữa 2 thời điểm
-Đếm có bao nhiêu ngày chủ nhật giữa 2 thời điểm
vân vân và vân vân...
Nghiên cứu xem
ANH TUẤN
 
Lần chỉnh sửa cuối:
ptm0412 đã viết:
Mất nửa thùng bia rồi, mới 5 phút!
Cho tớ nợ tới khi tìm được enmuaxuan, xem tớ có đúng trong topic Cây thư mục không nhé!
Mà công thức như vây không ngắn gọn bằng eomonth().
Là sao hở bác? OR("Bác mất nửa thùng bia", "em được nửa thùng bia") vậy ?
Dĩ nhiên cái của em thì dài thoòng so với cái này của bác:

=DATEDIF(IF(DAY(A4)=1,A4,EOMONTH(A4,0)),B4,"M")
Nhưng mà em làm vậy vì lỡ Gia Khuê hổng có Analysis Tool... í mà.
 
Chào cả nhà,

Tuần này GK mới qua công ty mới, mà công ty này phong tỏa dữ dội, đến đổi cái desktop nhìn cho đẹp 1 tí cũng khóa luôn nói chi đến lướt web. :=\+ Về đến nhà là chạy vô hỏi mọi người ngay lập tức.

Hôm nay GK thử làm theo công thức của cả 2 anh Ptm0412 và BNTT, tuy nhiên, hôm nay GK mới phát hiện ra 1 điều là có trường hợp tính nhẩm đúng là trọn tháng, nhưng nó hỏng thèm tính trọn tháng.

Ví dụ : từ ngày 01/9/2007 đến ngày 31/12/2007 là tròn 4 tháng, thế mà cả 2 công thức đề tính ra là 3 tháng.

Nhờ 2 anh Ptm0412 và BNTT xem file GK đính kèm.

Trong file này GK đã loại bỏ trường hợp giá trị âm.

Cám ơn 2 anh nhiều nhé.

GK.

P/s:
GK sẽ rút kinh nghiệm, lần sau sẽ nói thật rõ yêu cầu để tránh hiểu lầm dẫn đến mất thời gian của mọi người. Hôm qua, bác nào bị GK làm phiền mà mất ngủ thì GK hứa sẽ không làm phiền đêm khuya nữa, GK chỉ làm phiền đến tối thôi à --=0 .:-=
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn thử dùng ct sau: (Copy anhtuan1066)
=SUMPRODUCT((DAY(ROW(INDIRECT("1:"&(C4-B4)+1)))=1)*1)-1
Lưu ý: nên dùng today() hơn là dùng now()
 
Bác ThuNghi ơi,
Nếu em hiểu không lầm ý muốn của Gia Khuê, thì cách tính phải là như cái này nè (nhờ bạn Gia Khuê xem luôn dùm):
030.jpg

Mà muốn đúng như vậy thì công thức trong cột C dài ngoằng à:

(C2) =IF(AND(DAY(A2)=1,B2=EOMONTH(B2,0)),DATEDIF(A2,B2,"M")+1,IF(OR(DAY(A2)=1,B2=EOMONTH(B2,0)),DATEDIF(A2,B2,"M"),MAX(DATEDIF(A2,B2,"M")-1,0)))


Nếu đem cái của bác thả vào cột C, thì đáp số không đúng yêu cầu:

(C13) =SUMPRODUCT((DAY(ROW(INDIRECT("1:"&(B13-A13)+1)))=1)*1)-1
031.jpg

(sai ở chỗ tháng trước thiếu và tháng sau cũng thiếu)
 
Lần chỉnh sửa cuối:
Web KT

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

  • Dán lên cao
Trả lời
26
Đọc
10K
Back
Top Bottom