在Excel中计算多数值
我正在使用多数判断投票系统,需要计算Excel中所谓的“多数值”,所以我可以对候选人进行排名。
对于不熟悉多数判决的人,我会尽量简明扼要地解释。 在下面的例子中,假定一个系统,选民为每个候选人分配四个分数中的一个:0,1,2或3,其中0是最差的,3是最好的。 我将从解释“多数级”开始,这是计算多数价值所需要的。
多数级别 :这实质上是一个特定候选人的所有选民分数的“中位数”。 如果有一个奇数的选民,这只是中位数,可以计算MEDIAN(C27:F27)
。 如果有偶数的选民,那么这是两个中间价值中较低的一个。 所以如果有四个选民,候选人得到{0,1,2,3}的分数,那么大多数成绩就是1(不是1.5)。 这可以计算为FLOOR(MEDIAN(C27:F27), 1)
。 然而,如果候选人获得了{0,0,2,2}的分数,那么大多数等级是0(不是1),在这种情况下, FLOOR(MEDIAN(C27:F27), 1)
将失败。 所以,为了计算大多数级别,我认为以下数组公式适用于所有情况: MAX(IF(C27:F27<=MEDIAN(C27:F27), C27:F27))
。
正如你所想象的,在大多数年级,通常会有联系,许多候选人具有相同的多数等级。 通过计算“多数价值”来打破关系。
多数价值 :多数价值是大多数等级的顺序,如果您在每个步骤中放弃一个与他们以前的大多数等级相匹配的得分,那么这个等级就会被计算出来。 举例来说,假设五名选民给予这些候选人这些得分:{0,1,1,2,3}
- 第一多数等级:{0,1,1,2,3} = 1
- 第二多数等级:{0,1,2,3} = 1
- 第三成绩:{0,2,3} = 2
- 第四多数等级:{0,3} = 0
- 第五个成绩:{3} = 3
多数价值将是1.1203,并且可以sorting以产生有序的候选人名单。
为了简化事情,我会知道有多less选民,并可以为每个大多数成绩设立一个专栏,然后连接在一起。
我想我需要的是找出如何计算一个数组,作为另一个数组函数的input,减去与计算值相匹配的单个元素。
这可以用公式而不是VBA来完成吗?
我能够为这个问题做一个非VBA的解决scheme。 以下是如何做到这一点:
首先,对分数进行sorting。 然后,我们可以使用公式build立基于模式的多数值。
例如,对于你的分数列表:{0,1,1,2,3}因为这个列表是sorting的,所以可以通过根据元素在数组中的位置连接元素来find多数值(这是sorting真正帮助我们的地方)。 在这种情况下,模式看起来像这样(数字表示arrays中的位置):3,2,4,1,5
元素3:1
元素2:1
元素4:2
元素1:0
元素5:3
看到一个模式? 这就像在线上的智商testing之一。 从第三个元素开始,出现一个模式:我们要么减去要么加1到出现两个元素的元素之前。 当元素的总数是奇数或偶数时,该模式反转。
要确定前两个元素,我们必须做一些预先计算。 第一个元素就在中间。 如果分数是偶数,那么它就是中等减1分。 第二个元素是第一个元素的+1或-1,取决于分数是奇数还是偶数。 然后从第三个元素开始,我们的模式开始。 我们看看后面的两个元素,它是+1还是-1,这取决于数据集是奇数还是偶数。
比方说B4:B13是你的分数。 我们首先确定这个集合中是否有奇数或偶数的元素:
单元格D2: =IF(MOD(COUNT($B$4:$B$13),2)=0,1,-1)
然后我们开始build立我们的索引:
单元格C4: =CEILING(COUNT($B$4:$B$13)/2,1)
这给了我们中间元素索引。 这将是多数价值中的第一位。
单元格C5: =C4+$D$2
根据值的数目是否奇数偶数加到C4。
单元格C6: =C4-$D$2
C5的逆转。 这给了我们三个完整的索引来开始我们的模式。
C7: =C5+$D$2
C8: =C6-$D$2
现在我们通过整个数据集继续这个模式。
然后我们可以把所得到的索引插入一个INDEX函数中。
D4看起来像这样: =INDEX($B$4:$B$13,C4,1)
拖下这个公式。 这给了我们自己的分数,我们需要为了我们的多数价值的顺序。
最后,我们将所有这些连接在一起并转换为另一个单元格中的值以获得我们的多数值:
D14: =VALUE(D4&"."&D5&D6&D7&D8&D9&D10&D11&D12&D13)
我已经用我用来解决这个问题的Excel工作表分享了一个文件夹。 https://drive.google.com/folderview?id=0BwOgSMhqS_zHb3pwRUVsVEZSNlE&usp=sharing
我们可以进一步将列C和D合并为一个公式。 为了清晰,我将它们分开。
更新:
你提到了你所说的5票制的一个实际例子,因为你指定了你知道选民的数目。 我更新了上面链接的驱动器中的Excel工作表。
解:
=VALUE(INDEX(G$4:G$8,$P$4,1)&"."&INDEX(G$4:G$8,$P$5,1)&INDEX(G$4:G$8,$P$6,1))&INDEX(G$4:G$8,$P$7,1)&INDEX(G$4:G$8,$P$8,1)
G4:G8是候选人的一组sorting分数。
P4是=CEILING(COUNT(G$4:G$8)/2,1)
而P5是=P4+$P$2
而P6是=P4-$P$2
而P7是=P5+$P$2
而P8是=P6-$P$2
并且P2 =IF(MOD(COUNT($G$4:$G$8),2)=0,1,-1)
希望这个更清楚。
干杯,
ž