Excel:如何使用公式基于列对数据进行排序

时间:2018-06-18 05:29:19

标签: excel excel-formula

我想使用公式基于“销售”栏对屏幕截图中的数据进行排序,以便实现“B”。 sorting data

2 个答案:

答案 0 :(得分:1)

突出显示您的数据:点击数据标签 - >点击排序 - >将排序设置为销售额 - >对选择值进行排序 - >将Order设置为最大到最小

或使用宏(上面记录):

    Range("A1:C5").Select
    Range("C5").Activate
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C5"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:C5")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

答案 1 :(得分:0)

我确实建议仅使用VBA宏,因为在添加需要的值时更容易扩展其范围。但是,对于任何想知道是否完全没有任何VBA脚本的人:的确是(通过添加两个或三个其他列)。

  | K         | L           | M      | N     | O    | P
--+-----------+-------------+--------+-------+------+----
1 | Unsorted: | Customer Id | Name   | Sales | temp | KEY
2 |           | 222         | John   | 30    | †¹   | 1
3 |           | 333         | Frank  | 90    | †¹   | 2
4 |           | 350         | Joe    | 30    | †¹   | 3
5 |           | 451         | Daniel | 60    | †¹   | 4

†¹:单元格O2中的公式为=N2+P2/1000000;在单元格O3中是=N3+P3/1000000;等

  | Q       | R   | S           | T    | U    
--+---------+-----+-------------+------+------
1 | Sorted: | KEY | Customer Id | Name | Sales
2 |         | †²  | †³          | †⁴   | †⁵
3 |         | †²  | †³          | †⁴   | †⁵
4 |         | †²  | †³          | †⁴   | †⁵
5 |         | †²  | †³          | †⁴   | †⁵

†²:单元格R2中的公式为=VLOOKUP(LARGE(O2:O5;P2);O2:P5;2;FALSE);在单元格R3中是=VLOOKUP(LARGE(O2:O5;P3);O2:P5;2;FALSE);等
†³:单元格S2中的公式为=INDEX(L2:L5;R2);在单元格S3中是=INDEX(L2:L5;R3);等
†⁴:单元格T2中的公式为=INDEX(M2:M5;R2);在单元格T3中是=INDEX(M2:M5;R3);等
†⁵:单元格U2中的公式为=INDEX(N2:N5;R2);,单元格U3中的公式为=INDEX(N2:N5;R3);等

一般说明:

在这种情况下,列LN包含我们要基于列N排序的未排序数据。 P列包含从1开始的后续整数,这些整数将在我们的公式中用作索引。

O包含一个临时值。此临时值与索引相结合使用,该索引除以一百万以区分要排序的列中的重复值(在这种情况下为N),因此我们要排序的每个值都是唯一的。如果我们要排序的列永远不会有任何重复的值,那么tempO就没有必要了,可以对公式进行一些修改以解决这个问题。

在这种情况下,temp / O列将包含以下值:

O
----
temp
30.000001
90.000002
30.000003
60.000004

S将使用垂直查找。它首先在k-1 / temp列中获得第O个最大值,其中P列用于此值k。然后它将在k-1矩阵中寻找O列的O2:P6列的第;2;FALSE)个最大值,并获取其行,然后将第二列用于结果(因此VLOOKUP公式中的KEY。现在,我们对R / KEY列进行了排序。

然后我们将此L用作索引,以获取NS列中的相应值,并将排序后的值放入V至{{ 1}}。

如果您现在要修改N列中的值(例如,将60更改为160),那么这些列将根据公式自动进行排序。