我不确定是否可行,但是如您所见,我有一个包含多个相关字段和可扩展字段的数据透视表。我正在尝试将A:D列中的数据连接到一个单元格中,该单元格在第2行中工作正常,但不适用于空白父单元格,如F列所示。
关于如何实现这一目标的任何想法?
数据透视表
答案 0 :(得分:0)
此答案假定您不希望仅从“透视表”工具“设计”选项卡上的“报告布局”下拉列表中重复透视表中的所有项目标签。
可以使用AGGREGATE
,SUMPRODUCT
和OFFSET
的组合构造一个公式,以获取与列B中的当前单元格相同或更高的行上的第一个非空白值,就像这样:
=OFFSET($B2,SUMPRODUCT(AGGREGATE(14,6,ROW($B$1:$B$100)*--(ROW($B$1:$B$100)<=ROW())*--(LEN($B$1:$B$100)>0),1))-ROW(),0)
从最外面的部分OFFSET($B2, VALUE, 0)
开始-这将从B2
单元格开始,然后按VALUE
行向上或向下查找以获取值。
接下来,我们需要知道多少行,我们需要向上或向下查找。现在,如果我们可以计算出数据的最底行,则可以从中减去当前的ROW()
,从而得到OFFSET($B2, NON_BLANK-ROW(),0)
因此,要结束,我们需要确定哪些行不为空白,以及哪些行在当前行之上或之上,然后取其中最大的一行。这将采用ArrayFormula,但是我们可以使用SUMPRODUCT
进行正确的计算。要找到最大的数目,我们可以使用MAX
或LARGE
-但如果选择AGGREGATE(14,6,..,1)
,我们得到的错误会更少。 (14
的意思是“我们要 k 个大数,6
的意思是“忽略错误值”,而1
是 k -所以“我们想要最大的数字,忽略错误”)
但是,我们要看什么数字列表,我没有听到您问。好吧,我们想要ROW
作为我们范围内的输出(我使用$B$1:$B$100
,因为使用整个B列需要花费 far 来长时间重复计算),与当前ROW()
进行比较,并检查LEN
gth>0。最后两个是比较,因此我们首先将它们写出来:
ROW($B$1:$B100)<=ROW()
和
LEN($B$1:$B$100)>0
我们要使用--
将TRUE
和FALSE
转换为1
和0
-这意味着任何“不良”值都变为0,并且任何“好”值都大于0:
ROW($B$1:$B$100)*--(ROW($B$1:$B$100)<=ROW())*--(LEN($B$1:$B$100)>0)
当行在当前行之前或之前且行B不为空时,这将为我们提供行号-如果其中任何一个为False,则取值为0。将其粘贴在AGGREGATE
中以找到最大的数字:
AGGREGATE(14, 6, ROW($B$1:$B$100)*--(ROW($B$1:$B$100)<=ROW())*--(LEN($B$1:$B$100)>0), 1)
然后将其放在SUMPRODUCT
中,以强制Excel将其视为ArrayFormula,这就是您的NON_BLANK
。然后,您可以在帖子顶部找到第一个公式