-
07-26-2006, 11:36 PM #1Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Trong Excel làm cách nào đếm đươc tháng hiện tại có bao nhiêu ngày thứ hai,
Bất kỳ ngôn ngữ lập trình nào cũng có thể giúp bạn giải quyết vấn đề này, ở đây là đếm số ngày thứ hai, thứ ba,... chủ nhật trong tháng hiện tại. Điều cốt lõi là giải thuật đếm ngày trong tháng, nếu bạn đã biết giải thuật thì chỉ cần miêu tả giải thuật bằng ngôn ngữ ưa thích. Trong Excel, bạn có thể dùng VBA để viết macro giải quyết vấn đề nào đó. Thí dụ đoạn macro sau sẽ giải quyết vấn đề của bạn:
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 SubView more random threads:
- Dùng VBA trong Excel để tạo và sửa chữa PivotTable
- tìm số mũ của luỹ thừa
- Lỗi khi sử dụng macro,addin
- Chuyển kết quả bấm thẻ sang bảng chấm công
- Tặng các bạn ScrollText - Cuộn chữ: lên, xuống, trái phải,...
- Gán giá trị cho 1 cell
- CÁC ANH EM ƠI GIÚP MÌNH BÀI NÀY VỚI
- Giup mjnh zoj.
- VBA Copy file và đổi tên file từ thư mục này qua thư mục khác
- Viết đoạn code cho nút lệnh SAVE ?
-
08-19-2006, 07:24 PM #2Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Một số ý kiến thêm về việc đếm ngày trong một tháng
Không nhất thiết phải sử dụng tới hàm của Windows API đâu bạn AnhExcel à.
Chúng ta có thể tận dụng những gì của Excel và VBA cung cấp là được.
'Để lấy số ngày trong một tháng:
Dim ngaydauthang, ngaycuoithang, ngaydauthangsau, songaytrongthang
ngaydauthang = DateSerial(Year(Date), Month(Date), 1)
ngaydauthangsau = DateSerial(Year(Date)+IIf(Month(Date)=12, 1, 0) , IIf(Month(Date) = 12, 1, Month(Date) + 1) , 1)
ngaycuoithang = ngaydauthangsau - 1
songaytrongthang = Day(ngaycuoithang)
' Để coi trong tháng có bao nhiêu ngày thứ hai, thứ ba, ...
Dim ngay(6) as integer, sttngaytrongtuan
Dim i as Integer
For i = 1 to songaytrongthang
sttngaytrongtuan = Weekday(ngaydauthang + i - 1)
ngay(sttngaytrongtuan - 1) = ngay(sttngaytrongtuan - 1) + 1
Next
Như thế là có được cái mình cần rồi.
-
03-22-2007, 11:18 PM #3Silver member
- Ngày tham gia
- Nov 2015
- Bài viết
- 2
Thấy mấy bạn trả lời cao siêu quá, đâu cần phải dùng VBA hay... chỉ cần kết hợp các hàm if, choose, weekday và int là tìm ra 1 tháng có bao nhiêu thứ mấy thôi mà
-
03-25-2007, 01:32 AM #4Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 0
Gửi bởi ThuNghi
thật sự ra các hàm trong excel cũng rất mạnh và nếu có sự kết hợp khéo léo những hàm này thì sẽ giải quyết được nhiều vấn đề. Tuy nhiên nó sẽ tuyệt vời hơn khi chúng ta khai thác được những tính năng của VBA cho những yêu cầu của cviệc
Chào mừng bạn đã gia nhập gia đình dân kế toán.
:laugh:
-
03-26-2007, 06:42 PM #5Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Mình mới tham gia xin góp 1 công thức tính mỗi tháng có bao nhiêu thứ hai, mong các bạn đóng góp, dùng hàm match, weekday và if
1/ A1: ngày đầu tháng cần tính tháng có ??? Mon
Days: =DAY(DATE(YEAR(Sheet3!$A$1),MONTH(Sheet3!$A$1)+1,1 )-1) trả về tháng đó có bao nhiêu ngày
FiDayOfMonth=WEEKDAY(DATE(YEAR(Sheet3!$A$1),MONTH( Sheet3!$A$1),1))
Là thứ của ngày đầu tháng
???Mon=IF(OR(AND(Days>28,FiDayOfMonth=2),AND(Days> 29,TYPE(MATCH(FiDayOfMonth,{1;2},0))<>16),AND(Days >30,NOT(ISNA(MATCH(FiDayOfMonth,{7;1;2},0))))),5,4 )
2/ Ngày thứ hai đầu của tháng A2=$A$1+CHOOSE(WEEKDAY($A$1),1,0,6,5,4,3,2))
A3=IF(MONTH(DATE(YEAR(A2),MONTH(A2),DAY(A2)+28-))<>MONTH(A1),4,5)
Trả về số ngày thứ hai của mỗi tháng
Thân
-
03-26-2007, 09:21 PM #6Junior Member
- Ngày tham gia
- Dec 2015
- Bài viết
- 4
Thực ra dùng VA rất hay, giải quyết được nhiều vấn đề như là liệt kê... còn hàm thì chỉ cho ra kết quả tại Cell nào đó thôi. Tôi thử đưa ra các công thức như vậy để anh em cùng nghiên cứu cho vui chớ chẳng có ý gì đâu. Thấy 4R này có nhiều chuyên mục khá hay. Các Mod và Admin cứ tiếp tục phát triển, 4R nào ban đầu cũng thể thôi hơi đâu mà nghe người ta nói này nọ. Bữa sau, nếu trích dẫn thì thêm câu "cám ơn tất cả các bạn và tất cả other 4R đã giúp tôi" là không ai nói gì cả. Hình như post lộn nơi. Xin đưa về đúng vị trí.
Chúc cho danketoan ngày càng lớn mạnh.
-
03-25-2008, 07:04 PM #7Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Trong Excel làm cách nào đếm đươc tháng hiện tại có bao nhiêu ngày thứ hai,
Gửi bởi ThuNghi
Nếu tháng đó là 12 thì sao? Về luận lý thì như vậy chưa chặt, tuy nhiên nó vẫn ra là 31 ngày, nếu tháng cần tính là 12.
-
07-23-2008, 10:33 PM #8Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Trong Excel làm cách nào đếm đươc tháng hiện tại có bao nhiêu ngày thứ hai,
đúng là những cao thu excel! nhu cac anh em lam sao ma theo nổi chứ! cac pro ơi cho em hỏi cái em mới học excel thui các pro khuyên em nên học trong sách nào chỉ cho em với:banghead:
-
07-24-2008, 05:47 AM #9Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Trong Excel làm cách nào đếm đươc tháng hiện tại có bao nhiêu ngày thứ hai,
Gửi bởi phatnq2002
VD =date(2008,13,1) sẽ cho ra ngày 1/1/2009.
-
10-28-2008, 01:56 AM #10Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 50
Ðề: Trong Excel làm cách nào đếm đươc tháng hiện tại có bao nhiêu ngày thứ hai,
Công thức ngắn hơn nữa:
Giã sử
- tại A1 ta gõ vào chỉ số năm (ví dụ là 2008-)
- tại B1 ta gõ vào chỉ số tháng (ví dụ là 1)
Vậy ta có các công thức sau:
1> Tính số ngày thứ 2:
=INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0),2)+8-)/7)
=INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0)-1,2)+8-)/7)
=INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0)-2,2)+8-)/7)
=INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0)-3,2)+8-)/7)
=INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0)-4,2)+8-)/7)
=INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0)-5,2)+8-)/7)
=INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0)-6,2)+8-)/7)
1> Tổng số ngày thứ 2 giữa 2 thời điểm X và Y
=INT((Y-X-WEEKDAY(Y,2)+8-)/7)
=INT((Y-X-WEEKDAY(Y-1,2)+8-)/7)
=INT((Y-X-WEEKDAY(Y-2,2)+8-)/7)
=INT((Y-X-WEEKDAY(Y-3,2)+8-)/7)
=INT((Y-X-WEEKDAY(Y-4,2)+8-)/7)
=INT((Y-X-WEEKDAY(Y-5,2)+8-)/7)
=INT((Y-X-WEEKDAY(Y-6,2)+8-)/7)
(ThuNghi: Tên này nghe quen quen há)
Dự án căn hộ cao cấp Eaton Park được phát triển bởi Gamuda Land độc đáo bền vững tầm nhìn rộng bài trí hài hòa. Eaton Park độc đáo bền vững giá ưu đãi phú hợp văn hóa. Dự án khẳng định thương hiệu,...
Eaton Park tiện ích hạng sang vị trí đẹp