对列求和直到第一个空单元格
Sum column until first empty cell
我有以下 table:
A1 - 25
A2 - 26
A3 - 27
A4 - 空白
A5 - 30
A6 - 23
A7 - 空白
A8 - 24
在 B1 中,我想要以下内容 - 从 A1 开始,对条目求和,直到遇到第一个空白单元格。在这种情况下,它将是 25+26+27 = 78.
我已经看了几个小时的多个答案并尝试调整它们,但没有任何效果。感谢任何帮助(还有很多事情没有意义,函数 isblank(a1:a10) 将 return true 或 false,那么 arrayformula(isblank(a1:a10)) 如何突然将其转换为数组,因为 isblank 只是 returning 一个布尔值?)
这里有几个方法和一个显示它们的电子表格。
https://docs.google.com/spreadsheets/d/1rkLarQC6NQ4HdGa38X3-rPoAW0A2-USvImFimlelhZM/edit#gid=0
方法一:用MATCH找到第一个空行的行,然后用INDIRECT构造一个引用传给SUM:
=sum(indirect("a1:a" & match("~~", arrayformula("~" & A1:A10 & "~"), 0) - 1))
重新格式化:
=sum(
indirect(
"a1:a" &
match(
"~~",
arrayformula("~" & A1:A10 & "~"),
0
) - 1
)
)
这里唯一棘手的事情是 MATCH return 是错误的,如果你只是传递它 "" 来查找,所以我使用 ARRAYFORMULA 将 A1:A10 范围包装在分隔符中(~在这种情况下,但这是任意的)然后在数组中查找 ~~ 。 return 是第 4 行,所以我使用间接构造对 A1:A3 的引用并将其传递给 sum.
与ztiaa的方法类似,但稍逊一筹。他直接过滤 ROW() 结果,并使用 A:A 作为过滤器参数。两者都优于我使用 ISBLANK 等传递给 FILTER
二、同样的思路(找到第一个空行的编号,构造一个引用传递给INDIRECT):
=sum(indirect("a1:a" & filter(ARRAYFORMULA(isblank(A2:A11)*row(A2:A11)), ARRAYFORMULA(isblank(A2:A11)*row(A2:A11))<>0)-1))
重新格式化以便于阅读:
=sum(
indirect(
"a1:a" &
filter(
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10)),
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10))<>0
) - 1,
)
)
所以我使用 ISBLANK(A1:A10)
得到一个布尔数组,指示哪些行为空,然后将其乘以 ROW(A1:A10)
,这将 return 一个包含所有行号的数组范围,都在 ARRAYFORMULA
.
内
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10))
在乘法中使用布尔值将它们转换为零,因此这将生成一个 0(对于 non-blank 行)或行号(对于任何空白行)的数组。然后我采用相同的公式并在其上使用 FILTER 以删除所有零
filter(
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10)),
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10))<>0
)
留下一个包含每个空白行的行号的数组。由于它们是有序的并且 Sheets 缺少动态数组处理,因此 return 值将只是第一个值而不是数组,因此我们可以将其传递给 INDIRECT 以使用该行号生成对范围的引用 - 1(因为我希望范围 运行 从 A1 到第一个空白行之前的行):
indirect(
"a1:a" &
filter(
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10)),
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10))<>0
)-1
)
然后作为最后一步,将整个内容包装在 SUM 中,以对您刚刚使用 INDIRECT 创建引用的范围内的值求和。
=sum(
indirect(
"a1:a" &
filter(
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10)),
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10))<>0
)-1
)
)
[![在此处输入图片描述][1]][1]
让我知道这是否适合您。我想有更好的方法来做到这一点。我会继续考虑的。
还有另一种方法:
=sum(indirect("A1:A"&filter(row(A:A),A:A="")))
选择很少
=SUM(QUERY(A:A,"select A limit " & MIN(FILTER(ROW(A:A),A:A=""))-1))
具有INDEX()
功能
=SUM(INDEX(A:A,1):INDEX(A:A,min(filter(row(A:A),A:A=""))-1))
尝试:
=FLATTEN(INDEX(QUERY(; "select "&SUBSTITUTE(JOIN("+";
IF(INDIRECT("A1:A"&MAX(ROW(A1:A)*(A1:A<>"")))="";
","; A1:A)); "+,+"; ",")); 2))
我有以下 table:
A1 - 25
A2 - 26
A3 - 27
A4 - 空白
A5 - 30
A6 - 23
A7 - 空白
A8 - 24
在 B1 中,我想要以下内容 - 从 A1 开始,对条目求和,直到遇到第一个空白单元格。在这种情况下,它将是 25+26+27 = 78.
我已经看了几个小时的多个答案并尝试调整它们,但没有任何效果。感谢任何帮助(还有很多事情没有意义,函数 isblank(a1:a10) 将 return true 或 false,那么 arrayformula(isblank(a1:a10)) 如何突然将其转换为数组,因为 isblank 只是 returning 一个布尔值?)
这里有几个方法和一个显示它们的电子表格。
https://docs.google.com/spreadsheets/d/1rkLarQC6NQ4HdGa38X3-rPoAW0A2-USvImFimlelhZM/edit#gid=0
方法一:用MATCH找到第一个空行的行,然后用INDIRECT构造一个引用传给SUM:
=sum(indirect("a1:a" & match("~~", arrayformula("~" & A1:A10 & "~"), 0) - 1))
重新格式化:
=sum(
indirect(
"a1:a" &
match(
"~~",
arrayformula("~" & A1:A10 & "~"),
0
) - 1
)
)
这里唯一棘手的事情是 MATCH return 是错误的,如果你只是传递它 "" 来查找,所以我使用 ARRAYFORMULA 将 A1:A10 范围包装在分隔符中(~在这种情况下,但这是任意的)然后在数组中查找 ~~ 。 return 是第 4 行,所以我使用间接构造对 A1:A3 的引用并将其传递给 sum.
与ztiaa的方法类似,但稍逊一筹。他直接过滤 ROW() 结果,并使用 A:A 作为过滤器参数。两者都优于我使用 ISBLANK 等传递给 FILTER
二、同样的思路(找到第一个空行的编号,构造一个引用传递给INDIRECT):
=sum(indirect("a1:a" & filter(ARRAYFORMULA(isblank(A2:A11)*row(A2:A11)), ARRAYFORMULA(isblank(A2:A11)*row(A2:A11))<>0)-1))
重新格式化以便于阅读:
=sum(
indirect(
"a1:a" &
filter(
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10)),
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10))<>0
) - 1,
)
)
所以我使用 ISBLANK(A1:A10)
得到一个布尔数组,指示哪些行为空,然后将其乘以 ROW(A1:A10)
,这将 return 一个包含所有行号的数组范围,都在 ARRAYFORMULA
.
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10))
在乘法中使用布尔值将它们转换为零,因此这将生成一个 0(对于 non-blank 行)或行号(对于任何空白行)的数组。然后我采用相同的公式并在其上使用 FILTER 以删除所有零
filter(
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10)),
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10))<>0
)
留下一个包含每个空白行的行号的数组。由于它们是有序的并且 Sheets 缺少动态数组处理,因此 return 值将只是第一个值而不是数组,因此我们可以将其传递给 INDIRECT 以使用该行号生成对范围的引用 - 1(因为我希望范围 运行 从 A1 到第一个空白行之前的行):
indirect(
"a1:a" &
filter(
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10)),
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10))<>0
)-1
)
然后作为最后一步,将整个内容包装在 SUM 中,以对您刚刚使用 INDIRECT 创建引用的范围内的值求和。
=sum(
indirect(
"a1:a" &
filter(
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10)),
ARRAYFORMULA(isblank(A1:A10)*row(A1:A10))<>0
)-1
)
)
[![在此处输入图片描述][1]][1]
让我知道这是否适合您。我想有更好的方法来做到这一点。我会继续考虑的。
还有另一种方法:
=sum(indirect("A1:A"&filter(row(A:A),A:A="")))
选择很少
=SUM(QUERY(A:A,"select A limit " & MIN(FILTER(ROW(A:A),A:A=""))-1))
具有INDEX()
功能
=SUM(INDEX(A:A,1):INDEX(A:A,min(filter(row(A:A),A:A=""))-1))
尝试:
=FLATTEN(INDEX(QUERY(; "select "&SUBSTITUTE(JOIN("+";
IF(INDIRECT("A1:A"&MAX(ROW(A1:A)*(A1:A<>"")))="";
","; A1:A)); "+,+"; ",")); 2))