【问题标题】:Extracting "hidden" data from expanding/collapsing pivot table - Excel从展开/折叠数据透视表中提取“隐藏”数据 - Excel
【发布时间】:2018-06-27 04:51:46
【问题描述】:

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

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

数据透视表

【问题讨论】:

  • 您尝试过PivotTable Tools > Design > Report Layout > Repeat All Item Labels,还是希望数据透视表保持显示空白?
  • 为什么不使用数据透视表的数据源?将数据转换为另一个表,以一种方式,您只能获得面板所有可能出现的不同行 |类别 |技能 |等级。您可以为此使用Get & Transform

标签: vba excel excel-formula


【解决方案1】:

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

可以使用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 表示“忽略错误值”,1k - 所以“我们想要最大的数字,忽略错误”)

但是,我们要查看哪些数字列表,我没听到你问。好吧,我们希望 ROW 用于我们范围内的输出(我使用的是 $B$1:$B$100,因为使用整个 B 列会花费 far 到 long 来重复计算),与当前的比较ROW(),并检查 LENgth 是否 > 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)

当 Row 位于当前行之前或之前且 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。然后,这会在帖子顶部为您提供第一个公式

【讨论】:

    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 2020-06-03
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2011-02-09
    • 2018-03-18
    相关资源
    最近更新 更多