excelvba/Formula。用当月的每个星期五填充一系列单元格

excelvba/Formula。用当月的每个星期五填充一系列单元格,vba,excel,excel-formula,Vba,Excel,Excel Formula,因此,标题有点混乱,但我试图做到以下几点: 我有一系列的细胞,从Q8:Q12,T8:T12,Q16:Q20和T16:T20 我试图让这些单元格填充本月每个星期五的日期。从本质上讲,使用七月作为当前月份,它看起来是这样的: Q8/T8 = 06/07 Q9/T9 = 13/07 Q10/T10 = 20/07 Q11/T11 = 27/07 Q12/T12 = - =TEXT(NOW(),"mmmm") Q/T12之所以为空是为了处理一年中有5个星期五而不是4个星期五的月份。这是一种错误处理方

因此,标题有点混乱,但我试图做到以下几点:

我有一系列的细胞,从Q8:Q12,T8:T12,Q16:Q20和T16:T20

我试图让这些单元格填充本月每个星期五的日期。从本质上讲,使用七月作为当前月份,它看起来是这样的:

Q8/T8 = 06/07
Q9/T9 = 13/07
Q10/T10 = 20/07
Q11/T11 = 27/07
Q12/T12 = -
=TEXT(NOW(),"mmmm")
Q/T12之所以为空是为了处理一年中有5个星期五而不是4个星期五的月份。这是一种错误处理方式

我有一个单元格,当前跟踪单元格A9中的月份,公式如下:

Q8/T8 = 06/07
Q9/T9 = 13/07
Q10/T10 = 20/07
Q11/T11 = 27/07
Q12/T12 = -
=TEXT(NOW(),"mmmm")
我真的不太确定如何逻辑地处理这个问题。在我看来,VBA或公式都可以

理想情况下,因为我有一个不同的表,每个月7月,8月等。上述公式的变化取决于目前是哪个月。填充日期范围单元格Q8:Q12后,我需要将单元格Q8:Q12或A9中的公式/VBA脚本转换为值

任何人都有任何想法。对不起,这是一个有点混乱的问题

把这个放在第一个单元格里,抄下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)),"-")
然后根据您的规格设置格式

可能还有更优雅的公式,但这就是我想到的


这是一个宏版本,不需要范围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

我制作了一个用户定义的函数,可以处理任何日期范围,然后用几个公式说明如何将它应用到这个示例中。这将说明每年的过渡


这是用VBA和Excel公式标记的。有没有一个实现是你喜欢的呢?老实说,我不喜欢。如果我要选择一个id,可能会选择VBA,因为我比公式更容易理解它。无论哪种选择更容易,尽管这确实是完美的。我的意思是,它真的很长,但它正是我所需要的。当月份变为8月份时,这种情况会改变吗?我假设我以后需要转换成value。我可以用一个按钮/VBA脚本来实现这一点,这样就不会有问题了。今天是指今天的日期,所以是的,当它变为8月时,数据将发生变化。你可以用一个单元格引用替换今天,在其中你输入日期,它将使用该月/年。那很好,我添加了一个按钮,将在每个月初按下该按钮,将单元格转换为。值:为什么不将其设置为一个udf,接收你想要的一周中的一天,并吐出数字,我同意,但我只是提供了一个简单的vba解决方案,非常感谢。谢谢。我会看看是否能在中国实施。可能会比配方奶粉简单一点谢谢你。我会看看我能用它做些什么。这是值得赞赏的