根据excel中的位置排列多个文本列表

时间:2015-12-04 16:59:23

标签: excel

我有多个不同长度的列表,其中包含可能会或可能不会出现在所有列表中的项目。项目在列表中显示的越高,其排名越高。我一直试图找到一种方法来对所有列表的组合结果中的项目进行排名。这是一个例子

List 1   list 2   list 3
bob      jane     fred
fred     peter    jane
alan     fred     bob
steve             brian
                  julie

我认为排名列可能有助于提供值,所以它会是这样的:

Rankvalue  List 1   list 2   list 3
100        bob      jane     fred
80         fred     peter    jane
70         alan     fred     bob
60         steve             brian 
50                           julie

然后鲍勃会有100 + 70 = 170, 弗雷德将有100 + 80 + 70 = 250,(击败鲍勃并超过榜单)

excel中是否有一些功能允许我这样做?我正在看Vlookups和Ranks,但似乎没有什么能达到目标。我想这很常见,但我一直在四处寻找并找不到答案。 注意:我很乐意用任何语言编写这个函数,但excel似乎是组织列表最直接的方法。如果有人有Ruby,Python等解决方案,我很乐意看一下。 谢谢!

3 个答案:

答案 0 :(得分:2)

我重新调整了一些数据,然后很容易使用VLOOKUP和数据透视表。

  1. 按照我的截图(单元格A12:24)顺序将您的列表放在彼此之下。
  2. 在C列中输入这样的公式,以计算每个不同列表的顺序:=IF(A13<>A12,1,C12+1)
  3. 创建一个RankValue参考表(我的屏幕截图中为G1:H6),然后在新表的D列中输入此公式以获取值:=VLOOKUP(C13,$G$1:$H$6,2,0)
  4. 使用数据透视表对总RankValue求和。
  5. 这种方法的好处是您不必识别要为其计算值的名称列表 - 数据透视表为您执行此操作。

    enter image description here

答案 1 :(得分:2)

您可以使用Index() Match

enter image description here

上面的公式是:

=IFERROR(INDEX(A:A,MATCH(F2,B:B,0)),0)+IFERROR(INDEX(A:A,MATCH(F2,C:C,0)),0)+IFERROR(INDEX(A:A,MATCH(F2,D:D,0)),0)

更短的公式:

=SUMIF(B:B,F2,A:A)+SUMIF(C:C,F2,A:A)+SUMIF(D:D,F2,A:A)

要自动执行所有操作,您需要使用vba。

Sub boogie()
Dim lstrow&

With ActiveSheet
    ' add a title
    .Range("F1") = "List"
    .Range("G1") = "Rank"

    'Loop through columns of data and paste into one column
    For i = 2 To 4
        .Range(.Cells(2, i), .Cells(2, i).End(xlDown)).Copy .Cells(.Rows.Count, "F").End(xlUp).Offset(1)
    Next i

    'Remove Duplicates
    lstrow = .Range("F1").End(xlDown).Row
    With .Range("F1:F" & lstrow)
        .Value = .Value
        .RemoveDuplicates Columns:=1, Header:=xlYes
    End With

    'Add formula and copy down
    lstrow = .Range("F1").End(xlDown).Row
    .Range("G2").Formula = _
         "=SUMIF(B:B,F2,A:A)+SUMIF(C:C,F2,A:A)+SUMIF(D:D,F2,A:A)"
    .Range("G2:G" & lstrow).FillDown
    .Calculate

    'sort
    Columns("F:G").Sort key1:=Range("G2"), _
      order1:=xlDescending, Header:=xlYes
End With

End Sub

答案 2 :(得分:0)

同样为了在这里应用SUMIF,可以通过Record Macro实现的替代方案是“解开”&#39;详细here并使用,在D2中扩展结果表:

 =SUMIF(C:C,C2,A:A)  

将ColumnD放大到最小,复制,粘贴特殊...,顶部的值,转换为范围,然后根据值列删除重复项。