我正在处理Excel工作表,并尝试从多个工作表中获取最近发生的事件。我目前有三张床单。
第1页被称为" Recipes",它列出了9个食谱,每个食谱都有一个独特的食谱编号:
我还有另外两张," 2017"和" 2016",其中列出了几个日期,这个食谱是在那个日期制作的,是谁制作的:
现在我想要的是,在食谱表上,列出每个食谱已经制作了多少次,最后一次制作,以及由谁制作。像这样:
使用计数功能可以轻松完成多少次。但最近的制作比较棘手。我找到this article,它有一个函数来获取最新的实例,这非常有用。所以我使用了这个公式:
=INDEX('2017'!$A$2:$A$10,SUMPRODUCT(MAX(ROW('2017'!$C$2:$C$10)*($A2='2017'!$C$2:$C$10))-1))
为了得到我的食谱是在2017年的最后一次,这非常有效:
但是正如你所看到的,当谈到蓝莓松饼时,它不起作用,因为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))
)
但这并不奏效。最简单的方法是什么?
答案 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,我认为这些选项更合适,但可能更难学习。