在没有Sumproduct的Excel中排名(ifs)| VBA与功能

时间:2014-06-27 23:16:30

标签: excel vba excel-vba excel-formula excel-2013

我有一个问题,我正在尝试做RankIfs和Rank,同时返回唯一的排名而不是重复,而所有这些都没有排序我的数据。我将提供一份我目前正在下面的样本。我很乐意无论如何都可以解决这个问题,无论是VBA还是Formula's。但是我目前有许多数据表正在使用Sumproducts,我现在正试图避免使用该功能,因为它非常繁重。

Category   |  Total Value   |  Rank    |  Unique ID
lkj        |  494.1         |  2       |  lkj2
asdf       |  679.6         |  1       |  asdf1
lkj        |  494.1         |  2       |  lkj2
tdd        |  110.5         |  2       |  tdd2
tdd        |  120.5         |  1       |  tdd1
lkj        |  800.5         |  1       |  lkj1

    A             B                C          D
1   Category   |  Total Value   |  Rank    |  Unique ID
2   FX         |  494.1         |  2       |  FX2
3   FX         |  679.6         |  1       |  FX1
4   FX         |  494.1         |  2       |  FX2
5   FX         |  110.5         |  4       |  FX4

所以第一个例子是我尝试做RankIfs的地方。总值的列引用原始数据表。我知道我可以将排名和总价值合并为一列,但是例如我认为更容易解释我所指的是将所有内容都列出来。

第二个问题是,在我的第二个表格中,我遇到的问题是有时总价值将完全相同,我只需要将其中一个FX排在第3位。我现在正在做的事情是回去在手动调整这个,并且有很多数据表我必须做的排名,你可以想象这可能会非常繁重。我觉得可以实现自动化的许多手工工作并不困难。

无论如何,我无法想到在函数或VBA中解决这个问题。我唯一能想到的是将所有内容排序,然后按照下面的示例排序。

    A             B                C          D
1   Category   |  Total Value   |  Rank    |  Unique ID
2   FX         |  679.6         |  1       |  FX1
3   FX         |  494.1         |  2       |  FX2
4   FX         |  494.1         |  2       |  FX2     
5   FX         |  110.5         |  4       |  FX4

然后有一个公式或vba解决方案,它看着D2并说如果上面的单元格等于D2然后给我C1 + 1,否则给我C1。这一切都很重要,一旦它循环并得到D4,因为D3确实等于D4。这个解决方案对我来说似乎非常陈旧,但是如果没有更好的方法可以做到这一点,那么我只会记录宏。

非常感谢任何见解。

谢谢,

1 个答案:

答案 0 :(得分:0)

如果您正在寻找从排名中获取唯一值的方法,则以下函数将执行此操作:

=RANK(B2,$B$2:$B$10)+COUNTIF($B$2:B2,B2)-1

由于countif只计算其上方行中的值,因此使用给定值找到的第一个值将具有更高的排名。

Source

我真的不明白你对排名的看法,如果是的话,我不会试着回答这个问题。