我在 Excel 2016 中有一个表格:
ID TIME_PERIOD
-- ---------------
1 FORECAST
2 HISTORY
3 BEYOND FORECAST
4 HISTORY
5 BEYOND FORECAST
6 BEYOND FORECAST
7 FORECAST
8 FORECAST
9 HISTORY
10 BEYOND FORECAST
当将表格打印为 PDF/报告时,我计划排除由于报告中的空间有限,因此我们将从报告打印区域中删除 TIME_PERIOD 列。
作为在报告中显示整个列的替代方法,我希望获得以逗号分隔的列表形式列出列的唯一值。
我需要列表的公式来遵循应用于该字段的任何过滤器。例如,如果我要过滤以仅显示“预测”,那么唯一列表将遵循该过滤器。
问题:
是否存在一个公式可以用来从表列中获取以逗号分隔的唯一值列表?
表格的数据源不断变化(刷新时会添加和删除行)。因此,公式需要动态引用整个列——而不是硬编码到特定范围。
答案1
如果我正确理解了您的任务,请尝试以下公式:
=TEXTJOIN(“,”,TRUE,UNIQUE(INDEX(B7:INDEX(B7:B1000,COUNTA(B7:B1000),1),,1),FALSE,FALSE))
在 Excel 2016 中尝试以下操作:
=SUBSTITUTE(CONCAT(TRANSPOSE(IFERROR(INDEX(INDEX(B7:INDEX(B7:B1000,COUNTA(B7:B1000),1),,1),SMALL(IF(MATCH(INDEX(B7:INDEX(B7:B1000,COUNTA(B7:B1000),1),,1),INDEX(B7:INDEX(B7:B1000,COUNTA(B7:B1000),1),,1),0)=ROW(INDIRECT("1:"&(ROWS(INDEX(B7:IN DEX(B7:B1000,COUNTA(B7:B1000),1),,1))-0))),MATCH(INDEX(B7:INDEX(B7:B1000,COUNTA(B7:B1000),1),,1),INDEX(B7:INDEX(B7:B1000,COUNTA(B7:B1000),1),,1),0),""),ROW(INDIRECT("1:"&(ROWS(INDEX(B7:INDEX(B7:B1000,COUNTA(B7:B1000),1),,1))-0))))),"#"))&", "),"#,","")
答案2
假设你的表名为表格1:
=MID(CONCAT(IF(FREQUENCY(IF(SUBTOTAL(3,OFFSET(INDEX(Table1[TIME_PERIOD],1),ROW(Table1[TIME_PERIOD])-MIN(ROW(Table1[TIME_PERIOD])),)),MATCH(Table1[TIME_PERIOD],Table1[TIME_PERIOD],0)),ROW(Table1[TIME_PERIOD])-MIN(ROW(Table1[TIME_PERIOD]))+1),", "&Table1[TIME_PERIOD],"")),3,2^15)
这很可能需要CTRL+SHIFT+ENTER
针对您的 Excel 版本进行提交。