Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 计算至少找到一次指定值的行数_Google Sheets_Google Sheets Query - Fatal编程技术网

Google sheets 计算至少找到一次指定值的行数

Google sheets 计算至少找到一次指定值的行数,google-sheets,google-sheets-query,Google Sheets,Google Sheets Query,我有一个谷歌电子表格,我试图计算至少有一列中存在某个值的行数。包含数据的列数因行而异 例如,让我们以下表为例: 每一行代表一个任务,并且通过添加其他列来添加在项目中工作的人员的数据 我想计算一下每个人至少完成过一次的任务数量。(如果一个人在一项任务上工作了多次,那么它将仅计为1) 我尝试过使用诸如COUNTIFS或COUNTUNIQUEIFS之类的公式,但由于列的数量可能会有所不同,我被抛弃了 有什么办法可以做到这一点吗?看看这是否有帮助 =countif(ArrayFormula(mmult

我有一个谷歌电子表格,我试图计算至少有一列中存在某个值的行数。包含数据的列数因行而异

例如,让我们以下表为例:

每一行代表一个任务,并且通过添加其他列来添加在项目中工作的人员的数据

我想计算一下每个人至少完成过一次的任务数量。(如果一个人在一项任务上工作了多次,那么它将仅计为1)

我尝试过使用诸如
COUNTIFS
COUNTUNIQUEIFS
之类的公式,但由于列的数量可能会有所不同,我被抛弃了

有什么办法可以做到这一点吗?

看看这是否有帮助

=countif(ArrayFormula(mmult(N(Sheet1!E2:100=A1), transpose(column(Sheet1!E2:2)^0))), ">1")
有关以下数组公式,请参见添加的表格“Erik帮助”,单元格A1:

=ArrayFormula(QUERY({{"Employee";UNIQUE(QUERY({Sheet1!E2:E;Sheet1!H2:H;Sheet1!K2:K;Sheet1!N2:N;Sheet1!Q2:Q;Sheet1!T2:T;Sheet1!W2:W;Sheet1!Z2:Z;Sheet1!AC2:AC;Sheet1!AF2:AF},"Select * Where Col1 Is Not Null",0))},{"Projects";COUNTIF({Sheet1!E2:E&Sheet1!H2:H&Sheet1!K2:K&Sheet1!N2:N&Sheet1!Q2:Q&Sheet1!T2:T&Sheet1!W2:W&Sheet1!Z2:Z&Sheet1!AC2:AC&Sheet1!AF2:AF},"*"&UNIQUE(QUERY({Sheet1!E2:E;Sheet1!H2:H;Sheet1!K2:K;Sheet1!N2:N;Sheet1!Q2:Q;Sheet1!T2:T;Sheet1!W2:W;Sheet1!Z2:Z;Sheet1!AC2:AC;Sheet1!AF2:AF},"Select * Where Col1 Is Not Null",0))&"*")}},"Select * Order By Col2 Desc"))
我将在这里对它进行一些分解,然后鼓励您进一步剖析它,如果需要更深入的学习的话

显然,这是一个数组公式。在本例中,这意味着一个公式将生成整个报告

最外层的查询只是将结果按项目计数的顺序放入双花括号{{}:
QUERY({…},“Select*order by Col2 Desc”)

你看那些双花括号。但实际上,它是一组外部的花括号,包含两组以上的花括号:{{…},{…}。内部的两个数组分别创建报告的第一列和第二列。逗号表示将它们并排放置。您会注意到,每个内部数组的第一个元素都会为相应的列(即“Employee”和“Projects”)生成标题

每个标题后面的分号表示将后面的内容放在下面,而不是并排放置。您会注意到第一个内部数组中有很多分号。因为您说过在一个项目上工作的人不会超过10人,所以我们可以预先确定可能包含名称的所有列,并用这些分号“堆叠”它们,形成一个长的虚拟列。当然,这些列中有许多是空的,因为许多项目不会有完整的十个人的名字。因此,此虚拟名称列被包装在其自己的查询中,该查询将清除空值:

QUERY({Sheet1!E2:E;Sheet1!H2:H;Sheet1!K2:K;Sheet1!N2:N;Sheet1!Q2:Q;Sheet1!T2:T;Sheet1!W2:W;Sheet1!Z2:Z;Sheet1!AC2:AC;Sheet1!AF2:AF},"Select * Where Col1 Is Not Null",0)
为此,我应用了UNIQUE,它提供了唯一名称的第一列列表(而不是每次名称出现时):

因此,完整的第一个内部虚拟阵列(构成最终报告的完整第一列)如下所示:

{"Employee";UNIQUE(QUERY({Sheet1!E2:E;Sheet1!H2:H;Sheet1!K2:K;Sheet1!N2:N;Sheet1!Q2:Q;Sheet1!T2:T;Sheet1!W2:W;Sheet1!Z2:Z;Sheet1!AC2:AC;Sheet1!AF2:AF},"Select * Where Col1 Is Not Null",0))}
第二个内部虚拟数组使用符号AND将分配给每个项目的所有名称连接到一个长字符串中。因此,例如,如果Chris、John和Ryan都在一个项目上工作(其中一些工作了多次),他们的行(看不见)连接可能是这样的:ChrisChrisJohnChrisRyanChris

我们在由这样的串联组成的每个虚拟数组上运行COUNTIF,您将看到的条件主要由第一个内部虚拟数组中的整个UNIQUE子句组成(这是所有可能名称的短列表)。您会注意到,这是由如下星号前后附加的:“&UNIQUE(…)&”星号是任意数量字符的通配符。所以本质上,这将搜索那些长串接的字符串,以查找每个名称在任何地方的外观;一旦找到一个名字,COUNTIF就会将其注册为TRUE。。。一次(不是每次它出现在字符串中)

因此,第二个内部虚拟阵列在隔离状态下如下所示:

{"Projects";COUNTIF({Sheet1!E2:E&Sheet1!H2:H&Sheet1!K2:K&Sheet1!N2:N&Sheet1!Q2:Q&Sheet1!T2:T&Sheet1!W2:W&Sheet1!Z2:Z&Sheet1!AC2:AC&Sheet1!AF2:AF},"*"&UNIQUE(QUERY({Sheet1!E2:E;Sheet1!H2:H;Sheet1!K2:K;Sheet1!N2:N;Sheet1!Q2:Q;Sheet1!T2:T;Sheet1!W2:W;Sheet1!Z2:Z;Sheet1!AC2:AC;Sheet1!AF2:AF},"Select * Where Col1 Is Not Null",0))&"*")}

没有我前面提到的最外层的查询,您仍然可以得到准确的结果;它们只是以项目中出现的唯一名称列表的任何顺序显示。我觉得,无论谁拥有最多的项目,谁拥有最少的项目,都可以发送更多的订单。

在单个任务中使用的“员工/日期/工作小时”列块的最大数量是多少?没有具体的最大数量,但看起来最多只有10个左右。是否可以使用一个总是高于列数的任意数字?是的。那么,10是一个比以往任何时候都需要的数字吗?是的,10应该足够了。今天是漫长的旅行日。如果到那时还没有其他人提供解决方案的话,我今晚会试着看一看。
{"Projects";COUNTIF({Sheet1!E2:E&Sheet1!H2:H&Sheet1!K2:K&Sheet1!N2:N&Sheet1!Q2:Q&Sheet1!T2:T&Sheet1!W2:W&Sheet1!Z2:Z&Sheet1!AC2:AC&Sheet1!AF2:AF},"*"&UNIQUE(QUERY({Sheet1!E2:E;Sheet1!H2:H;Sheet1!K2:K;Sheet1!N2:N;Sheet1!Q2:Q;Sheet1!T2:T;Sheet1!W2:W;Sheet1!Z2:Z;Sheet1!AC2:AC;Sheet1!AF2:AF},"Select * Where Col1 Is Not Null",0))&"*")}