【问题标题】:How to list all possible combinations of the values in FIVE columns in excel?如何在excel的五列中列出所有可能的值组合?
【发布时间】:2019-06-11 18:45:57
【问题描述】:

已经有一个问题和答案,“如何在 excel 中列出三列中所有可能的值组合?”这个公式完全符合我的要求,但我需要添加两个额外的列,但我无法完全理解当前的公式以向列表中添加额外的两个新列。

当前公式适用于 3 列。它需要更新以包含 5。=IFERROR(INDEX($A:$A,IF(INT((ROW(1:1)-1)/(((COUNTA(B:B)-1)*((COUNTA(C:C)-1)))))+2>COUNTA(A:A),-1,INT((ROW(1:1)-1)/(((COUNTA(B:B)-1)*((COUNTA(C:C)-1)))))+2))&" "&INDEX(B:B,MOD(INT((ROW(1:1)-1)/(COUNTA(C:C)-1)),(COUNTA(B:B)-1))+2)&" "&INDEX(C:C,MOD((ROW(1:1)-1),(COUNTA(C:C)-1))+2),"")

另外,如果有一种方法可以解释如何增加或减少一列,这也会带来指数级的好处。

Site    Product Type    Labor Hours Machine Hours   Batch Size      
MAR UV  2   2   100     MAR UV 2
BEL SOLVENT 5   5   300     MAR UV 5
    WATER   8   8   750     MAR UV 8
        13  13  1750        MAR UV 13
        18  18  3750        MAR UV 18
                5000        MAR SOLVENT 2
                        MAR SOLVENT 5
                        MAR SOLVENT 8
                        MAR SOLVENT 13
                        MAR SOLVENT 18
                        MAR WATER 2
                        MAR WATER 5
                        MAR WATER 8
                        MAR WATER 13
                        MAR WATER 18
                        BEL UV 2
                        BEL UV 5
                        BEL UV 8
                        BEL UV 13
                        BEL UV 18
                        BEL SOLVENT 2
                        BEL SOLVENT 5
                        BEL SOLVENT 8
                        BEL SOLVENT 13
                        BEL SOLVENT 18
                        BEL WATER 2
                        BEL WATER 5
                        BEL WATER 8
                        BEL WATER 13
                        BEL WATER 18

这是我现在根据当前公式看到的。它仅包括前 3 列。我还需要它包括下一个 2。我也喜欢这个公式,因为它不关心每列中会有多少额外的行,这在未来可能会发生巨大变化。

以下是公式中只有 3 列的原始问题 How to list all possible combinations of the values in three columns in excel?

【问题讨论】:

  • 您考虑过 VBA 解决方案吗?
  • 不幸的是,我在宏方面的经验为零。另外,我找到了一个有效的公式,只需要更新它以包含其他列。知道如何添加一个回答 3 列问题的人吗?我确定他可以将其更新为五列?

标签: excel excel-formula


【解决方案1】:

这是一种方法没有公式:

  1. 为您的列创建数据透视表。
  2. 在数据透视表的“行”字段中按顺序设置列。
  3. 将布局更改为“表格形式”和“重复项目标签”
  4. 删除所有总计和小计
  5. 在您的过滤器中,取消选中 (blank)
  6. 更改您的字段以具有以下设置:
    • 在手动过滤器中包含新项目
    • 显示没有数据的项目

这将自动为您提供所有项目。如果您将项目添加到列表中,只需右键单击您的数据透视表并刷新。

【讨论】:

  • 我一定做错了什么,因为我所看到的只是我开始使用的完全相同的信息,但它没有向我显示可能的组合。如果我将所有信息都放在“行”部分,那将如何提供所有“有序”组合或排列。
  • @Adam 您是否为所有字段打开了“显示没有数据的项目”? (您需要单独完成每个字段)
  • 谢谢@Chronocidal 这行得通!我相信这会比 excel 更好,因为客户可以添加额外的行和列,并且枢轴会更新。
【解决方案2】:

我只回答这部分:

一种解释如何增加或减少一列的方法

根据您的前 3 列“Site-Product-Type”,每列中有“2-3-5”项。将原始公式分成 3 行:

=IFERROR( INDEX($A:$A,IF(INT((ROW(1:1)-1)/(((COUNTA(B:B)-1)*((COUNTA(C:C)-1)))))+2>COUNTA(A:A),-1,INT((ROW(1:1)-1)/(((COUNTA(B:B)-1)*((COUNTA(C:C)-1)))))+2))

&" "& INDEX(B:B,MOD(INT((ROW(1:1)-1)/(COUNTA(C:C)-1)),(COUNTA(B:B)-1))+2)

&" "& INDEX(C:C,MOD((ROW(1:1)-1),(COUNTA(C:C)-1))+2),"") 

因此每个“站点”项目需要重复 3 * 5 次(15 次 - 例如 MAR 和 BEL)。 [第 1 行]

对于每个“站点”项,每个“产品”项需要重复 5 次(例如 UV、溶剂、水)[第 2 行]

并且对于每个“产品”项,每个“类型”项都需要重复 1 次(例如 2,5,8,13,18 )[第 3 行]

所以输出的总数 = 2*3*5 = 30 。 [这部分由公式的iferror(... , "")执行(30(或3*2*5)行后没有输出)]

在引用的公式中..它是通过关联行号(作为计数器,使用row()),counta()(计算每列中的元素数,mod()(获取重复) 和index()(根据处理的行号调用每个列项 - 更多信息:link 中的最后一个公式)。


将其分为 5 列,“站点-产品-类型-劳动-小时”:

获取每列的元素/项目数。 (你应该得到 2-3-5-5-6 )

所以总输出数 = 2*3*5*5*6 = 900。

每个“站点”项需要重复 3*5*5*6 次

对于每个“Site”项,每个“Product”项需要重复5*5*6次

对于每个“Product”项,每个“Type”项需要重复5*6次

对于每个“Type”项,每个“Labor”项需要重复6次

对于每个“Labor”项目,每个“Hours”项目需要重复1次


如果您删除一列.. 只需使用相同的模式。

我希望你明白逻辑。 ( :

【讨论】:

  • 是的,所以我已经知道如何计算有多少答案,问题是我想查看所有答案。
  • 是的,所以你需要一种方法来“调用”每一行的每个元素,就像 index 和模数 (MOD()) 所做的那样...... |如果您要不断添加/删除列,我的建议是重建公式。或者分阶段进行(使用额外的列)。
  • 您可以分享您尝试过的公式/示例文件+公式......我们可以从那里提供帮助......(:
  • 很高兴您“了解如何计算出有多少个答案”.. 我主要关心的是.. 弄清楚“3*5*5*6 次 .. 5* 5*6 次.. 5*6 次..”部分算法在公式内部实现。 ||恕我直言,您引用的公式很容易使用..但不容易编辑。这就是为什么我建议重建它(一旦你得到了模式)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
相关资源
最近更新 更多