Excel 宏反复将一周添加到 B 列的开始日期,直到在 A 列中找到新值。非 VBA 也可以工作

Excel 宏反复将一周添加到 B 列的开始日期,直到在 A 列中找到新值。非 VBA 也可以工作

我有一张 Excel 表,其中 x 行的值为 980002。在 x 行之后,A 列中会出现一个新数字。在 B 列中,需要插入一个日期,该日期为 3 行中的同一日期,然后为接下来的 3 行添加一周,直到第一个值 980002 结束。然后对 A 列中的下一个值重复相同的过程。

(编辑):这是我的新代码集,但我无法让它只在 980002 旁边的单元格中写入日期,直到该值结束。相反,它会计算 980002 的行数并写入那么多日期,在每个单元格之间添加 3 行。例如,如果有 5 行值为 980002,那么它将写入 5 个日期,但从第 1 行到第 15 行。

 Sub years()  
Dim cmdate As Date  
Dim i As Integer  
Dim rng As Range  
Dim cll As Range  
i = 0  
cmdate = DateSerial(Year(Date), 1, 1)  
Set rng = Range("a1", Range("a1").End(xlDown))  
For Each cll In rng  
If cll.Value = "980002" Then  
Do  
Range("B1").Offset(i, 0) = cmdate  
cmdate = cmdate + 7  
i = i + 3  
Loop Until Range("a1") <= "980002"  
End If  
Next cll  
End Sub  

预期输出将是这样的

答案1

为了按所需顺序获取一系列日期,我建议使用非 VBA 方法。

在此处输入图片描述

怎么运行的:

  • 将初始日期放入单元格AB1(也可编辑)。
  • 在单元格中输入此公式AB2并填写。

    =COUNTIF($AA$2:$AA2,$AA2)

  • 单元格中的公式AC2

    =IF(ISBLANK(AB2),"",IF(AND(AB2>=1,AB2<=3),$AB$1,IF(AND(AB2>=4,AB2<=6),$AB$1+7,IF(AND(AB2>=7,AB2<=9),$AB$1+14))))
    

为了以后整洁,您可以隐藏该AB列。

在此处输入图片描述


编辑: 我之所以包含这部分,是因为 OP 对如果 ID 集发生变化,所显示的方法将如何工作感到困惑。

  • 此示例包含一系列 6 个相似的 ID。

在此处输入图片描述

  • 细胞内分子式T2

=COUNTIF($S$2:$S2,$S2)

  • 单元格中的公式U2

    =IF(AND(T2>=1,T2<=3),$T$1,IF(AND(T2>=4,T2<=6),$T$1+7))
    

根据需要调整公式中的日期计算和单元格引用。

相关内容