如何在excel中的五列中列出所有可能的值组合?

时间:2019-06-11 18:45:57

标签: excel excel-formula

已经有一个问题和答案,“如何在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?

2 个答案:

答案 0 :(得分:0)

我只回答这部分:

  

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

根据您的前3列“网站产品类型”,每个列中有“ 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()(以计算每一列{{1}中的元素数)来完成}(以获得重复)和mod()(根据处理的行号调用每个列项目-更多信息:此link中的最后一个公式)。


将其放在5列“站点产品类型劳动时间”中:

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

因此,输出总数= 2 * 3 * 5 * 5 * 6 = 900。

每个“网站”项目都需要重复3 * 5 * 5 * 6次

对于每个“网站”项目,每个“产品”项目都需要重复5 * 5 * 6次

对于每个“产品”项目,每个“类型”项目都需要重复5 * 6次

对于每个“类型”项目,每个“劳动”项目都需要重复6次

对于每个“劳动”项目,每个“小时”项目都需要重复1次


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

希望您能理解。 (:

答案 1 :(得分:0)

这是一种无需公式的方式

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

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