根据最接近或等于特定最大值的总和对单元格进行分组

时间:2019-04-26 07:05:46

标签: google-sheets spreadsheet google-sheets-formula

我在一行中有一系列的单元格,它们的文本我想要Join()在一起。最终“连接的单元格”中的总字符数是约束条件,这就是为什么我需要对单元格进行分组并创建多个连接的单元格。我想动态计算最接近或等于该最大值的像元范围。单元格的顺序是固定的,因此一组单元格始终需要在一起。

我在这里概述了我想要的结果:

Screenshot

我可能需要一些帮助者专栏,但是我很难确定最好的方法。

2 个答案:

答案 0 :(得分:1)

我将使用2个助手行。

第一个单元格将计算每组的累积总和,第一个单元格中的=A2和随后的单元格具有:

=IF(B1+A3>$C6,B1,A3+B1)

第二个单元格将给每个组一个数字,第一个单元格为1,随后的单元格具有:

=IF(B3>A3,A4,A4+1)

以上两项均应复制到至少比原始表格多一个单元格为止,以便以下公式可以“查看”它们应在哪里停止。

然后将每个组的数字添加到您拥有的小表旁边,并使用一些公式。第一个公式以文本形式给出地址。第二个使用范围来连接文本:

=SUBSTITUTE(CELL("address",OFFSET(A$2,0,MATCH(C8,$4:$4,0)-1))&":"&CELL("address",OFFSET(A$2,0,MATCH(C8+1,$4:$4,0)-2)),"$","")

=TEXTJOIN("-",0,OFFSET(A$2,0,MATCH(C8,$4:$4,0)-1,1,MATCH(C8+1,$4:$4,0)-MATCH(C8,$4:$4,0)))

gSpreadsheet sample

答案 1 :(得分:0)

如果没有帮助行,您可以这样做吗?

是的,您可以在Google表格中使用Sumif创建一个运行总计数组,因此可以通过检查运行总计是否小于或等于10来获得第一组列的小计。您可以减去之前所有组的总和(当然,这确实需要一个辅助单元)并重复该过程。

一旦有了小计,就可以使用类似的方法将文本单元连接在一起。

要获取小计,请在B6中:

=ArrayFormula(max(if((sumif(column(A$1:O$1),"<="&column(A$1:O$1),A$1:O$1)-sum(B$5:B5))<=10,sumif(column(A$1:O$1),"<="&COLUMN(A$1:O$1),A$1:O$1)-sum(B$5:B5))))

然后在C6中加入字符串:

=ArrayFormula(textjoin(",",true,if((sumif(column(A$1:O$1),"<="&column(A$1:O$1),A$1:O$1)-sum(B$5:B5)<=10)*(sumif(column(A$1:O$1),"<="&column(A$1:O$1),A$1:O$1)-sum(B$5:B5)>0),A$2:O$2,"")))

enter image description here