【问题标题】:Working with rows based on mathematical combinations基于数学组合处理行
【发布时间】:2017-09-22 17:31:51
【问题描述】:

有没有办法获得连续所有项目的数学组合,并进行数学运算等以根据所述组合在另一个页面上生成东西?例如{1, 2, 3} -> {1, 2, 3, 1 和 2, 1 和 3, 2 和 3, 1 和 2 和 3}

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

为了清晰起见,截图。我需要使用全部是手动输入的 Sheet 1 来完整地生成 Sheet 2。

如果需要,它可以全部放在同一张纸上而不是两张,但为了便于阅读,最好分开

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

【问题讨论】:

  • 是否有一个函数可以吐出 ₃Cₓ 的所有不同可能性?如果没有,您可能需要 Google-Apps-Script 。如果需要使用脚本,请添加该标签?
  • 我不知道,但我已经添加了标签。谢谢你的建议:)

标签: google-apps-script google-sheets


【解决方案1】:

问题 #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: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

【讨论】:

  • 我还没有完全在家验证它,但我确实有几个问题:我是否将其中的 +1 更改为 +2 以使其执行相同的操作在 c 列?另外,由于我是工作表功能的磨砂,看起来您使用工作表 2 的 a 列返回并找到要为 b 列求和的值。考虑到这一点,我猜想尝试按列排序是否正确b、保留行不行吗?
  • 哎呀忘了抓住你了。 @maxmakhrov
  • 使其适用于 C 列,将 Sheet1!B:B 替换为 Sheet1!C:C
  • 哦,天哪,我什至在寻找 B 参考。现在我觉得很傻。非常感谢。我应该想象我可以使用您发布的内容找出如何使用第三张表来查找前 5 个值和相应的行(我是一个磨砂,但我可以很好地阅读和学习)。
  • 看起来一切正常,非常感谢@maxmakhrov。
猜你喜欢
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
相关资源
最近更新 更多