如何在具有动态序列编号的列中为动态字符串创建公式

问题描述 投票:0回答:1

如何构建公式以获得以下所需的输出。

目前,该公式将为当前输出提供 F 列(子流程名称)的顺序编号,但问题是当项目类型列行以“新建”开头时,顺序编号应再次从序列号 1 后跟相同的子进程名称(图像中的示例:- pc3-1,pc5-1),如果存在带有新子进程名称的“现有”,则数字将更改为 2 或 3,具体取决于新的子进程名称(图像 pc4-2 中的示例,pc4 位于请求代码的第一列中)。

=IF(COUNTIF(F$2:F2,F2)=1,MAX(G$1:G1)+1,VLOOKUP(F2,F$1:G1,2,0))

上面的公式用于 G 列,但只会验证 F 列,但我需要 B 列也应该包括在内以获得正确的动态序列号,是否可以通过公式实现?

excel vba excel-formula excel-2010 excel-2007
1个回答
0
投票

如果您正在寻找基于单细胞公式的解决方案,这个疯狂的公式应该可以解决问题:

=A2&"-"&IF(COUNTIF($B$1:B2,"New")<>COUNTIF($B$1:B1,"New"),1,IFERROR(MID(INDEX(INDIRECT("R"&AGGREGATE(15,6,ROW($B$1:$B100)/($B$1:$B100="New"),COUNTIF($B$1:B2,"New"))&"C[0]:R[-1]C[0]",FALSE),MATCH(F2,INDIRECT("F"&AGGREGATE(15,6,ROW($B$1:$B100)/($B$1:$B100="New"),COUNTIF($B$1:B2,"New"))&":"&CELL("address",F1)),0)),FIND("-",INDEX(INDIRECT("R"&AGGREGATE(15,6,ROW($B$1:$B100)/($B$1:$B100="New"),COUNTIF($B$1:B2,"New"))&"C[0]:R[-1]C[0]",FALSE),MATCH(F2,INDIRECT("F"&AGGREGATE(15,6,ROW($B$1:$B100)/($B$1:$B100="New"),COUNTIF($B$1:B2,"New"))&":"&CELL("address",F1)),0)))+1,999),AGGREGATE(14,6,MID(INDIRECT("R"&AGGREGATE(15,6,ROW($B$1:$B100)/($B$1:$B100="New"),COUNTIF($B$1:B2,"New"))&"C[0]:R[-1]C[0]",FALSE),FIND("-",INDIRECT("R"&AGGREGATE(15,6,ROW($B$1:$B100)/($B$1:$B100="New"),COUNTIF($B$1:B2,"New"))&"C[0]:R[-1]C[0]",FALSE))+1,999)*1,1)+1))

它涵盖了从B1到B100的列表。如果您想增加覆盖率,请在公式中相应地更改参考

$B$1:$B100

© www.soinside.com 2019 - 2024. All rights reserved.