Tính ngày cuối cùng trong tháng (1 người xem)

  • Thread starter Thread starter chibi
  • Ngày gửi Ngày gửi
Liên hệ QC

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

chibi

Thành viên tích cực
Thành viên danh dự
Tham gia
10/1/07
Bài viết
1,120
Được thích
623
Các bạn cho tôi hỏi, trong Ex có hàm nào trả về kết quả là ngày cuối cùng trong 1 tháng?
 
Tính ngày của tháng:
Giả sử ô A1 chứa giá trị ngày
=DAY(DATE(YEAR(A1),MONTH(A1)+1,0))

Ngày đầu tiên của tháng
=DATE(YEAR(A1),MONTH(A1),1)

Ngày cuối cùng của tháng
=DATE(YEAR(A1),MONTH(A1)+1,0)

Ngày cuối cùng của tháng trước
=DATE(YEAR(A1),MONTH(A1),0)

Lê Văn Duyệt
Bạn có thể tham khảo thêm tại đây:
http://www.cpearson.com/excel/DateTimeWS.htm
 
Chào chibi,

Ngoài ra, trong Excel có hàm EOMONTH để tìm ngày cuối cùng trong tháng:

Ví dụ:
EOMONTH.jpg


Tất cả các hàm ngày và thời gian có tại đây:
http://www.giaiphapexcel.com/forum/attachment.php?attachmentid=2277&d=1182758969

TP.
 
Và chú ý rằng muốn dùng hàm EOMONTH này thì bạn phải dùng Add-In Analysis Toolpak

Lê Văn Duyệt
 
Ví dụ mình làm hàng T1-T2-T3....T12 của năm 2016
Vậy làm sao điền ngày cuối từ tháng vào các dòng tương ứng bên dưới
 
Đây bạn giúp nhé
Bạn điền công thức vào dòng màu vàng để tự động trả về ngày cuối của tháng tương ứng năm 2016
 

File đính kèm

Lần chỉnh sửa cuối:
Đây bạn giúp nhé
Bạn điền công thức vào dòng màu vàng để tự động trả về ngày cuối của tháng tương ứng năm 2016
PHP:
=DATE(--RIGHT($A$2;4);--IF(LEN(A4)=2;RIGHT(A4;1)+1;RIGHT(A4;2)+1);0)
Tạm thời cthức này trước, Fill cthức qua fải
Tôi dùng dấu ; là dấu ngăn cách cthức. Nếu bạn s/d dấu , thì sửa lại
 
Đúng là các bác cao cao thủ thật.
Ngắn thêm 1 ký tự, thành 3:
=DATE(116,COLUMN()+1,)

Cho mình hỏi chút: 116 là gì vậy?
Nếu mình cỉ cần lấy số ngày thôi (T1 là 31 T2 là 29 tức ngày cuối) thì dùng Right hoặc Eomonth công thức của bạn còn có thể ngắn hơn đc không
 
Đúng là các bác cao cao thủ thật.
Ngắn thêm 1 ký tự, thành 3:
=DATE(116,COLUMN()+1,)

Cho mình hỏi chút: 116 là gì vậy?
Nếu mình cỉ cần lấy số ngày thôi (T1 là 31 T2 là 29 tức ngày cuối) thì dùng Right hoặc Eomonth công thức của bạn còn có thể ngắn hơn đc không
để ngắn hơn nữa bạn đặt tên ví dụ:
gpe=công thức
ra ô đó gõ =gpe :D
 
để ngắn hơn nữa bạn đặt tên ví dụ:
gpe=công thức
ra ô đó gõ =gpe :D
- Tức là tạo ra công thức riêng trong exxcel hả bạn?


=DATE(--RIGHT($A$2;4);--IF(LEN(A4)=2;RIGHT(A4;1)+1;RIGHT(A4;2)+1);0)
- Trong đây "--" là gì vậy bạn. Khi nào dùng bạn?
 
để ngắn hơn nữa bạn đặt tên ví dụ:
gpe=công thức
ra ô đó gõ =gpe :D
- Tức là tạo ra công thức riêng trong exxcel hả bạn?


