答案 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)
;等
一般说明:
在这种情况下,列L
至N
包含我们要基于列N
排序的未排序数据。 P
列包含从1
开始的后续整数,这些整数将在我们的公式中用作索引。
列O
包含一个临时值。此临时值与索引相结合使用,该索引除以一百万以区分要排序的列中的重复值(在这种情况下为N
),因此我们要排序的每个值都是唯一的。如果我们要排序的列永远不会有任何重复的值,那么temp
列O
就没有必要了,可以对公式进行一些修改以解决这个问题。
在这种情况下,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
用作索引,以获取N
至S
列中的相应值,并将排序后的值放入V
至{{ 1}}。
如果您现在要修改N
列中的值(例如,将60
更改为160
),那么这些列将根据公式自动进行排序。