Thứ Hai, 13 tháng 7, 2015

hàm để tính số ngày tới ngày hôm nay

1. Các hàm về thời gian của Excel :
- Hàm Weeknum – cho biết hôm nay là tuần thứ mấy trong năm
=WEEKNUM(Today(),1) … cho biết hôm nay thuộc tuần thứ mấy trong năm, với tuần bắt đầu là ngày chủ nhật
=WEEKNUM(Today(),2)… cho biết hôm nay thuộc tuần thứ mấy trong năm, với tuần bắt đầu là ngày thứ hai
Còn theo yêu cầu của bạn thì làm như sau:
A1= “HÔM NAY LÀ TUẦN THỨ “&WEEKNUM(Today(),1)&” CỦA NĂM “&YEAR(TODAY())

- Hàm DATEDIF – tính số ngày từ hôm nay đến tương lai
Từ hôm nay đến tương lai cách bao nhiêu đây nè:
=DATEDIF(Today(),TUONG LAI,”D”) … là số ngày cách với hôm nay
=DATEDIF(Today(),TUONG LAI,”M”) … là số tháng cách với hôm nay
=DATEDIF(Today(),TUONG LAI,”Y”) … là số năm cách với hôm nay
Hàm này dùng đễ tính tuổi là tuyệt đối chính xác…

- Hiển thị Ngày, tháng, năm hiện hành
TODAY () : Trả về số tuần tự thể hiện ngày tháng hiện tại. Nếu định dạng của ô là General trước khi hàm được nhập vào, kết quả sẽ được thể hiện ở dạng ngày tháng năm.

- Hàm Weekday – Tính ngày thuộc thứ mấy trong tuần
Bạn thử Công thức sau nhé :
=CHOOSE(WEEKDAY(A1),”Chủ nhật”,”Thứ hai”,”Thứ ba”,”Thứ tư”,”Thứ năm”,”Thứ sáu”,”Thứ bảy”)

- Hàm NETWORKDAYS – Số ngày làm việc trong tháng
Đó là hàm NETWORKDAYS bạn à… giả sử A1 là ngày đầu tháng (1/9/2007), B1 là ngày cuối tháng (30/9/2007) vậy sẽ có hàm:
NETWORKDAYS(ngày đầu,ngày cuối, các ngày nghĩ lễ)
Ở đây nếu bạn ko có ngày nghĩ lễ nào thì bỏ tham số thứ 3:
=NETWORKDAYS(A1,B1).. kết quả là 20.. Trong này mặc định nó đã trừ đi thứ bảy và CN rồi đấy!
Lưu ý là đễ sử dụng dc hàm này bạn phải vào menu ToolsAdd-Ins và đánh dấu vào mục Analysis Toolpak nhé!

- Hàm WORKDAY – Số ngày làm việc trừ ngày lễ giữa 2 khoảng thời gian
Bạn nên vào Tool AddIns cài thêm Analysis ToolPak-VBA lúc đó sẽ có hàm workday, cho ta ngày làm việc cuối cùng trừ ngày lễ.
=Workday(ngaydau,songaythuviec,ngayle)
Trong đó ngày lễ là names ngayle ta quy định ở cột A1:A9 (chín ngày lễ) ngày AL thì quy ra DL.
Còn nếu không cài thêm AddIns thì dùng công thức dài lắm.

- Kết hợp giữa hàm DATE và hàm INT để thêm dấu “/” vào 1 dãy số để thành ngày tháng
Bạn xem nhé (có 2 TH đấy)

TH1 : Chỉ có các năm >=2000:
PHP Code:
=DATE(RIGHT(A2;2)+2000;MID(A2;LEN(A2)-3;2);LEFT(A2;LEN(A2)-4))