=DATE(--RIGHT($A$2;4);--IF(LEN(A4)=2;RIGHT(A4;1)+1;RIGHT(A4;2)+1);0)
- Trong đây "--" là gì vậy bạn. Khi nào dùng bạn?
bạn nên nhấn reply để biết bạn muốn hỏi ai -- tương đương hàm value()
 
Xin đố các nhà siêu công thức tìm ngày cuối của các tháng có giao dịch
PHP:
Ngày       M Mở cửa  Đóng cửa
01/06/2006  567,17  574,13
01/09/2006  561,45  567,17
01/12/2006  557,47  561,45 '*'
02/16/2006  570,37  557,47
02/17/2006  576,07  570,37
02/20/2006  583,28  576,07
02/21/2006  553,47  569,73
02/22/2006  552,05  553,47
02/23/2006  549,66  552,05 '*'
03/04/2006  544,45  549,66
03/07/2006  545,63  544,45
03/16/2006  537,57  545,63
03/23/2006  537,88  539,44
03/24/2006  537,54  537,88
03/27/2006  523,09  537,54
03/28/2006  528,45  523,09
03/29/2006  602,59  602,12
03/30/2006  597,85  602,59
03/31/2006  597,01  597,85 '*'
04/04/2006  598,39  597,01
04/12/2006  603,15  598,39 '*'
05/09/2006  600,84  603,15 '*'
 
Xin đố các nhà siêu công thức tìm ngày cuối của các tháng có giao dịch
PHP:
Ngày       M Mở cửa  Đóng cửa
01/06/2006  567,17  574,13
01/09/2006  561,45  567,17
01/12/2006  557,47  561,45 '*'
02/16/2006  570,37  557,47
02/17/2006  576,07  570,37
02/20/2006  583,28  576,07
02/21/2006  553,47  569,73
02/22/2006  552,05  553,47
02/23/2006  549,66  552,05 '*'
03/04/2006  544,45  549,66
03/07/2006  545,63  544,45
03/16/2006  537,57  545,63
03/23/2006  537,88  539,44
03/24/2006  537,54  537,88
03/27/2006  523,09  537,54
03/28/2006  528,45  523,09
03/29/2006  602,59  602,12
03/30/2006  597,85  602,59
03/31/2006  597,01  597,85 '*'
04/04/2006  598,39  597,01
04/12/2006  603,15  598,39 '*'
05/09/2006  600,84  603,15 '*'
Cháu không biết cháu có hiểu nhầm ý hoặc công thức này có đúng không ạ :)
Mã:
=DATE(YEAR(A2);MONTH(A2)+1;0)
Fill xuống
 
Xin đố các nhà siêu công thức tìm ngày cuối của các tháng có giao dịch
PHP:
Ngày       M Mở cửa  Đóng cửa
01/06/2006  567,17  574,13
01/09/2006  561,45  567,17
01/12/2006  557,47  561,45 '*'
02/16/2006  570,37  557,47
02/17/2006  576,07  570,37
02/20/2006  583,28  576,07
02/21/2006  553,47  569,73
02/22/2006  552,05  553,47
02/23/2006  549,66  552,05 '*'
03/04/2006  544,45  549,66
03/07/2006  545,63  544,45
03/16/2006  537,57  545,63
03/23/2006  537,88  539,44
03/24/2006  537,54  537,88
03/27/2006  523,09  537,54
03/28/2006  528,45  523,09
03/29/2006  602,59  602,12
03/30/2006  597,85  602,59
03/31/2006  597,01  597,85 '*'
04/04/2006  598,39  597,01
04/12/2006  603,15  598,39 '*'
05/09/2006  600,84  603,15 '*'
Dạ anh!
Thường thì các giao dịch mà copy về máy thì nó chỉ là dạng "text" suông, nên mình chơi "ăn gian" (do thấy cùng một năm 2006), như vầy:
=DATE(106,LEFT(A2,2)+1,)
Còn nếu mang về có 3 cột hẵn hoi, và nó định dạng ngày số, thì dù cho ngày định dạng theo mm/dd/yyyy thì như em gái @lehuong1409 chắc ra đúng.
Do mấy em không có "mồi" nên đành phải đoán đại thôi.

