此答案假定您不想只是从数据透视表工具“设计”选项卡上的“报表布局”下拉列表中重复数据透视表中的所有项目标签。
可以使用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 到 long 来重复计算),与当前的比较ROW(),并检查 LENgth 是否 > 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)
当 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。然后,这会在帖子顶部为您提供第一个公式