从多个工作表获取最新的实例
我正在做一个Excel工作表,并试图从多个工作表中获取最近发生的事件。 我目前有三张。
工作表1被称为“食谱”,它列出了9个配方,每个配方都有一个独特的配方编号:
我还有另外两张纸,“2017”和“2016”,我在那里列出几个date,哪一个是在那个date制作的,是谁做的:
现在我想要的是在食谱表上,列出每个食谱已经做了多less次,最后一次做了什么以及由谁做的。 像这样:
使用计数function已经多less次了。 但是最近做的更加棘手。 我发现这篇文章有一个函数来获取最新的东西,这非常有帮助。 所以我用这个公式:
=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)) )
但是这不起作用。 最简单的方法是什么?
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,可能会有更有效的伪MAXIFfunction。 AGGREGATEfunction的SMALL子function可以让你获得最新的,第二个最新的,第三个最新的,等等。
最简单的方法是将所有数据都放在一个范围内。
另一种select可能是一连串的IFERROR
函数,但随着时间的推移会变得有点麻烦:
= IfError( Index2007, IfError( Index2006, IfError( Index2005, ) ) )
还有其他更高级的非公式选项,例如Power Query或Microsoft Query,我认为这些选项更合适一些,但可能更难学。