TH 2: Nếu có các năm <2000: p="">PHP Code:
=DATE(RIGHT(A2;2)+IF(VALUE(RIGHT(A2;2))<10 nbsp="" p="">- Công thức trả về ngày cuối tháng khác thứ 7, CN
Làm sao khi nhập số tháng và số năm sẽ ra cho ra kết quả là ngày cuối tháng đó không trùng thứ bảy, chủ nhật. Nếu ngày cuối tháng đó là T7. CN thì lấy ngày Tsáu.
Có nhiều cách :

- Cách 1 :
Công thức đó như sau :
=DATE(YEAR(Ngay),MONTH(Ngay)+1,0)-(MAX(0,WEEKDAY(DATE(YEAR(Ngay),MONTH(Ngay)+1,0),2) -5))
trong đó Ngay sẽ là một cell chứa ngày tháng năm bạn cần biết
Thí dụ hàm : =DATE(2004,9+1,0) sẽ trả về ngày cuối tháng 30/09/2004. Nếu bạn không cộng thêm 1 mà chỉ nhập tháng là 9, hàm sẽ trả về ngày cuối tháng 31/08/2004.
Hàm WEEKDAY(DATE(2004,10,0),2) sẽ cho ta biết ngày cuối tháng là thứ mấy trong tuần. Weekday(******_number, return_type) . ******_number là Date(2004,10,0). Còn return_type là 1 nếu quy định chủ nhật là 1–> thứ bảy là 7, return_type là 2 nếu quy định thứ hai là 1–> chủ nhật là 7, return type là 0 nếu quy định thứ hai là 1–>thứ bảy là 6.
Nếu tôi chọn weekday(date(2004,10,0),2) thì khi ngày cuối tháng rơi vào thứ 6, hàm sẽ cho kết quả là 5. HàmMax(0,weekday(date(2004,10,0),2)-5) sẽ cho kết quả là 0 nếu ngày cuối tháng rơi vào thứ 2 đến thứ 6 trong tuần và cho kết quả là 1 nếu là thứ bảy, 2 nếu là chủ nhật.
Do đó nếu ta chọn lùi lại 1 hoặc 2 ngày nếu ngày cuối tháng rơi vào thứ bảy hay chủ nhật thì bạn chỉ cần làm phép trừ ngày cuối tháng cho 1 hoặc 2 nữa là xong. Khi ấy hàm sẽ là : =DATE(2004,10,0)-(MAX(0,WEEKDAY(Date(2004,10,0,2) -5)).

- Cách 2 :
DATE(Năm, Tháng, Ngày)
DATE(2004,02, 15) = 15 / 02 / 2004
DATE(2004,02, 0 ) = 0 / 02 / 2004 = 31/01/2004 .Là ngày cuối của Tháng -1
Vì vậy, nếu muốn trả về ngày cuối tháng 02 thì phải Tháng +1 (02+1). Thực chất là việc bù trừ (02 +1) – 1=02
DATE(2004,02+1, 0 ) = 0 / 03 / 2004 = 29/02/2004 (Tháng -1)
A2=10/01/2004
Ngày cuối của tháng Month(A2) là: DATE(Year(A2), Month(A2)+1, 0)
Để giải bài toán trên tư duy bắt đầy như sau:
=Ngày cuối tháng -1 (nếu thứ của ngày cuối tháng là T7 ) hoặc -2 (nếu thứ của ngày cuối tháng là CN)
T7-1= CN-2 = T6
WEEKDAY(Ngay) = Ngày trong tuần: T7 là 7, CN là 1
Diễn giải theo CT như sau:
=DATE(Year(A2), Month(A2)+1, 0)
+IF(WEEKDAY( DATE(Year(A2), Month(A2)+1, 0) )=7,-1,0)
+IF(WEEKDAY( DATE(Year(A2), Month(A2)+1, 0) )=1,-2,0)
(Ngày đầu tháng này = ngày cuối của tháng trước)

- Cách 3 : Kết hợp với hàm EOMONTH()
=IF(WEEKDAY(EOMONTH(A1,0),1)=1,EOMONTH(A1,0)-2,IF(WEEKDAY(EOMONTH(A1,0),1)=7,EOMONTH(A1,0)-1,EOMONTH(A1,0)))
- Đếm số ngày lẻ và chẵn trong 1 tháng bất kỳ

Ngày lẻ
{=SUM(IF(MOD(DAY(ROW(INDIRECT(“A”&A1&”:A”&B1)));2) =1;1;0))}

Ngày chẵn
{=SUM(IF(MOD(DAY(ROW(INDIRECT(“A”&A1&”:A”&B1)));2) =1;0;0))}
Ta có thể dùng hàm sumproduct thay thế như sau
=SUMPRODUCT((MOD(DAY(ROW(INDIRECT(“A”&A1&”:A”&B1)) ),2)=1)*1)
=SUMPRODUCT((MOD(DAY(ROW(INDIRECT(“A”&A1&”:A”&B1)) ),2)=0)*1)
Dùng names rút gọn:
[​IMG]

=> CT như sau:
=SUMPRODUCT((MOD(DaysRng,2) =1)*1)
=SUMPRODUCT((MOD(DaysRng,2) =0)*1)
· - Đếm xem có bao nhiêu ngày bất kỳ (1,2,…31 hay thứ 2, thứ 3,…CN) trong khoảng thời gian bất kỳ

[​IMG]

=> CT như sau:
=SUMPRODUCT((MOD(DaysRng,2) =1)*1)
=SUMPRODUCT((MOD(DaysRng,2) =0)*1)

- Xác định ngày nào khi biết đó là thứ mấy của tuần thứ bao nhiêu trong năm
=DATE(G8,1,1) +(H8-1)*7-WEEKDAY(DATE(G8,1,1) +(H8-1)*7)+2 xem file

- Công thức tính ngày cuối cùng trong tháng
Mình xin góp vui về hàm ngày chót sau : (xin chép đoạn code sau vào trong 1 module của file excel)
Public Function NgayChot(Thang, Nam) As Date
Dim StartDate As Date, StopDate As Date
StartDate = DateSerial(Nam, Thang, 1)
StopDate = DateAdd(“m”, 1, StartDate) – 1
NgayChot = StopDate
End Function
Sau đó quay ra sheet thử như sau :
VD tại D10 bạn gỏ bất kỳ ngày nào của tháng 01/2008. (VD 01/01/2008) sau đó tại D11 nhập công thức sau : =ngaychot(MONTH(D10),YEAR(D10))
sẽ có kết quả như ý.

- Công thức trả về ngày cuối tháng trước
Thí dụ hôm nay là ngày 03/06/2006, công thức sẽ trả về ngày 31/05/2006.
Có nhiều cách :
1/ Dùng VBA : Code như sau
Function SongayTrongthang(Thang As Long, Nam As Long) As Byte
Select Case Thang
Case 1, 3, 5, 7, 8, 10, 12: SongayTrongthang = 31
Case 4, 6, 9, 11: SongayTrongthang = 30
Case 2
Select Case Nam
Case (Nam Mod 4 = 0 And Nam Mod 100 = 0) Or Nam Mod 400 = 0: SongayTrongthang = 29
Case Else: SongayTrongthang = 28
End Select
End Select
End Function
2/ Ví dụ ngày tham chiếu ở ô A1:
=Date(year(A1),month(A1),1)-1
3/ Dùng công thức sau : A1 – day(A1) thì sẽ được ngày cuối tháng trước. Lưu ý format cell cho đúng
4/Công thức : =EOMONTH(“03/05/2006″,-1)
=EOMONTH(Start_date,months)
Nếu k thấy hàm này, vui lòng vào Tools->add-in->chọn Analysis ToolPak !
EOMONTH có nghĩa là End of Month : ngày cuối cùng của tháng

- Công thức để tính tuổi
tính bằng công thức sau =ROUND((TODAY()-A1)/365,0) với A1 là ô có giá trị của ngày sinh


EmoticonEmoticon