使用基于数学组合的行

时间:2017-09-22 05:58:04

标签: google-apps-script google-sheets

有没有办法在一行中获得所有项目的数学组合,并根据所述组合进行数学等生成其他页面上的内容?例如{1,2,3} - > {1,2,3,1和2,1和3,2和3,1和2和3}

我需要根据与组合数组中标记的项对应的行,分别对列b和c的值求和。

截图清晰明了。我需要使用Sheet 1(全部是手动输入)来完整生成Sheet 2。

Sheet 1

Sheet 2

如果需要,它可以全部在同一张纸上而不是2张,但为了易读性,首选单独使用

编辑: 注意:我确实意识到这可能需要3个或更多的公式。另外,提前谢谢!

1 个答案:

答案 0 :(得分:3)

问题#1。获得所有可能的组合

此公式将从Sheet1列A:A:

中的字符串生成所有可能的组合
=TRANSPOSE(SPLIT(TEXTJOIN("",1,ArrayFormula(IF(REGEXEXTRACT(DEC2BIN(ROW(INDIRECT("a1:a"&SUM(FACT(COUNTA(Sheet1!A:A))/(FACT(ROW(INDIRECT("a1:a"&COUNTA(Sheet1!A:A))))*FACT(COUNTA(Sheet1!A:A)-ROW(INDIRECT("a1:a"&COUNTA(Sheet1!A:A)))))))),COUNTA(Sheet1!A:A))&"1",REPT("(.)",COUNTA(Sheet1!A:A)+1))*1,TRANSPOSE({FILTER(Sheet1!A:A,Sheet1!A:A<>"")&",";"#"}),""))),",#",0))

将产生:

Item3
Item2
Item2,Item3
Item1
Item1,Item3
Item1,Item2
Item1,Item2,Item3

如果在sheet1中添加其他项目,则会调整公式。

请参阅此处的数学背景:

http://mymathforum.com/advanced-statistics/2567-non-repeating-combinations.html

问题#2。通过连接字符串求和

在Sheet2中:A:我们加入了字符串。将此公式粘贴在B1 Sheet2中:

=QUERY(QUERY({TRANSPOSE(SPLIT(JOIN("",ArrayFormula(REPT(row(OFFSET(A1,,,COUNTA(A:A)))&",",LEN(OFFSET(A1,,,COUNTA(A:A)))-LEN(SUBSTITUTE(OFFSET(A1,,,COUNTA(A:A)),",",""))+1))),",")),ArrayFormula(SUMIF(Sheet1!A:A,TRANSPOSE(SPLIT(TEXTJOIN(",",1,A:A),",")),Sheet1!B:B))},"select Col1, sum(Col2) group by Col1 label sum(Col2) ''"),"select Col2")

结果是:

Item3               1000
Item2               750
Item2,Item3         1750
Item1               500
Item1,Item3         1500
Item1,Item2         1250
Item1,Item2,Item3   2250