Chúc anh ngày thiệt vui.
 
Xin đố các nhà siêu công thức tìm ngày cuối của các tháng có giao dịch
PHP:
Ngày       M Mở cửa  Đóng cửa
01/06/2006  567,17  574,13
01/09/2006  561,45  567,17
01/12/2006  557,47  561,45 '*'
02/16/2006  570,37  557,47
02/17/2006  576,07  570,37
02/20/2006  583,28  576,07
02/21/2006  553,47  569,73
02/22/2006  552,05  553,47
02/23/2006  549,66  552,05 '*'
03/04/2006  544,45  549,66
03/07/2006  545,63  544,45
03/16/2006  537,57  545,63
03/23/2006  537,88  539,44
03/24/2006  537,54  537,88
03/27/2006  523,09  537,54
03/28/2006  528,45  523,09
03/29/2006  602,59  602,12
03/30/2006  597,85  602,59
03/31/2006  597,01  597,85 '*'
04/04/2006  598,39  597,01
04/12/2006  603,15  598,39 '*'
05/09/2006  600,84  603,15 '*'
khà khà lắm đề phết :P
 
Ngày có giao dịch cuối cùng trong tháng đã được đánh dấu bên lề phải mà!

Ví dụ tháng 1 có 31 ngày, nhưng ngày giao dịch cuối cùng của tháng nàytrong năm 2006 đó là 12 tháng 01.

À, lí ra phải viết là ngày giao dịch cuối cùng của từng tháng.
Rất xin lỗi các bạn!
 
Lần chỉnh sửa cuối:
Ngày có giao dịch cuối cùng trong tháng đã được đánh dấu bên lề phải mà!

Ví dụ tháng 1 có 31 ngày, nhưng ngày giao dịch cuối cùng của tháng nàytrong năm 2006 đó là 12 tháng 01.

À, lí ra phải viết là ngày giao dịch cuối cùng của từng tháng.
Rất xin lỗi các bạn!
có phải thế này không chú?
Mã:
=LOOKUP(2;1/(MONTH($A$2:$A$23)=MONTH(A2));$A$2:$A$23)
 
Xin đố các nhà siêu công thức tìm ngày cuối của các tháng có giao dịch
PHP:
Ngày       M Mở cửa  Đóng cửa
01/06/2006  567,17  574,13
01/09/2006  561,45  567,17
01/12/2006  557,47  561,45 '*'
02/16/2006  570,37  557,47
02/17/2006  576,07  570,37
02/20/2006  583,28  576,07
02/21/2006  553,47  569,73
02/22/2006  552,05  553,47
02/23/2006  549,66  552,05 '*'
03/04/2006  544,45  549,66
03/07/2006  545,63  544,45
03/16/2006  537,57  545,63
03/23/2006  537,88  539,44
03/24/2006  537,54  537,88
03/27/2006  523,09  537,54
03/28/2006  528,45  523,09
03/29/2006  602,59  602,12
03/30/2006  597,85  602,59
03/31/2006  597,01  597,85 '*'
04/04/2006  598,39  597,01
04/12/2006  603,15  598,39 '*'
05/09/2006  600,84  603,15 '*'
Nếu dữ liệu đã sắp xếp như vậy anh có thể dùng CT này (ví dụ data là A1:C23), CT tại F2:
Mã:
F2=IFERROR(TEXT(INDEX($A$2:$A$23,SMALL(IF(TEXT($A$2:$A$23,"mm/yy")<>TEXT($A$3:$A$24,"mm/yy"),ROW($1:$22)),ROW(A1))),"dd/mm/yy"),"")
Bấm CTrl+Shit+Enter fill xuống!!!
Không sắp xếp thì hơi chua nếu dùng 1 công thức!!!
 
Công thức bài cuối của LeHuong là đúng rồi!

Nếu thêm tí mắm muối nữa thì hay biết bao: Chỉ hiện những dòng nào đúng là ngày cuối có giao dịch thì tuyệt!
 
Ngày có giao dịch cuối cùng trong tháng đã được đánh dấu bên lề phải mà!

