所以,我这里有这个公式(有效)
=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))
而且我想实现,而不是实际的工作表名称(库存11.09.2018),公式总是引用表的最后一个工作表。每次完成清单时,工作表都会添加到表中。
我做了一些研究,发现了这个解决方案:How do I get my formula to always reference to the last sheet?
我用这个解决方案做的是定义两个范围名称。
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的情况下解决这个问题。
您应该使用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))