请你帮助我添加特定月份的周数?
这是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 If
我对周数的定义是基于整周,周日到周六:
如果本月的第一天没有在星期日开始,那么截至本月第一个星期六的任何日子都是第1周
周日至周六的下一组将是第2周,第3周,第4周等。除非月份开始在星期日,在这种情况下,套装将第1周,第2周,第3周等。
如果月份没有在星期六结束,那么星期日到月末将是 N + 1周,其中 N 是第2步给出的最后一周。
例如:本月,3月1日是星期三。所以3月1日 - 4日(周三至周六)将是1周,依此类推。
答案 0 :(得分:1)
您可以尝试查看WeekNum
功能是否适合您的目的。
您可以在代码中使用它:
.Offset(0, 2).Value = WorksheetFunction.WeekNum(Now - 1)
文档说:
返回特定日期的周数。例如,包含1月1日的一周是一年中的第一周,并且编号为第1周。
此功能有两个系统:
系统1包含1月1日的一周是一年中的第一周,并且编号为第1周。
系统2包含一年中第一个星期四的一周是一年中的第一周,并且编号为第1周。该系统是ISO 8601中指定的方法,通常称为欧洲周编号系统。
每周的OP定义是一个桌面日历,每个绿色区块是一周 - 所以2017年3月有5周。注意2016年1月在此系统下有六个星期!
因此,WeekNum
公式不会给出预期的结果。而是可以使用以下功能:
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
在示例代码中使用,如:
.Offset(0, 2).Value = GetMonthWeek(Now - 1)
答案 1 :(得分:0)
我认为下一个函数将返回您想要的值:
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("place your date here")
,就可以了。
请注意:我没有检查此代码的所有方案,所以如果您收到意外结果,请告诉我。