基于 Excel 中 ID 块中第一个 ID 的不同 if 语句(VBA?)

Different if statement based on the first ID in a block of ID's in Excel (VBA?)

所以基本上我有一个 excel sheet 具有许多不同的 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 的公式为: 二月:开始 三月:中 四月:结束 五月:开始 六月中旬 七月:结束 八月:开始 九月:中 十月:结束 十一月:开始 十二月:中 一月:结束 任何一个都可能出现,不一定是开头、中间、结尾的顺序。但它们将始终按日期顺序排列,在 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

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

如果第一个月是一月、四月、七月或十月,这是我创建的代码。但这并不是我想要的,只是一个开始。

=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 欢迎解答

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

然后将其传递给选择 return 正确的文本:

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

但这只有在数据始终按照您的方式排序时才有效: