8

我的 excel 文件中目前有 2 个工作表。

第一个工作表称为摘要页面,它显示第二个工作表的摘要结果。

第二张表称为原始数据。例如,名为 Fruits 的列。

Apple
Apple
Apple
Banana
Banana
Pear

在第一张表中,我将有一个公式计算各个水果出现的次数,结果将显示在不同的单元格中。

=COUNTIF(Fruits!A2:A7,"Apple")
=COUNTIF(Fruits!A2:A7,"Banana")

我想做的是,我是否可以对公式进行编程,以便每次添加新的原始数据表(第三张表)时,第一张表上的统计数据都可以参考最新的表来获取信息。

(假设数据和所有的定位都和第二张表一样。)

到目前为止,我所做的是提出一个GETLASTWSNAME()能够始终检索最后一个工作表名称的函数。但我似乎不可能将函数嵌套在 countif 公式本身中。

=COUNTIF((GETLASTWSNAME())!A2:A7,"Apple)

上面的公式是我希望我的公式如何工作的,但遗憾的是 excel 不允许我这样做。

任何意见将不胜感激。谢谢!

4

3 回答 3

10

如果您愿意,可以为此使用 XLM/Range Name 解决方法,而不是 VBA

  1. 定义一个范围名称,wshNames 来保存工作表名称的数组
    =RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND("]",GET.WORKBOOK(1)))
    使用 David Hager 的技术
  2. 使用此 Excel 公式从工作表名称数组中提取最后一个工作表名称
    =INDEX(wshNames,COUNTA(wshNames)+RAND()*0)

这个公式说查看所有工作表,然后返回最后一个(使用 COUNTA)。该RAND()*0)部分确保公式是易变的,并在 Excel 更新时更新

如果您确实使用 VBA,您将需要确保您的GETLASTWSNAME函数是可变的,即当发生更改时它会更新。

在此处输入图像描述

于 2012-04-30T04:28:32.333 回答
6

=COUNTIF(INDIRECT(GETLASTWSNAME() & "!A2:A7"),"Apple")

于 2012-04-29T09:30:30.873 回答
0

在具有溢出功能和新 Sequence() 的 Excel 中,您可以仅从一个单元格中使用相同的技术列出所有工作表名称!先到后或后到先,您的选择。使用 Transpose,您可以获得每个工作表的列标题(Obs volatile)。
在按照 Tomalak (感谢提示)定义命名公式 wshNames 后,我使用了:

=INDEX(wshNames;COUNTA(wshNames)+1-SEQUENCE(COUNTA(wshNames);1;COUNTA(wshNames);-1))

我的 Excel 正在使用“;” 作为分隔符,您可能需要用逗号更改分号 Rolf H

于 2021-03-10T01:16:36.310 回答