Ví dụ tháng 1 có 31 ngày, nhưng ngày giao dịch cuối cùng của tháng nàytrong năm 2006 đó là 12 tháng 01.

À, lí ra phải viết là ngày giao dịch cuối cùng của từng tháng.
Rất xin lỗi các bạn!
À! không có chi anh, "đố" thì phải "vui" chứ.

Dù chưa tỏ tường dữ liệu của anh, nhưng em cũng thử phen:
PHP:
=AGGREGATE(15,6,DATE(MID($A$2:$A$23,7,4),LEFT($A$2:$A$23,2),MID($A$2:$A$23,4,2))/ISNUMBER(FIND("'*'",$A$2:$A$23)),ROW())

Chúc anh ngày thiệt vui.
/-*+//-*+//-*+/
 

File đính kèm

Công thức bài cuối của LeHuong là đúng rồi!

Nếu thêm tí mắm muối nữa thì hay biết bao: Chỉ hiện những dòng nào đúng là ngày cuối có giao dịch thì tuyệt!
Cháu thêm tí xì dầu chú ạ
Mã:
=IF(LOOKUP(2;1/(MONTH($A$2:$A$23)=MONTH(A2));$A$2:$A$23)=A2;"Ngày giao dịch cuối cùng trong tháng "&MONTH(A2);"")
 
Tăng độ kho của bài anh Hoang2013 chút, dùng 1 công thức tìm ngày giao dịch cuối cùng của từng tháng (Thứ tự các ngày giao dịch không được sắp xếp),
Lưu ý: liệt kê tất cả các kết quả liền nhau trong một cột
:D:D:D
 

File đính kèm

Lần chỉnh sửa cuối:
Tăng độ kho của bài anh Hoang2013 chút, dùng 1 công thức tìm ngày giao dịch cuối cùng của từng tháng:
Lưu ý: liệt kê tất cả các kết quả liền nhau trong một cột
Thứ tự các ngày giao dịch không được sắp xếp!!!
:D:D:D
Hình như anh giải ở bài #40 rồi thì phải.
/-*+//-*+//-*+/
 
Hình như anh giải ở bài #40 rồi thì phải.
/-*+//-*+//-*+/
Anh xem file của em đi, file của anh anh gom 3 cột lại thành có một cột à, mà file đấy anh dựa vào chỗ đã đánh dấu để tìm (mà ngày đấy có lẽ anh @Hoang2013 để dấu để cho mọi người biết, nên dùng dấu đấy thấy không hợp lý lắm)
 
Tăng độ kho của bài anh Hoang2013 chút, dùng 1 công thức tìm ngày giao dịch cuối cùng của từng tháng (Thứ tự các ngày giao dịch không được sắp xếp),
Lưu ý: liệt kê tất cả các kết quả liền nhau trong một cột
:D:D:D
Mã:
=MAX(IF(MONTH($A$2:$A$23)=ROW(A1);$A$2:$A$23))
Ctrl Shift Enter
t k tìm công thức nào tốt hơn đc :))
 
Anh xem file của em đi, file của anh anh gom 3 cột lại thành có một cột à!!!
Cái dữ liệu đó anh copy của anh Hoang2013 xuống, nó là dạng "text" suông sẽ khó lấy hơn.

Đại khái! cũng giống công thức của bài #40 có thể còn gọn hơn chút nữa.
F2=AGGREGATE(15,6,$A$2:$A$23/ISNUMBER(FIND("'*'",$C$2:$C$23)),ROW(A1))
 
Mã:
=MAX(IF(MONTH($A$2:$A$23)=ROW(A1);$A$2:$A$23))
Ctrl Shift Enter
t k tìm công thức nào tốt hơn đc :))
Công thức này cũng được đấy chị, nhưng chưa đúng yêu cầu:
1. Nếu khác năm thì sẽ bị sai.
2. Sẽ bị đứt quảng nếu tháng không liên tục ( em có yêu cầu liệt kê tất cả các kết quả liền nhau trong một cột)
 
Cái dữ liệu đó anh copy của anh Hoang2013 xuống, nó là dạng "text" suông sẽ khó lấy hơn.

