Hướng Dẫn Tính Số Ngày Trong Một Tháng

Liên hệ QC

duy_quanNIIT

Thành viên mới
Tham gia
8/8/08
Bài viết
3
Được thích
3
Nhiều lúc chúng ta phải đau đầu hoặc luôn cầm quyển lịch trong tay để tính ngày đến hoa cả mắt -+*/ vừa mệt vừa mất công (Tôi sẽ hướng dẫn hai cách để tính ngày trong tháng và Tìm giá trị của biểu thức ngày tháng trả về là thứ mấy trong tháng)
1.Tính số ngày trong tháng
Trong Excel, bạn có thể dùng VBA để viết macro giải quyết vấn đề nào đó. Và vấn đề của chúng ta sẽ được giải quyết nhờ cài này:
Option Explicit
‘ Khai báo kiểu chứa thông tin thời gian
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
‘ Khai báo hàm API của Windows
Private Declare Sub GetLocalTime Lib “kernel32” (lpSystemTime As SYSTEMTIME)
‘ Khai báo biến cần dùng
Dim Days(0 To 6) As Integer
Dim MinDay As Integer
Dim MaxDay As Integer
‘ Macro đếm ngày
Sub DayCount()
Dim lpSystemTime As SYSTEMTIME
Dim iday As Integer
Dim idayofweek As Integer
‘ Khởi động counter ban đầu
For idayofweek = 0 To 6
Days(idayofweek) = 0
Next
‘ đọc thông tin ngày hiện tại
GetLocalTime lpSystemTime
‘ Tìm ngày nhỏ nhất và lớn nhất trong tháng
MinDay = 1
If (lpSystemTime.wMonth = 2) Then
MaxDay = 28
‘ Nên kiểm tra thêm năm nhuần, có 29 ngày
ElseIf (lpSystemTime.wMonth < 8 And lpSystemTime.wMonth Mod 2) Then
MaxDay = 31
ElseIf (lpSystemTime.wMonth > 7 And (lpSystemTime.wMonth Mod 2) = 0) Then
MaxDay = 31
Else
MaxDay = 30
End If
‘ Tính số ngày trong tuần của tháng hiện tại
iday = lpSystemTime.wDay
idayofweek = lpSystemTime.wDayOfWeek
While (iday <= MaxDay)
Days(idayofweek) = Days(idayofweek) + 1
iday = iday + 1
idayofweek = (idayofweek + 1) Mod 7
Wend
iday = lpSystemTime.wDay
idayofweek = lpSystemTime.wDayOfWeek
Days(idayofweek) = Days(idayofweek) - 1
While (iday >= MinDay)
Days(idayofweek) = Days(idayofweek) + 1
iday = iday - 1
If (idayofweek = 0) Then
idayofweek = 6
Else
idayofweek = idayofweek - 1
End If
Wend
‘ Hiển thị kết quả
MsgBox (“C.Nhat:” & Days(0) & “, T.Hai:” & Days(1) & “, T.Ba:” & Days(2) & “, T.Tu:” & Days(3) & “, T.Nam:” & Days(4) & “, T.Sau:” & Days(5) & “, T.Bay:” & Days(6))
End Sub
2.Tìm giá trị của biểu thức ngày tháng trả về là thứ mấy trong tháng
Ở đây chúng ta sẽ dùng hàm WEEKDAY cú pháp hàm này như sau:
WEEKDAY(serial_number,return_type)
trong đó :
serial_number:Giá trị ngày tháng trả về ví dụ(08/08/2008)
return_type: Kiểu trả về
kiểu trả về gồm 3 giá trị
a,kiểu trả về là 1: thì thứ 2 sẽ là 2, chủ nhật sẽ là 1 và thứ bảy sẽ là 7
ví dụ =weekday(08/08/2008,1)=6 -----> thứ 6
=weekday(09/08/2008,1)=7 -----> thứ 7
b, kiểu trả về là 2: thì thứ hai sẽ là 1,chủ nhật sẽ là 7 và thứ bảy sẽ là 6
=weekday(11/08/2008)=1 ------>thứ 2
tương tự bạn mở Excel kiểm tra luôn nhé
c, Kiểu trả về là 3: thứ 2 sẽ là 0, chủ nhật là 6 và thứ 7 là 5
ok xong rồi
thắc mắc liên hệ
vuduyquancdkt@gmail.com
0974894550

 
1. Là kẻ không hâm mộ mấy cái công thức lằng nhằng. Nhưng phài viết code VBA dài như trên thì công thức sau sẽ làm chuyện thứ nhất này và ngắn gọn. Thí dụ bạn muốn biết tháng nào đó có bao nhiêu ngày chứ gì. Gõ ngày vào ngày trong tháng đó vô ô A1 và dùng công thức sau để biết có bao nhiêu ngày:

=DAY(DATE(YEAR(A1),MONTH(A1)+1,1)-1)

2. Để biết ngày nào đó là thứ mấy trong tuần dùng hàm weekday là 1 giải pháp nhưng lại cần 1 ô phụ. Nếu không muốn có thêm ô phụ chỉ dùng cái hàm weekday này thì hơi phí. Nên dùng cái custom format ngay trong XL định dạng ngày là dddd/mmm/yyyy cho lẹ hơn không. Nếu muốn có ngày tháng bằng tiếng Việt trong custom format thì vào GPE tìm là ra ngay.
 
Sao Bác lại -1 làm gì cho nó =0 cho ngắn.
Mã:
=DAY(DATE(YEAR(A1),MONTH(A1)+1,0))
 
chào bạn Digta cho mình hỏi trường hợp năm nhuần có 29 ngày thì hàm của bạn đưa ra liệu có khả thi ko ?????
còn dùng định dạng dd/mm/yyyy trong custom format nó như thế nào ? khi mà công thức mình đưa ra dùng để tính toán ví dụ tính lương của những người làm việc vào thứ 7 và chủ nhật hoặc lọc ra những người làm vào thứ 7 và chủ nhật thì WEEKDAY là một giải pháp trọn cả đôi đường
 
chào bạn Digta cho mình hỏi trường hợp năm nhuần có 29 ngày thì hàm của bạn đưa ra liệu có khả thi ko ?????
còn dùng định dạng dd/mm/yyyy trong custom format nó như thế nào ? khi mà công thức mình đưa ra dùng để tính toán ví dụ tính lương của những người làm việc vào thứ 7 và chủ nhật hoặc lọc ra những người làm vào thứ 7 và chủ nhật thì WEEKDAY là một giải pháp trọn cả đôi đường
Xin xác định chắc chắn với bạn rằng: Công thức mà DigitaSalam đưa ra là tuyệt đối chính xác, bất kể năm nhuận hay cái gì gì...
Mấy công thức này vẩn thường dùng trên Giải pháp Excel... Đã từ lâu lắm rồi
Ngoài ra còn rất nhiều dạng bài toán khác về ngày tháng như:
1> Tính xem có bao nhiêu ngày Chủ nhật giữa 2 thời điểm cho trước
2> Tính tuổi chính xác của 1 người bằng DATEDIF
3> Ngày Chủ nhật cuối cùng của tháng là ngày nào?

vân vân và vân vân... đều dùng những công thức rất đơn giãn để giãi quyết
 
Web KT

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

Back
Top Bottom