我目前在excel文件中有2个工作表。
第一张工作表称为“摘要”页面,显示第二张工作表的摘要结果。
第二张纸称为原始数据。一个例子是名为Fruits的列。
Apple
Apple
Apple
Banana
Banana
Pear
在第一张纸中,我会有一个公式,计算相应水果出现的时间,结果将显示在不同的单元格中。
=COUNTIF(Fruits!A2:A7,"Apple")
=COUNTIF(Fruits!A2:A7,"Banana")
我想做的是,我是否可以对公式进行编程,以便每次添加新的原始数据表(第3张)时,第一张表上的统计数据都可以参考最新的表格来获取信息。
(假设数据的定位和所有内容都与第二张相同。)
到目前为止我所做的是提出一个函数GETLASTWSNAME()
,它能够始终检索最后一个工作表的名称。但是我似乎不可能在countif公式本身中嵌套函数。
=COUNTIF((GETLASTWSNAME())!A2:A7,"Apple)
以上公式是我希望我的公式如何运作,但遗憾的是excel不允许我这样做。
任何意见将不胜感激。谢谢!
答案 0 :(得分:10)
如果您愿意,可以使用XLM /范围名称解决方法,而不是VBA
=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND("]",GET.WORKBOOK(1)))
=INDEX(wshNames,COUNTA(wshNames)+RAND()*0)
此公式表示查看所有工作表,然后返回最后一个(使用COUNTA)。 RAND()*0)
部分确保公式易变,并在Excel执行时更新
如果您确实使用VBA,则需要确保GETLASTWSNAME
函数是易失性的,即在发生更改时会更新。
答案 1 :(得分:6)
=COUNTIF(INDIRECT(GETLASTWSNAME() & "!A2:A7"),"Apple")
答案 2 :(得分:0)
在带有溢出函数和新的 Sequence() 的 Excel 中,您可以使用相同的技术从一个单元格中列出所有工作表名称!先到后或后到先,您的选择。使用 Transpose,您可以获得每张工作表的列标题(Obs volatile)。
按照 Tomalak 的说法定义命名公式 wshNames 后(感谢您的提示),我使用了:
=INDEX(wshNames;COUNTA(wshNames)+1-SEQUENCE(COUNTA(wshNames);1;COUNTA(wshNames);-1))
我的 Excel 正在使用“;”作为分隔符,您可能需要用逗号更改分号 罗尔夫H