从扩展/折叠数据透视表中提取“隐藏”数据-Excel

时间:2018-06-27 04:51:46

标签: excel vba excel-vba excel-formula

我不确定是否可行,但是如您所见,我有一个包含多个相关字段和可扩展字段的数据透视表。我正在尝试将A:D列中的数据连接到一个单元格中,该单元格在第2行中工作正常,但不适用于空白父单元格,如F列所示。

关于如何实现这一目标的任何想法?

数据透视表

pivottable

1 个答案:

答案 0 :(得分:0)

此答案假定您不希望仅从“透视表”工具“设计”选项卡上的“报告布局”下拉列表中重复透视表中的所有项目标签。

可以使用AGGREGATESUMPRODUCTOFFSET的组合构造一个公式,以获取与列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进行正确的计算。要找到最大的数目,我们可以使用MAXLARGE-但如果选择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

我们要使用--TRUEFALSE转换为10-这意味着任何“不良”值都变为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。然后,您可以在帖子顶部找到第一个公式