使用Excel公式的动态,多级,编号列表

时间:2017-05-09 07:05:47

标签: excel dynamic multi-level numbered-list

民间,

我设法使用excel公式创建了一个动态的,多级编号的列表。这工作正常,我以为我会分享结果。我唯一的问题是,如果有人想采取这种做法并尝试简化它。我似乎无法上传示例表(第一次发布)。

编辑我使用名为tbOOA的表,有2列,选择级别和结果。要使用公式,请复制下面编码部分的每一行,而不是以>开头。并将其复制到一个(长)论坛中。

期望的结果: 结果1

输出1.1

活动1.1.1

活动1.1.2

输出1.2

活动1.2.1

结果2

输出2.1

活动2.1.1等等

>The formula explained:
>First choose if it is an Outcome, Output or Activity. If blank, then nothing
=IF([@[Choose Level]]="","",

>If it is an Outcome, put the word "Outcome" into column C
IF([@[Choose Level]]="Outcome", "Outcome " &

>and concatenate it with a count of the number of "Outcome" already chosen, limited from the header of the table, until this row
COUNTIF(tbOOA[[#Headers],[Choose Level]]:[@[Choose Level]], [@[Choose Level]]),

>Else, if "Output" is chosen, put the word "Output"
IF([@[Choose Level]]="Output", "Output "&

>and concatenate it with the number of "Outcome" from the table header to this line
COUNTIF(tbOOA[[#Headers],[Choose Level]]:[@[Choose Level]],"Outcome")

>and concatentate it with a dot and then
&"."&

>(This was the difficult part of the formula)
>count how many instances of "Output" there are between the last (most recent) instance of "Outcome" and the current row
COUNTIF(INDIRECT(ADDRESS(SUMPRODUCT(MAX(ROW(tbOOA[[#Headers],[Choose Level]]:[@[Choose Level]])*(tbOOA[[#Headers],[Choose Level]]:[@[Choose Level]]="Outcome"))),COLUMN([@[Choose Level]]))&":"&ADDRESS(ROW([@[Choose Level]]),COLUMN(([@[Choose Level]]))),TRUE),"Output"),

>Else, it must be an "Activity", so put "Activity" 
"Activity " &

>and concatenate with the number of "Outcome" from table header to this row, and dot
COUNTIF(tbOOA[[#Headers],[Choose Level]]:[@[Choose Level]],"Outcome")&"."&

>and count how many instances of "Output" between the last "Outcome" and this line
COUNTIF(INDIRECT(ADDRESS(SUMPRODUCT(MAX(ROW(tbOOA[[#Headers],[Choose Level]]:[@[Choose Level]])*(tbOOA[[#Headers],[Choose Level]]:[@[Choose Level]]="Outcome"))),COLUMN([@[Choose Level]]))&":"&ADDRESS(ROW([@[Choose Level]]),COLUMN(([@[Choose Level]]))),TRUE),"Output")&"."&

>and finally, count how many instances of "Activity" since the last "Output"
ROW([@[Choose Level]])-SUMPRODUCT(MAX(ROW(tbOOA[[#Headers],[Choose Level]]:[@[Choose Level]])*(tbOOA[[#Headers],[Choose Level]]:[@[Choose Level]]="Output"))))))

1 个答案:

答案 0 :(得分:0)

我可以将它降低到你的一半大小。

数组公式**:

=CHOOSE(MIN(ROWS(INDEX([ChooseLevel],1):[@ChooseLevel]),4),"Outcome1","Output1.1","Activity1.1.1",[@ChooseLevel]&COUNTIF(INDEX([ChooseLevel],1):[@ChooseLevel],"Outcome")&IF([@ChooseLevel]="Outcome","",SUBSTITUTE("."&COUNTIF([@ChooseLevel]:INDEX([ChooseLevel],MATCH(1,0/(INDEX([ChooseLevel],1):[@ChooseLevel]="Outcome"))),"Output")&"."&COUNTIF([@ChooseLevel]:INDEX([ChooseLevel],MATCH(1,0/(INDEX([ChooseLevel],1):[@ChooseLevel]="Output"))),"Activity"),".0","")))

此致

**数组公式的输入方式与'标准'相同。公式。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果您已正确完成,您会注意到Excel在公式周围放置了大括号{}(尽管不要尝试自己手动插入这些括号)。