0

所以基本上我有一个 Excel 表,其中包含许多不同的 ID、日期和一列,我想根据 FIRST ID 日期在第三列中指定开始中间或结束。但是,这只适用于相同 ID 的块。当下一个 ID 通过时,块中第一个 ID 的日期将决定第 3 列的其余部分,以此类推。

在查看数据集时可以更好地理解这个问题。

ID      DATE      formula_col
10R46   10/8/2011
10R46   2/18/2012
10R46   6/30/2012
10R47   2/4/2010
10R47   5/16/2010
10R47   8/8/2010
10R47   12/11/2010
10R47   1/4/2011
10R48   6/26/2011
10R48   9/11/2011
10R48   1/29/2012
10R48   4/20/2012
10R48   7/8/2012

正如你在这里看到的。有一组连续的 ID,我需要“formula_col”来读取第一个日期的开头,其余日期将遵循以下规则:

第一个月是开始,下个月是中间,下个月是结束,然后重复。

因此,如果第一个月是二月 (2),那么这些 ID 的公式将是: 二月:三月初:四月中旬:五月底:六月中旬 七月中旬:八月底:九月初:十月中旬:十一月底:十二月初: Middle January: End 任何都可能出现,不一定是开始、中间、结束的顺序。但它们将始终按日期顺序排列,在 ID 结束之前不会回到过去等。

因此,对于上述数据集,它将是:

ID      DATE      formula_col
10R46   10/8/2011 Beginning
10R46   2/18/2012 Middle
10R46   6/30/2012 End
10R47   2/4/2010  Beginning
10R47   5/16/2010 Beginning
10R47   8/8/2010  Beginning
10R47   12/1/2010 Middle
10R47   1/4/2011  End
10R48   6/26/2011 Beginning
10R48   9/11/2011 Beginning
10R48   1/29/2012 Middle
10R48   4/20/2012 Middle
10R48   7/8/2012  Middle

澄清一下:身份证的第一个日期将决定哪些月份是开始、中间和结束。

如果第一个月是 1 月、4 月、7 月或 10 月,这是我创建的代码。但这并不是我想要的,只是一个开始。

=IF(OR(MONTH(B2)=1,MONTH(B2)=4, MONTH(B2)=7,MONTH(B2)=10),"Beginning",IF(OR(MONTH(B2)=2,MONTH(B2)=5, MONTH(B2)=8,MONTH(B2)=11),"Middle",IF(OR(MONTH(B2)=3,MONTH(B2)=6, MONTH(B2)=9,MONTH(B2)=12),"End",NA)))

所以棘手的部分是月份模式的开始取决于唯一 ID 的第一个条目。然后它开始遵循仅适用于该 ID 的规则。当出现下一个 ID 时,规则会根据第一个 ID 的日期重置。它们将始终是连续的,尽管我不想依赖它。

欢迎使用 VBA 解决方案

4

1 回答 1

1

使用 INDEX/MATCH 返回第一个日期并从当前日期中减去该月份和年份,然后使用 MOD 返回该季度的相对月份。

然后将其传递给 CHOOSE 以返回正确的文本:

=CHOOSE(MONTH(B2)-MONTH(INDEX(B:B,MATCH(A2,A:A,0))),3)+1,"Beginning","Middle","End")

但这仅在数据始终像您拥有的那样排序时才有效:

在此处输入图像描述

于 2019-06-27T15:26:11.003 回答