所以标题有点混乱,但是我试图做以下事情:
我的单元格范围从Q8:Q12,T8:T12,Q16:Q20和T16:T20
我正在尝试让这些单元格填充本月每个星期五的日期。本质上,使用7月(当前月份)看起来像这样:
Q8/T8 = 06/07
Q9/T9 = 13/07
Q10/T10 = 20/07
Q11/T11 = 27/07
Q12/T12 = -
Q / T12空白的原因是要处理一年中有5个星期五而不是4个星期五的月份。这是一种错误处理方式。
我有一个当前在A9单元格中跟踪月份的单元格,公式如下所示:
=TEXT(NOW(),"mmmm")
我不太确定该如何在逻辑上进行处理。 VBA或Formula都能在我眼中发挥作用。
理想情况下,因为我在7月,8月等每个月都有不同的工作表。上面的公式根据当前的月份而变化。我需要将Q8:Q12或A9单元格中的Formula / VBA脚本转换为填充日期范围单元格Q8:Q12之后的值。
任何人都有任何想法。对不起,这个问题有点麻烦
答案 0 :(得分:3)
将其放在第一个单元格中,并抄下5
=IFERROR(AGGREGATE(15,6,ROW(INDEX(A:A,EOMONTH(TODAY(),-1)+1):INDEX(A:A,EOMONTH(TODAY(),0)))/(WEEKDAY(ROW(INDEX(A:A,EOMONTH(TODAY(),-1)+1):INDEX(A:A,EOMONTH(TODAY(),0))),1)=6),ROW(1:1)),"-")
然后格式化为您的规格。
可能会有更优雅的公式,但这就是我想到的。
答案 1 :(得分:3)
这是一个宏版本,不需要Range(“ A9”)中的日期值...
Dim SoM As Date
Dim EoM As Date
Dim rw As Long
SoM = DateSerial(Year(Now), Month(Now) + 0, 1)
EoM = DateSerial(Year(Now), Month(Now) + 1, 0)
rw = 8
While SoM < EoM
If Weekday(SoM) = vbFriday Then
Cells(rw, 17).Value = SoM
Cells(rw, 17).NumberFormat = "m/d/yyyy"
rw = rw + 1
End If
SoM = SoM + 1
Wend
答案 2 :(得分:2)
我制作了一个可以在任何日期范围内使用的用户定义函数,然后通过一些公式演示了如何将其应用于此示例。这将说明每年的转换。
Function DAYOFWEEKFREQUENCY(ByVal dayOfWeekType As String, ByVal startDate As String, ByVal endDate As String) As Long
Dim myStartDate As Date
myStartDate = CDate(startDate)
Dim myEndDate As Date
myEndDate = CDate(endDate)
Dim includeStartDate As Long
includeStartDate = 1
Dim daysBetweenDatesInclusive As Long
daysBetweenDatesInclusive = Application.WorksheetFunction.Days(endDate, startDate) + includeStartDate
Dim vbStartDay As Long
vbStartDay = Weekday(startDate)
Dim dateCheckedIncremented As Date
dateCheckedIncremented = myStartDate
For dayCounter = 1 To daysBetweenDatesInclusive
If Weekday(dateIncrementedChecked) = dayOfWeekType Then
DAYOFWEEKFREQUENCY = DAYOFWEEKFREQUENCY + 1
End If
dateIncrementedChecked = DateAdd("d", 1, dateIncrementedChecked)
Next
End Function