Excel中的密集排名


0

如何在Excel中从SQL获得等效的密集排名?

我有未排序的数据(数据的数量每周不同),重复项应具有相同的等级,即

number    rank
6          1
12         2
23         3
6          1
6          1

我找到了这个解决方案

=SUMPRODUCT( (FREQUENCY($A$1:$A$10, $A$1:$A$10) > 0) * (A1 >= $A$1:$A$11) )

Note the extra row required in the second expression. 

但我无法使用它,因为我不知道我将拥有多少个条目,而这个假设我知道先验数据集。


排名总是需要事先了解整个数据集。为了简化公式的输入,您可以使用动态范围
朱塔什(MátéJuhász)

您可以使用Indirect($ G $ 1)并在G1中写入$ A $ 1:$ A $ 10并在每次范围更改时更改G1的内容,对另一个单元格的第二个范围执行相同的操作
yass

Answers:


1

采用:

INDEX(A:A,MATCH(1E+99,A:A))

设置范围的上限。这将找到具有编号的最后一个单元格,并将其设置为范围内的最后一个单元格。如果该列中包含文字,请使用"ZZZ"代替1E+99

对于加一,我们只需向MATCH中加一:

INDEX(A:A,MATCH(1E+99,A:A)+1))

因此,整个公式将是:

=SUMPRODUCT( (FREQUENCY($A$1:INDEX(A:A,MATCH(1E+99,A:A)), $A$1:INDEX(A:A,MATCH(1E+99,A:A))) > 0) * (A1 >= $A$1:INDEX(A:A,MATCH(1E+99,A:A)+1)) )

现在这是动态的,因为在A列中添加或删除了值,引用将相应地更改。

在此处输入图片说明


0

您可以使用以下公式:

=SUMPRODUCT((FREQUENCY(INDIRECT("$A$1:$A"&MAX((A:A<>"")*(ROW(A:A)))),INDIRECT("$A$1:$A"&MAX((A:A<>"")*(ROW(A:A)))))>0)*(A1>=INDIRECT("$A$1:$A"&(MAX((A:A<>"")*(ROW(A:A)))+1))))  

Array FormulaCtrl+ Shift+ Enter同时
MAX((A:A<>"")*(ROW(A:A))
计算在A列中的最后一个单元(给出了在A中的最后一个非空行)
间接将给数组引用(A1:A10)对应于持续由最大给定的非空行
MAX((A:A<>"")*(ROW(A:A)))+1 对于阵列A1:A11

我更喜欢为范围A1:A10定义名称Number,例如
A1:A11Numberplus

=SUMPRODUCT( (FREQUENCY(Number, Number) > 0) * (A1 >= Numberplus) )

在这种情况下,仅在名称管理器中仅更改两个名称的范围,您的公式将保持不变

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.