Đại khái! cũng giống công thức của bài #40 có thể còn gọn hơn chút nữa.
F2=AGGREGATE(15,6,$A$2:$A$23/ISNUMBER(FIND("'*'",$C$2:$C$23)),ROW(A1))
e 1 máy dùng office 2013; 1 máy dùng 2010 và sever sử dụng office 2007 nên e ít áp dụng công thức AGGREGATE này được vì nó k sử dụng đc cho 2007 :( thấy anh sử dụng hay quá, lại có thêm động lực học rồi ạ :)
 
Cái dữ liệu đó anh copy của anh Hoang2013 xuống, nó là dạng "text" suông sẽ khó lấy hơn.

Đại khái! cũng giống công thức của bài #40 có thể còn gọn hơn chút nữa.
F2=AGGREGATE(15,6,$A$2:$A$23/ISNUMBER(FIND("'*'",$C$2:$C$23)),ROW(A1))
Bỏ đấu * đi anh, dấu * chỉ là để đánh dấu cho mình biết thôi, nếu có dấu * thì đâu còn gì để đố index(,small(if(=*)))!!!
 
Công thức này cũng được đấy chị, nhưng chưa đúng yêu cầu:
1. Nếu khác năm thì sẽ bị sai.
2. Sẽ bị đứt quảng nếu tháng không liên tục ( em có yêu cầu liệt kê tất cả các kết quả liền nhau trong một cột)
Đây gọi là gà mảng gặp cao thủ mảng :) sẽ thử nghiên cứu thêm công thức xem sao vậy :)
 

File đính kèm

Nhờ các cao thủ giúp mình file này nhé.
Thường mình mua hàng thanh toán làm 2 đến 3 lần mới hết. Mình cần phải tính số ngày chịu lãi cho từng mã hàng:

Nguyên tắc tính:
- Tính từ từng lần chi tiền mua hàng đến mốc kết thúc (= ngày thu đủ tiền bán hàng cho khách)
Ví dụ với hàng A1 = (L1 đến K0) + (L2 đến K0) có tháng ngoài vùng = 0 có tháng trong vùng = …..
- Các tháng trước ngày mua lần 1 L1 và sau ngày kết thúc K0 không tính.
Các bạn xem file giúp mình nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Vậy em đố lại, tìm ngày cuối cùng của các tháng thôi :confused::confused::confused:!!!
Lưu ý: liệt kê tất cả các kết quả liền nhau trong một cột
Thử:
Mã:
F2=AGGREGATE(14,6,$A$2:$A$23/(EOMONTH($A$2:$A$23*1,-1)+1=INDEX(EDATE(EOMONTH(MIN($A$2:$A$23),-1)+1,ROW(INDIRECT("1:"&DATEDIF(MIN($A$2:$A$23),MAX($A$2:$A$23),"m")+1))-1),ROW(A1))),1)
Enter fill xuống.

Chúc em ngày vui.
 

File đính kèm

Tăng độ kho của bài anh Hoang2013 chút, dùng 1 công thức tìm ngày giao dịch cuối cùng của từng tháng (Thứ tự các ngày giao dịch không được sắp xếp),
Lưu ý: liệt kê tất cả các kết quả liền nhau trong một cột
:D:D:D
giải vụ đệ quy với len sao rồi bạn
 
Thử:
Mã:
F2=AGGREGATE(14,6,$A$2:$A$23/(EOMONTH($A$2:$A$23*1,-1)+1=INDEX(EDATE(EOMONTH(MIN($A$2:$A$23),-1)+1,ROW(INDIRECT("1:"&DATEDIF(MIN($A$2:$A$23),MAX($A$2:$A$23),"m")+1))-1),ROW(A1))),1)
Enter fill xuống.

Chúc em ngày vui.
Bác kiểm tra lại nhé, thay đổi năm là tèo
 

File đính kèm

