7列中的4列的所有组合,使用excel的总计

问题描述 投票:-3回答:1

我有7列可供选择,我需要选择其中4列并为每行生成总计。我还需要4的每个组合,这意味着我将有35个新列,每行显示每个组合的总数。我需要这个代码,如果它只能使用Excel完成。这是一个列的图像,灰色的是我正在谈论的7列。我对Excel的了解非常有限。如果重要的话,有超过1,500行。

Excel image of my problem

excel-formula
1个回答
1
投票

多步骤方法将使用一些辅助行。可能有一个更优雅的公式可以做到这一点,以及VBA中的更多光滑选项,但这只是一个公式的方法。

Step 1 - Generate List of Column Combination

要生成列表,需要在数据顶部插入4个辅助行。标题行的上方或下方。这4行代表您要选择的列号。为了让我的数学更简单,我只假设第一列为1,最后一列为7。这些数字将在以后转换为电子表格中的列之间。为了这个例子,第一个组合和将出现在列AO中,第一个组合行将出现在第1行。第一个组合将是硬编码的,它将为剩余的列组合播种模式。在相应的单元格中输入以下值:

AO1 = 1
AO2 = 2
AO3 = 3
AO4 = 4

在相邻列中,将放置公式并将其复制到右侧。它将自动将底部值增加1,直到达到其最大值,此时上面一行中的值将增加1,并且当前值将比上面的单元格多1。这将产生一种模式,该模式在到达列BW时覆盖所有35种组合。将下面的公式放在适当的单元格中并复制到右侧:

AP1
=IF(AO2=5,AO1+1,AO1)

AP2
=IF(AO2=5,AP1+1,IF(AO3=6,AO2+1,AO2))

AP3
=IF(AO3=6,AP2+1,IF(AO4=7,AO3+1,AO3))

AP4
=IF(AO4=7,AP3+1,AO4+1)

Step2 - Sum The Appropriate Columns

我希望使用某种类型的数组类型操作来读取上面的列参考数字,但我无法理解它。由于只需要担心4个条目,我只需在SUM函数中手动添加每个引用。现在需要注意的重要一点是,我们将在覆盖列范围的13列上使用INDEX函数,以便将我们在上面计算出的索引号转换为可以获取每隔一行的数字,即数字计算出的值将乘以2,然后减去1。这意味着第一列组合的1,2,3,4变为1,3,5,7。您可以在以下公式中看到这一点。将以下公式放在适当的单元格中,并根据需要向下和向右复制。

AO5
=INDEX($AB5:$AN5,AO$1*2-1)+INDEX($AB5:$AN5,AO$2*2-1)+INDEX($AB5:$AN5,AO$3*2-1)+INDEX($AB5:$AN5,AO$4*2-1)

请注意$会锁定行或列引用,并防止它们在复制公式时更改。

现在,您可能需要调整单元格引用以匹配工作表。

proof of concept

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