我的主要目的是避免无效的日子。
在工作表1中,我有:
对于天数计算,我使用:
Option Explicit
Sub test()
Dim ndays As Long
With ThisWorkbook.Worksheets("Sheet1")
ndays = Day(DateSerial(.Range("A1").Value, .Range("B1").Value + 1, 1) - 1)
End With
End Sub
页面结构:
有没有一种方法可以计算天数?
答案 0 :(得分:2)
您可以使用:
DateValue()
函数从您用年和月值组成的字符串中构建日期,并添加任何有效的天数(我确定选择“ 1”。)
EOMONTH()
工作表函数以获取结果日期月份的最后一天:
像这样:
With someSheet
...
nb_days = Day(WorksheetFunction.EoMonth(DateValue(.Range("A1").Value & " " & .Range("B1").Value & " 1"), 0))
...
End With
答案 1 :(得分:0)
我建议使用下面的UDF(用户定义函数)。
Function MonthDays(Rng As Range) As Integer
Const Y As Integer = 1
Const M As Integer = 2
Dim Arr As Variant
Application.Volatile ' recalculates on every change
If Application.WorksheetFunction.Count(Rng) = 2 Then
Arr = Rng.Value
MonthDays = DateDiff("d", DateSerial(Arr(Y, 1), Arr(M, 1), 1), _
DateSerial(Arr(Y, 1), Arr(M, 1) + 1, 1))
End If
End Function
您可以使用诸如=MonthDays(A1:A2)
之类的函数调用直接从工作表中调用它,其中A1代表年份,A2代表月份。如果缺少任何一个,该函数将返回0。该函数接受年份和月份均不可能的数字,并将返回逻辑结果,例如,一年的第14个月是次年的2月。但是,您可以通过数据验证来限制条目。
可以从代码中将所有UDF称为普通函数。 Cells(3, 1).Value = MonthDays(Range("A1:A2"))
的作用与输入A3中上一段所述的函数调用的作用相同。但是,如果从VBA调用该函数,则不需要行Application.Volatile
(无效)。