从多个工作表中获取最新实例

时间:2017-03-12 15:10:00

标签: excel excel-formula

我正在处理Excel工作表,并尝试从多个工作表中获取最近发生的事件。我目前有三张床单。

第1页被称为" Recipes",它列出了9个食谱,每个食谱都有一个独特的食谱编号:

enter image description here

我还有另外两张," 2017"和" 2016",其中列出了几个日期,这个食谱是在那个日期制作的,是谁制作的:

enter image description here

enter image description here

现在我想要的是,在食谱表上,列出每个食谱已经制作了多少次,最后一次制作,以及由谁制作。像这样:

enter image description here

使用计数功能可以轻松完成多少次。但最近的制作比较棘手。我找到this article,它有一个函数来获取最新的实例,这非常有用。所以我使用了这个公式:

=INDEX('2017'!$A$2:$A$10,SUMPRODUCT(MAX(ROW('2017'!$C$2:$C$10)*($A2='2017'!$C$2:$C$10))-1))

为了得到我的食谱是在2017年的最后一次,这非常有效:

enter image description here

但是正如你所看到的,当谈到蓝莓松饼时,它不起作用,因为2017年没有制作配方。我需要将配方扩展到多年。我也可能在过去增加更多年。我想我可以将上述函数中的多个连接成一个巨大的MAX函数,每年一个函数,如下所示:

=MAX(
INDEX('2017'!$A$2:$A$10,SUMPRODUCT(MAX(ROW('2017'!$C$2:$C$10)*($A2='2017'!$C$2:$C$10))-1)),
INDEX('2016'!$A$2:$A$10,SUMPRODUCT(MAX(ROW('2016'!$C$2:$C$10)*($A2='2016'!$C$2:$C$10))-1))
)

但这并不奏效。最简单的方法是什么?

2 个答案:

答案 0 :(得分:2)

IFERROR函数如果成功则返回正常值,如果失败则返回提供的值。将零回传到MAX就足够了。

=MAX(
    IFERROR(INDEX('2017'!$A$2:$A$10,SUMPRODUCT(MAX(ROW('2017'!$C$2:$C$10)*($A2='2017'!$C$2:$C$10))-1)), 0),
    IFERROR(INDEX('2016'!$A$2:$A$10,SUMPRODUCT(MAX(ROW('2016'!$C$2:$C$10)*($A2='2016'!$C$2:$C$10))-1)), 0)
)

FWIW,可能有更高效的伪MAXIF功能。 AGGREGATE函数的SMALL子函数将允许您获取最新的,第二个最新的,第三个最新的等等。

答案 1 :(得分:1)

最简单的方法是将所有数据放在一个范围内。

另一种选择可能是一系列IFERROR函数,但随着时间的推移会变得有点混乱:

= IfError( Index2007, IfError( Index2006, IfError( Index2005, ) ) )

还有其他更高级的非公式选项,如Power Query或Microsoft Query,我认为这些选项更合适,但可能更难学习。