我正在google sheets中创建一个自定义函数,它统计给定单元格范围内给定数组中所有项目的出现次数。
我理解GoogleSheets函数工作的方式是,将您给定的范围转换为单元格中项目的二维数组。因此,范围a4:b5将被传输到函数as
[[the contents of A4, the contents of B4],
[the contents of A5, the contents of B5]
下一个输入是要在这些单元格中检查的项目列表。从我在网上可以找到的情况来看,数组是在google表单中使用类似于{}的括号给出的。下面给出了我创建的函数。我以前从未使用过javascript,但我知道其他语言,我只是在谷歌上搜索了如何使用for循环和if语句来创建函数,所以我确信错误是由于一些我不知道或错过的简单内容造成的。
function count_if_in_set(range, given_list) {
let counter = 0;
for (dim_1 of range) {
for (dim_2 of dim_1) {
for (item of given_list) {
if (item == dim_2) {
counter += 1
}
}
}
}
return counter
}
当我尝试在google sheets中使用此功能时,输入以下内容: =count_if_in_set(Z30:Z33, {1})
,我收到以下错误: TypeError: given_list is not iterable (line 5).
单元格z30至z33的内容为整数1、2、3、3,应将其作为以下二维数组赋予函数: [[1], [2], [3], [3]]
问题是这个名单 [1]
这是不可容忍的。我有两个假设来解释为什么会这样:
我编码错误,因为我对javascript非常陌生
当GoogleSheets将输入{1}提供给函数时,它不会被传输到列表
为了检查它是否是前者,我检查了我的功能的所有方面。我首先检查了创建函数时是否必须声明变量的类型,但根据我在谷歌上看到的情况,您不需要声明。然后我改变了我所有的想法 for (a of b)
到 for (let a of b)
但那没有任何帮助,从那以后我就被卡住了。
为了解决给代码一个数组的问题,我尝试从 =count_if_in_set(Z30:Z33, {1})
到 =count_if_in_set(Z30:Z33, [1])
,但这引发了一个公式解析错误,所以我知道不是这样,我尝试将输入更改为 =count_if_in_set(Z30:Z33, (1))
但这返回了同样的错误。在那之后,我陷入了困境,没有更多的想法。
3条答案
按热度按时间sbdsn5lh1#
使用普通的电子表格公式可以得到相同的结果,如下所示:
=arrayformula( countif(Z30:Z43, { 1, 2, 3 }) )
要获得总计,请使用以下命令:=arrayformula( sum( countif(Z30:Z43, { 1, 2, 3 }) ) )
要计算有多少单元格具有包含其中一个搜索键的文本字符串,请使用以下命令:=arrayformula( sum( countif( Z30:Z43, "*" & { "a", "b" } & "*" ) ) )
如果出于某种原因需要使用自定义函数,请尝试以下方法开始:这实际上是一种反模式,因为
map
结果不用于任何东西。人们倾向于使用Array.reduce()
,但map-map
模式可能更容易遵循,而且它通常用于自定义函数中,通常不聚合结果,但每个参数值只返回一个值。学习GoogleApps脚本的一些最佳资源包括初学者指南、新的apps脚本编辑器指南、使用GoogleSheets codelab的apps脚本基础知识、扩展GoogleSheets页面、javascript.info、mozilla开发者网络和stack overflow的apps脚本。
voj3qocg2#
试试这个:
只需查找所选范围内的1、2、3、4、5、6、7、8或9的数字,然后返回项目和计数
我的试卷:
COL1COL2COL3COL4COL5COL6COL7COL7COL1011781027419121181371614819151715156731781282179715161911141119015416111111331931543161088217180111761018121611147131018612125311912285481218201818181746148811112115171830615191216151515141811917611111121655612351515151515151514141418151515151515151515151515151515151515151515111111111111111111111111111151515151515151515151515151515151515151515151515151515151515151515151515151
我的公式(l22):
=检查项目(a2:j21,{1,2,3,4,5,6,7,8,9})
返回结果:
试验结果表:
wfveoks03#
对于任何正在寻找实现该功能的方法的人:
我做了同样的事情,但是稍微改变了一下,所以第二个输入是一个单元格区域,其中包含我想要搜索的区域