我是一个程序员,请大家多多包涵。我明白Excel不一定是我在其他领域所习惯的,但我在破解如何完成一些看起来有些简单的事情。
我有一列数字,它们本身就是一个公式的基础。我想根据一些标准来过滤这些单元格,并将它们传递给另一个函数来执行计算。
我知道这可以通过excel中的 "过滤器 "来完成。这将意味着我必须为每个计算多次点击,过滤结果,复制值并粘贴到我需要的地方。如果数据发生变化,我将不得不重新做一遍。
我正在寻找的是相当于编程语言中的过滤功能,这里举个例子。
let range = [1,2,3,4,0,-1,-2,-3,-4];
let subrange = range.filter(function (cell) { return cell > 0; });
subtotal(1,subrange);
我的excel表格是这样的:
我有一个G列,里面有12000多个结果,每一个列是这样的。
=(En-Bn)/Bn
这些都是复制下来的 n
指5-12000+的行数。
现在我想创建一个单元格,M2,使它包含。
=SUBTOTAL(1,[ Gn in G5:G12000 where Gn > 0 ])
我们的目标是,我不需要点击,因为实际上,我还需要创建许多单元格(大约20个),其中包含类似的 "过滤 "谓词。
如果我也不必指定列的n...n-1范围,那就更好了,因为理想的情况下,那是可以改变的。可以是10,可以是20000,应该无所谓。
最好的公式或解决方案是这样的。
SUBTOTAL(1, [ Gn in G0:GLENGTH where Gn > SOMECELL ])
任何指针,或建议在哪里读, 或解决方案将是真棒。我一直在google上搜索,看来我缺乏正确的理解,无法在所提供的材料中找到答案。
另外,请原谅我用程序员的说法,我知道Excel的公式不一定是1:1,我只是想找一个节省时间的方法。欢迎用VBA或用宏来回答,主要是找到一种方法......
最好的,Jason
我需要说明的是,它需要有点向后兼容,所以我不能使用>=365中才有的FILTER函数。
我完全不确定你用编程语言而不是英语说话来节省时间的尝试是否真的节省了时间或空间。我尽最大努力确定,你把我们都搞糊涂了。请告诉我为什么下面的简单公式不能用。
=AVERAGEIF(G2:G15000,">"&A1,G2:G15000)
这个公式需要A1容纳一个数字,而公式提供了>符号。一个变化是让A1同时包含数字和比较,比如>1.2`。
=AVERAGEIF(G2:G15000,A1,G2:G15000)
上述公式的范围从G2开始。如果你需要的话,可以改成G5。G15000是一个随机数,目的是比你需要的任何东西都要大。该函数会忽略空白。但是,如果你担心有一天你忘了在哪里调整公式,就会有一个有16000行的表,我建议使用一个命名的范围,你可以格式化为动态的。
命名的范围比范围地址更容易处理,而且可以用描述性的方式命名,如 每小时读数. 上述公式是这样的:--------------。
=AVERAGEIF(HourlyReadings, ">"&A1,HourlyReadings)
从理论上讲,公式中 每小时读数 的定义也可以写进工作表公式中,但会变得笨重。如上图所示,你必须查看 "名称管理器 "才能知道这个范围是否是动态的,当然,一旦定义了,你就可以在很多函数和公式中使用相同的名称,这样可以节省很多维护时间。
数组如何? -=SUM(IF(G:G>0,G:G,"")
=SUM(IF(G:G>0,G:G,""))
将光标放在'功能栏'中,公式。然后按CTRL+SHIFT+ENTER(按这个顺序,同时按住它们。公式周围会出现{}。
如果需要进一步的帮助,请告诉我。
马特