Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/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 ArrayFormula-前置行的平均值_Google Sheets_Average_Array Formulas - Fatal编程技术网

Google sheets Google Sheets ArrayFormula-前置行的平均值

Google sheets Google Sheets ArrayFormula-前置行的平均值,google-sheets,average,array-formulas,Google Sheets,Average,Array Formulas,我有一个关于再次使用ArrayFormula的问题。 我有一个2列的列表(datetime和currency)。我需要找到最后50行的currency列的平均值。我不能在每一行中使用公式,因为数组的长度可能会有所不同 我已经尝试过一个查询(知道它不适用于ArrayFormula): 下面是一个包含两个公式的示例表: 有什么办法解决这个问题吗?既然您说“我需要找到最后50行货币列的平均值”,您可以使用以下方法: =ArrayFormula(查询({D2:E};“选择平均值(Col2)”其中(Col

我有一个关于再次使用ArrayFormula的问题。 我有一个2列的列表(datetime和currency)。我需要找到最后50行的currency列的平均值。我不能在每一行中使用公式,因为数组的长度可能会有所不同

我已经尝试过一个查询(知道它不适用于ArrayFormula):

下面是一个包含两个公式的示例表:

有什么办法解决这个问题吗?

既然您说“我需要找到最后50行货币列的平均值”,您可以使用以下方法:

=ArrayFormula(查询({D2:E};“选择平均值(Col2)”其中(Col1>日期“&”文本(WORKDAY($D139:D;-50)”;“YYYY-MM-DD”)&“和Col1

但是你会说“我需要在每一行的50个前置行中使用这个,而不复制公式”,所以这是我能想到的将公式放在一个单元格中的最好方法:

={query({C2:C};“其中Col1为空限制49”;0);query(数组形式)(if(E2:E=”“;”);E+E7:E+E8:E+E8:E+E8:E+E8:E+E8:E+E8:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E8:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E5:E+E5:E+5:E+5:E+E+E+E+E+E+E+E+E+E+E+E+E+5:5:E+E+E+E+E+E+5:5:E+E+E+E+5:5:E+E+E+E+E+5:5:E+E+E+E+5:5:E+E+E+E+E+5:E+E+E+E E40:E+E41:E+E42:E+E43:E+E44:E+E45:E+E46:E+E47:E+E48:E+E49:E+E50:E+E49:E+E51:E)/50);“限制”和计数(E2:E)-49&“0”)

注意:公式必须放在第2行!!其他任何地方,它可能会导致工作表添加更多行时出现问题

对于
查询({C2:C};“其中Col1为空限制49”;0)
要正确工作并偏移数组公式,必须至少有49个空白单元格。如果没有,请引用其他列

由于您的示例表位于德国,我不得不使用;而不是,作为函数分隔符

更新

如果您创建了一个名为“RowsToAverage”的命名范围,其中包含要平均的行数(即50行),下面是一个修订的公式:

={query({C2:C};“其中Col1为空限制”&RowsToAverage-1&“0”);query(数组形式)(if(E2:E=”“;”;E+E7:E+E8:E+E8:E+E8:E+E8:E+E8:E+E8:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E8:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E5:E+E5:E+5:E+5:E+E+E+E+E+E+E+E+E+E+E+E+E+5:5:E+E+E+E+E+E+5:5:E+E+E+E+5:5:E+E+E+E+E+5:5:E+E+E+E+5:5:E+E+E+E+E+5:E+E+E+E E40:E+E41:E+E42:E+E43:E+E44:E+E45:E+E46:E+E47:E+E48:E+E49:E+E50:E+E51:E)/RowsToAverage;“限制”和counta(E2:E)-(RowsToAverage-1)&“”;0)}

你仍然需要手动创建一个范围(2:E+E+E3:E+E3:E+E4:E+E5:E+E6:E+E6:E+E6:E+E6:E+E7:E+E8:E+E8:E+E8:E+E8:E+E8:E+E6:E+E6:E+E6:E+E+E+E20:E+E22:E+E22:E+E22:E+E22:E+E22:E+E22:E+2:E+E23:E+E23:E+E23:E+3:E+2:E+E23:E+E23:E+E23:E+E23:E+E23:E+E23:E+E23:E+3:E+2:E+2:E+3:E+2:E+2:E+2:E+E23:E+E23:E+2:E+E38:E+E39:E+E40:E+E41:E+E42:E+E43:E+E44:E+E45:E+E46:E+E47:E+E48:E+E49:E+E50:E+E51:E)
,但his可以在另一个单元格中轻松完成,然后复制到上面的公式中:

=textjoin(“+”true;数组公式(“E”和行(间接(“A2:A”和行平均值+1))和“:E”)

既然您说“我需要找到最后50行的货币列平均值”,您可以使用以下方法:

=ArrayFormula(查询({D2:E};“选择平均值(Col2)”其中(Col1>日期“&”文本(WORKDAY($D139:D;-50)”;“YYYY-MM-DD”)&“和Col1

但是你会说“我需要在每一行的50个前置行中使用这个,而不复制公式”,所以这是我能想到的将公式放在一个单元格中的最好方法:

={query({C2:C};“其中Col1为空限制49”;0);query(数组形式)(if(E2:E=”“;”);E+E7:E+E8:E+E8:E+E8:E+E8:E+E8:E+E8:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E8:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E5:E+E5:E+5:E+5:E+E+E+E+E+E+E+E+E+E+E+E+E+5:5:E+E+E+E+E+E+5:5:E+E+E+E+5:5:E+E+E+E+E+5:5:E+E+E+E+5:5:E+E+E+E+E+5:E+E+E+E E40:E+E41:E+E42:E+E43:E+E44:E+E45:E+E46:E+E47:E+E48:E+E49:E+E50:E+E49:E+E51:E)/50);“限制”和计数(E2:E)-49&“0”)

注意:公式必须放在第2行!!其他任何地方,它可能会导致工作表添加更多行时出现问题

对于
查询({C2:C};“其中Col1为空限制49”;0)
要正确工作并偏移数组公式,必须至少有49个空白单元格。如果没有,请引用其他列

由于您的示例表位于德国,我不得不使用;而不是,作为函数分隔符

更新

如果您创建了一个名为“RowsToAverage”的命名范围,其中包含要平均的行数(即50行),下面是一个修订的公式:

={query({C2:C};“其中Col1为空限制”&RowsToAverage-1&“0”);query(数组形式)(if(E2:E=”“;”;E+E7:E+E8:E+E8:E+E8:E+E8:E+E8:E+E8:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E8:E+E9:E+E9:E+E9:E+E9:E+E9:E+E9:E+E5:E+E5:E+5:E+5:E+E+E+E+E+E+E+E+E+E+E+E+E+5:5:E+E+E+E+E+E+5:5:E+E+E+E+5:5:E+E+E+E+E+5:5:E+E+E+E+5:5:E+E+E+E+E+5:E+E+E+E E40:E+E41:E+E42:E+E43:E+E44:E+E45:E+E46:E+E47:E+E48:E+E49:E+E50:E+E51:E)/RowsToAverage;“限制”和counta(E2:E)-(RowsToAverage-1)&“”;0)}

你仍然需要手动创建一个范围(2:E+E+E3:E+E3:E+E4:E+E5:E+E6:E+E6:E+E6:E+E6:E+E7:E+E8:E+E8:E+E8:E+E8:E+E8:E+E6:E+E6:E+E6:E+E+E+E20:E+E22:E+E22:E+E22:E+E22:E+E22:E+E22:E+2:E+E23:E+E23:E+E23:E+3:E+2:E+E23:E+E23:E+E23:E+E23:E+E23:E+E23:E+E23:E+3:E+2:E+2:E+3:E+2:E+2:E+2:E+E23:E+E23:E+2:E+E38:E+E39:E+E40:E+E41:E+E42:E+E43:E+E44:E+E45:E+E46:E+E47:E+E48:E+E49:E+E50:E+E51:E)
,但his可以在另一个单元格中轻松完成,然后复制到上面的公式中:

=textjoin(“+”真;数组公式(“E”和行(间接(“A2:A”和行平均+1))和“:E”)
MMULT()'可以用来创建这样的条件平均值或求和,但它们仅限于2500行以下的数据集,因为它们实际上会创建一个长N行、宽N列的矩阵,其中N是数据集的长度

N^2必须小于500万,因为这是谷歌表单中的“单元格限制”

您可以在F2单元格中的一个名为MK的新选项卡上找到此公式。帮助:
=ArrayFormula(query(U2:V; "select AVG(V) where (U > date '"&TEXT(WORKDAY($U139:U;-50); "YYYY-MM-DD")&"' AND U < date '"&TEXT($U139:U; "YYYY-MM-DD")&"') label AVG(V) ''"))
=ArrayFormula(IF($U2:$U>=$C$32;AVERAGE(INDIRECT("$V"&ROW()):INDIRECT("$V"&ROW()-50));""))
=ARRAYFORMULA(IF((E2:E="")+(ROW(D2:D)<50+1);;MMULT((ROW(D2:D)<=TRANSPOSE(ROW(D2:D)+50))*(ROW(D2:D)>=TRANSPOSE(ROW(D2:D)));N(E2:E))/50))