Bác kiểm tra lại nhé, thay đổi năm là tèo
Vậy phải sửa lại thành vầy:
Tạo 1 name:
Mang1=SMALL(EOMONTH(Sheet1!$A$2:$A$23*1,-1)+1,ROW(Sheet1!$1:$22))
Công thức mảng:
PHP:
F2=AGGREGATE(14,6,$A$2:$A$23/(EOMONTH($A$2:$A$23*1,-1)+1=INDEX(Mang1,AGGREGATE(15,6,MATCH(ROW($1:$22),INDEX(MATCH(Mang1,Mang1,),),0),ROW(A1)))),1)
Enter fill xuống.

Chúc anh em ngày thiệt vui.
 

File đính kèm

Vậy phải sửa lại thành vầy:
Tạo 1 name:
Mang1=SMALL(EOMONTH(Sheet1!$A$2:$A$23*1,-1)+1,ROW(Sheet1!$1:$22))
Công thức mảng:
PHP:
F2=AGGREGATE(14,6,$A$2:$A$23/(EOMONTH($A$2:$A$23*1,-1)+1=INDEX(Mang1,AGGREGATE(15,6,MATCH(ROW($1:$22),INDEX(MATCH(Mang1,Mang1,),),0),ROW(A1)))),1)
Enter fill xuống.

Chúc anh em ngày thiệt vui.
Tưởng đâu anh không loại trùng chứ :):):), cách của em:
Mã:
F2=SMALL(IF(TEXT(SMALL($A$2:$A$23,ROW($1:$22)),"mmyy")<>IFERROR(TEXT(SMALL($A$2:$A$23,ROW($2:$23)),"mmyy"),),SMALL($A$2:$A$23,ROW($1:$22))),ROW(A1))
Ctrl+Shit+Enter rồi fill xuống!!!
 
Tưởng đâu anh không loại trùng chứ :):):), cách của em:
Mã:
F2=SMALL(IF(TEXT(SMALL($A$2:$A$23,ROW($1:$22)),"mmyy")<>IFERROR(TEXT(SMALL($A$2:$A$23,ROW($2:$23)),"mmyy"),),SMALL($A$2:$A$23,ROW($1:$22))),ROW(A1))
Ctrl+Shit+Enter rồi fill xuống!!!
Cái hay công thức này là lấy được mốc cuối của từng đoạn trong mảng, cái này có thể áp dụng trong nhiều bài khác nữa.

Vậy giờ nếu ngược lại, em tìm ngày bắt đầu từng tháng, tức ngày giao dịch nhỏ nhất của từng tháng thì công thức em bị biến đổi nhiều không?

Công thức của anh thay đổi đúng 1 ký tự: tức từ 14 thay thành 15 mà thôi.

Chúc em ngày thiệt vui.
 
Cái hay công thức này là lấy được mốc cuối của từng đoạn trong mảng, cái này có thể áp dụng trong nhiều bài khác nữa.

Vậy giờ nếu ngược lại, em tìm ngày bắt đầu từng tháng, tức ngày giao dịch nhỏ nhất của từng tháng thì công thức em bị biến đổi nhiều không?

Công thức của anh thay đổi đúng 1 ký tự: tức từ 14 thay thành 15 mà thôi.

Chúc em ngày thiệt vui.
toàn cao thủ kỳ tài , mọi người đánh đố nhau không à, ở ngoài nhiều bài đang chờ :D
 
Cái hay công thức này là lấy được mốc cuối của từng đoạn trong mảng, cái này có thể áp dụng trong nhiều bài khác nữa.

Vậy giờ nếu ngược lại, em tìm ngày bắt đầu từng tháng, tức ngày giao dịch nhỏ nhất của từng tháng thì công thức em bị biến đổi nhiều không?

Công thức của anh thay đổi đúng 1 ký tự: tức từ 14 thay thành 15 mà thôi.

Chúc em ngày thiệt vui.
Đổi Small thành Large là được anh ạ:
Mã:
F2=SMALL(IF(TEXT(LARGE($A$2:$A$23,ROW($1:$22)),"mmyy")<>IFERROR(TEXT(LARGE($A$2:$A$23,ROW($2:$23)),"mmyy"),),LARGE($A$2:$A$23,ROW($1:$22))),ROW(A1))
Ctrl+Shit+Enter rồi fill xuống!!!
 

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

Back
Top Bottom