首页 > 解决方案 > Excel 2016:参考公式中的最后一个工作表

问题描述

所以,我在这里有这个公式(有效)

=SUM(SUMIF('Inventory 11.09.2018'!$B$2:$B$47;B2;'Inventory 11.09.2018'!$C$2:$C$47);SUMIF($H:$H;B2;$I:$I))

我想实现,而不是实际的工作表名称(Inventory 11.09.2018),公式总是引用表格的最后一个工作表。每次完成库存时,都会将工作表添加到表中。

我做了一些研究并找到了这个解决方案:如何让我的公式始终参考最后一张纸?

我对这个解决方案所做的是定义两个范围名称。

wshNames

=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND("]",GET.WORKBOOK(1)))

wshNameLast

=INDEX(wshNames,COUNTA(wshNames)+RAND()*0)

然后我开始将我的公式更改为:

=SUM(SUMIF(wshNameLast&"!$B$2:$B$47";B2;wshNameLast&"!$C$2:$C$47");SUMIF($H:$H;B2;$I:$I))

但它在点击返回时会抛出此错误消息: Excel_error_in_formula

由于这是德语,它基本上说:

这个公式有问题。

你不想输入公式?

然后解释公式之前的撇号的作用。

如果我仅在公式中使用定义的名称,例如

=wshNameLast

他们工作。如果我像这样删除公式周围的“SUM”,只是为了测试它是否可以在没有“SUM”的情况下工作

SUMIF('Inventory 11.09.2018'!$B$2:$B$47;B2;'Inventory 11.09.2018'!$C$2:$C$47)

它也不起作用。所以我认为定义的范围名称与我想使用的公式结合起来有问题。

问题是:我做错了什么,我该如何去上班?另外,如果可能的话,我想在没有 VB/VBA 的情况下解决这个问题。

标签: excelexcel-formulanamed-ranges

解决方案


您应该使用 INDIRECT 函数将字符串转换wshNameLast&"!$B$2:$B$47"为范围。像这样INDIRECT(wshNameLast&"!$B$2:$B$47")

完整的公式:

=SUM(SUMIF(INDIRECT(wshNameLast&"!$B$2:$B$47");B2;INDIRECT(wshNameLast&"!$C$2:$C$47"));SUMIF($H:$H;B2;$I:$I))

推荐阅读