基于最接近或等于特定最大值的和来分组单元格范围

问题描述 投票:1回答:2

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

我在这里概述了我期望的结果:

我可能需要一些帮助列,但我很难找到最好的方法。

google-sheets spreadsheet google-sheets-formula
2个回答
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


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

© www.soinside.com 2019 - 2024. All rights reserved.