Excel VBA用于与桌面日历类似的月份的周数
请您帮我添加特定月份的周数好吗 这是vba:Excel VBA用于与桌面日历类似的月份的周数,excel,week-number,vba,Excel,Week Number,Vba,请您帮我添加特定月份的周数好吗 这是vba: With Target If .Column <> 10 Or .Row < 1 Then Exit Sub If .Value = "Select" Then If .Offset(0, 1).Value = "" Then .Offset(0, 1).NumberFormat = "mm/dd/yy" .Offset(0, 1).Value = Now - 1 End
With Target
If .Column <> 10 Or .Row < 1 Then Exit Sub
If .Value = "Select" Then
If .Offset(0, 1).Value = "" Then
.Offset(0, 1).NumberFormat = "mm/dd/yy"
.Offset(0, 1).Value = Now - 1
End If
带目标的
如果.Column 10或.Row<1,则退出Sub
如果.Value=“选择”,则
如果.Offset(0,1).Value=”“,则
.Offset(0,1).NumberFormat=“mm/dd/yy”
.Offset(0,1).Value=Now-1
如果结束
我对周数的定义基于从周日到周六的整周:
例如:这个月,三月一日是星期三。所以3月1日至4日(Wed-Sat)将是一周,以此类推。您可以试试看该功能是否适合您的目的 您可以在代码中使用它,如下所示:
.Offset(0,2).Value=WorksheetFunction.WeekNum(现在为-1)
文件说:
返回特定日期的周数。例如,包含1月1日的一周是一年中的第一周,编号为第1周
此功能有两个系统:
系统1包含1月1日的一周是一年中的第一周,编号为第1周
系统2包含一年中第一个星期四的一周是一年中的第一周,编号为第1周。该系统是ISO 8601中规定的方法,通常称为欧洲周编号系统
编辑
OP对周的定义是基于桌面日历,其中每个绿色块都是一周,因此2017年3月有5周。注:2016年1月在此系统下有六周
因此,该公式不会给出预期结果。相反,可以使用以下功能:
Function GetCalendarTypeMonthWeek(dt As Date) As String
Dim lngDayOfMonth As Long
Dim lngWeekDay As Long
Dim dtFirstDayOfMonth As Date
Dim lngFactor As Long
lngDayOfMonth = Day(dt)
lngWeekDay = Weekday(dt, vbSunday) '<~~ Sunday=1, Monday=2, etc
'does month start on Sunday?
dtFirstDayOfMonth = DateValue("01-" & Month(dt) & "-" & Year(dt))
If Weekday(dtFirstDayOfMonth, vbSunday) = 1 Then
lngFactor = 1
Else
lngFactor = 2
End If
'get calendar week number for date
GetCalendarTypeMonthWeek = "Week " & CStr(Int((lngDayOfMonth - lngWeekDay) / 7) + lngFactor)
End Function
函数GetCalendarTypeMonthWeek(dt作为日期)作为字符串
一个月的长度
阴暗的工作日和平时一样长
Dim dtFirstDayOfMonth作为日期
暗lngFactor尽可能长
lngDayOfMonth=天(dt)
lngWeekDay=Weekday(dt,vbSunday)“我认为下一个函数将返回您想要的值:
Function WeekOfTheMonth(DateRef As Date) As Integer
Dim WeekFirstDayRefMonth As Integer
WeekFirstDayRefMonth = Application.WeekNum(DateSerial(Year(DateRef), Month(DateRef), 1), 2)
Dim WeekLastDayRefMonthB As Integer
WeekLastDayRefMonthB = Application.WeekNum(DateSerial(Year(DateRef), Month(DateRef), 1) - 1, 2)
Select Case WeekFirstDayRefMonth - WeekLastDayRefMonthB
Case 0: WeekOfTheMonth = Application.WeekNum(DateRef, 2) - WeekLastDayRefMonthB + 1
Case 1: WeekOfTheMonth = Application.WeekNum(DateRef, 2) - WeekLastDayRefMonthB
Case Else: WeekOfTheMonth = Application.WeekNum(DateRef, 2)
End Select
End Function
只要在你的密码上写上WeekOfTheMonth(“把你的日期放在这里”)
,你就可以开始了。
请注意:我没有检查此代码的所有场景,因此如果您得到意外结果,请告诉我。好的,但我需要每个月从Wk1到Wk4的周数。除了非闰年中的2月,每个月有4周和额外的几天。例如,你会如何处理1月29日至31日?也许你可以用你对周数的定义来更新你的问题。没错,但正如你所说的,即使是一周中的第二天,它也会被视为第四周或第五周,具体取决于一个月中的周数。因此,你的定义是前7天=第一周,第二个7天=第二周,第三个7天=第三周,第四个7天=第四周;还有剩余的天数=第5周?如果3月1日是星期二,那么第1周是3月1日至3月5日(星期六),那么第1周包括5天?