trandangkhoi
Thành viên hoạt động



- Tham gia
- 26/3/07
- Bài viết
- 175
- Được thích
- 165
Các bác ơi , có một công thức nào có thể tính số ngày chẵn lẻ của một tháng bất kỳ mà không phải dùng VBA không
Option Explicit
Public Function NgayChanLe(date1 As Date, date2 As Date, chanle)
Dim i, songaychan, songayle, so_thang
Dim dem1, dem2
'Tinh so thang
If Year(date1) = Year(date2) Then
so_thang = Month(date2) - Month(date1) + 1
Else
so_thang = (12 - Month(date1) + 1) + Month(date2) + (Year(date2) - Year(date1) - 1) * 12
End If
'Tinh so ngay chan, le
For i = 1 To so_thang - 2
songaychan = songaychan + Int(Day(DateSerial(Year(date1), Month(date1) + i + 1, 0)) / 2)
songayle = songayle + Day(DateSerial(Year(date1), Month(date1) + i + 1, 0)) - _
Int(Day(DateSerial(Year(date1), Month(date1) + i + 1, 0)) / 2)
Next i
'Tinh so ngay chan le cua thang dau tien
For i = Day(date1) To Day(DateSerial(Year(date1), Month(date1) + 1, 0))
If (i / 2 - Int(i / 2)) = 0 Then
dem1 = dem1 + 1
Else
dem2 = dem2 + 1
End If
Next i
'Tinh so ngay chan le cua thang cuoi cung
For i = 1 To Day(date2)
If (i / 2 - Int(i / 2)) = 0 Then
dem1 = dem1 + 1
Else
dem2 = dem2 + 1
End If
Next i
songaychan = songaychan + dem1
songayle = songayle + dem2
If chanle = 1 Then
NgayChanLe = songayle
Else
NgayChanLe = songaychan
End If
End Function
Số ngày lẻ = ngày cuối - ngày đầu - songaychan +1Function songaychan(NgayCuoi As Date, NgayDau As Date) As Integer
Dim i As Integer
Dim ThoiGian As Integer
'lay hieu so ngaycuoi-ngaydau
If NgayCuoi < NgayDau Then
MsgBox ("Ban nhap sai-nhap lai songay(ngaycuoi,ngaydau)")
Exit Function
End If
ThoiGian = NgayCuoi - NgayDau
For i = 0 To ThoiGian
If Day(NgayDau + i) Mod 2 = 0 Then
songaychan = songaychan + 1
End If
Next i
End Function
Function SoNgay(NgayDau As Date, NgayCuoi As Date, Loai As String) As Integer
Dim i As Long
Dim Ngay As Integer
If NgayCuoi - NgayDau < 0 Then
SoNgay = 0
Else
For i = NgayDau To NgayCuoi
If Day(i) Mod 2 = 0 Then Ngay = Ngay + 1
Next i
If Loai = "Chan" Then
SoNgay = Ngay
ElseIf Loai = "Le" Then
SoNgay = NgayCuoi - NgayDau + 1 - Ngay
End If
End If
End Function
anhtuan1066 đã viết:Ai cha cha... Xom tụ rồi đây! Toàn là các cao thủ... Các bạn ơi! Chẳng lẻ ko còn cách nào làm bằng công thức? Vì nếu chỉ đơn giản là tính số ngày chẳn lẻ mà dùng VBA thì có phí lắm ko? Nếu bất chợt có ai đó cần tính số ngày chẳn lẽ giữa 2 móc thời gian thì.. chỉ vài phép tính đơn giản tôi nhẩm cũng ra (bằng cách suy luận mỗi tháng luôn luôn có 15 ngày chẳn, trừ tháng 2)...
Chẳng lẻ bó tay nhỉ? Search trên Google hình như cũng ko có... Chắc tụi nước ngoài nó ko có khái niệm ngày chẳn lẻ? Ở VN có biển báo cấm xe lưu thông vào ngày chẳn hoặc ngày lẻ nên có khái niệm này chăng? Hi... hi...
ANH TUẤN
ThuNghi đã viết:Mình xin đóng góp code này.
Mã:Function songaychan(NgayCuoi As Date, NgayDau As Date) As Integer Dim i As[SIZE=3][COLOR=Red][B] Integer[/B][/COLOR][/SIZE] Dim ThoiGian As Integer 'lay hieu so ngaycuoi-ngaydau If NgayCuoi < NgayDau Then MsgBox ("Ban nhap sai-nhap lai songay(ngaycuoi,ngaydau)") Exit Function End If ThoiGian = NgayCuoi - NgayDau + 1 For i = 0 To ThoiGian If Day(NgayDau + i) Mod 2 = 0 Then songaychan = songaychan + 1 End If Next i End Function
Số ngày lẻ = ngày cuối - ngày đầu - songaychan +1
Integer Data Type@import url(office.css);Integer variables are stored as 16-bit (2-byte) numbers ranging in value from -32,768 to 32,767. The type-declaration character for Integer is the percent sign (%).
Năm nhuận thì có ảnh hưởng gì cơ chứ ?? Khi năm nhuận : T2 có 29 ngày, như vậy vẫn có 14 ngày chẵn cơ mà!trandangkhoi đã viết:Em có ý kiến thế này. Đếm các tháng giữa 2 khoảng thời gian(dựa vào ý kiến của bạn Anh Tuấn . Tại vì trong 1 năm các tháng có 28, 30 và 31 ngày đều cố định rồi . Sau có dùng lệnh IF để đặt điều kiện lên các tháng .Tất cả các tháng đều có 15 ngày chẵn ( trừ tháng 2) . còn số ngày lẻ thì lấy số ngày chẵn trừ đi. Nhưng mà tháng 2 còn có năm nhuận nữa chứ, không biết phải giải quyết thế nào