怎么多条件排名?
这个问题我十年前遇到过,当时没有很好的解决办法,用了一些技巧勉强应付,现在终于有机会可以重新做了,于是写了这个答案。 先上图 这是当前国内电影票房前十的排行榜,从图中可以看到有两个问题:
1、 排名有重复的电影,比如《复仇者联盟》和《超人:钢铁之躯》;
2、 排名顺序不是按照时间排的,如《寻龙诀》比《大圣归来》排得高。 对于第一个问题比较简单,因为数据源不同,有些是站内数据,有些是站外数据和票库数据,所以会有一些误差,在精度允许的情况下,我们可以直接删除重复的数据(这里为了便于演示,只删除了前三名的重复记录)。
对于第二个问题就有点纠结了,因为要满足多个条件的排序,只能使用LISTRANK函数计算每一个数据的列和行数值,然后倒序排列,但这样得到的排序结果并没有考虑时间因素,所以并不能反映影片真实的上映时间先后顺序。如果一定要得到时间的排序结果,就只能添加一个时间字段进行区分了。
下面给出两种方案: 如果只要求结果精准,不要求在排序的过程中显示计算过程(即不需要让计算机展示如何得到最终结果的步骤),那么可以直接用IF函数判断,并且根据判断的结果对目标数据进行分列处理,最终实现按多重条件排序的目的。 以上面截图为例(假定数据源中已经有时间列了),我们在C列之前新建一列,输入公式 IF(AND(B2="复仇者联盟",C2="钢铁之躯"),A2+1,"") 然后填充整列,即可将同时符合两个条件的数据进行加一处理,这样在排序的时候就能保证先排序完符合条件的最后排完不符合的。 注意!这里的AND必须大写,否则会返回错误值。
另外,在使用IF函数的过程中需要注意的是,由于语言逻辑的关系,“且”的条件需要写在AND的括号里面。 这种只对原始数据做简单的计算和处理的方法,其效率肯定是不高的,如果数据量很大,建议在Excel的基础上使用VBA写一个通用的解决方案。