使用VBA创建动态表,并使用日期值指定开始日期和星期数

时间:2018-07-26 17:10:48

标签: excel vba

我一直在尝试确定如何仅使用函数逻辑来动态扩展excel表,但似乎无法弄清楚。我开始认为只有使用VBA才有可能,对此我不太熟悉。

我正在尝试做的事情: 我有一个开始日期以及持续时间(以周为单位)。我实现了手动逻辑,可以为我提供每周的结束日期,但是我正在尝试使这一过程自动化。

可用参数:

项目开始日期:2018年5月14日

项目结束日期:6/29/2018,正在计算此字段:“((IF($ B $ 1,$ B $ 1 +(B3 * 7),”“))-7 * 1)+ 6-WEEKDAY( ((IF($ B $ 1,$ B $ 1 +(1 * 7),“”))-7 * 1))“

项目总周数:7以上逻辑中引用了该字段

所需结果:

使用上述参数在不同列中填充星期结束日期的动态表

“ 5/18/2018 5/25/2018 6/1/2018 6/8/2018 6/15/2018 6/22/2018 6/29/2018”

手动逻辑: “ =(((IF($ B $ 1,$ B $ 1 +(1 * 7),”“))* 7 * 1)+ 6-WEEKDAY((((IF($ B $ 1,$ B $ 1 +(1 * 7 ),“”))-7 * 1))“

“ =(((IF($ B $ 1,$ B $ 1 +(2 * 7),”“))-7 * 1)+ 6-WEEKDAY((((IF($ B $ 1,$ B $ 1 ++( 2 * 7),“”))-7 * 1))“

“ =(((IF($ B $ 1,$ B $ 1 +(3 * 7),”“))-7 * 1)+ 6-WEEKDAY((((IF($ B $ 1,$ B $ 1 +( 3 * 7),“”))-7 * 1))“

谢谢您的时间。

2 个答案:

答案 0 :(得分:0)

基于起始日期在B1中,结束日期在B2中以及周数在B3中;以下VBA代码将在第1行中填充以D1开始并向右移动的周末日期:

Sub headers()
    Dim start As Double
    Dim weeks As Integer

    start = Range("B1").Value
    weeks = Range("B3").Value
    For i = 0 To weeks - 1
        Cells(1, 4 + i).Value = start + 4 + (i * 7)
    Next
End Sub

答案 1 :(得分:0)

您可以尝试使用此数组公式

=IF(COLUMN(A1:Z1)>A2,"",A1+7-WEEKDAY(A1,16)+(COLUMN(A1:Z1)-COLUMN(A1))*7)

如果突出显示一个足以容纳最大周数的范围(例如A3:Z3),则将其作为数组公式输入。

A1包含开始日期,A2包含星期数。