如何在excel中动态排序一组加权数据,并在不同的单元格中显示?
以下是我正在使用的excel数据:如何在excel中动态排序一组加权数据,并在不同的单元格中显示?,excel,Excel,以下是我正在使用的excel数据: name | poss | curr | diff | weight Adv TV | 16.0 | 0 | -16.0 | 8 Tablets | 16.0 | 0 | -16.0 | 7 CRU GA | 16.0 | 0 | -16.0 | 6 D. L. | 5.0 | 0 | -5.0 | 5 Go Phone| 15.0 | 0 | -15.0 | 4 Close | 1
name | poss | curr | diff | weight
Adv TV | 16.0 | 0 | -16.0 | 8
Tablets | 16.0 | 0 | -16.0 | 7
CRU GA | 16.0 | 0 | -16.0 | 6
D. L. | 5.0 | 0 | -5.0 | 5
Go Phone| 15.0 | 0 | -15.0 | 4
Close | 16.0 | 0 | -16.0 | 3
Acc GP | 16.0 | 0 | -16.0 | 2
Overtime| 0.00 | -2.00 | -2.0 | 1
正在从电子表格中的其他单元格中提取name
、poss
(可能)和curr
(当前)diff
只是curr
减去poss
。重量是每个项目的相对重量
我想做的是:首先,按diff
升序排序。然后,按<代码>权重<代码>降序排序。因此,比如说,一个diff
值为-16的行总是排序在一个diff
值较低的行(我猜实际上技术上是一个较高的diff)之上,而不考虑权重,并且具有相同diff
值的行的位置是由它们的权重决定的。我希望动态执行此操作,以便当确定名称
、poss
或curr
的其他单元格之一发生更改时,排序自动更改。然后,我想在电子表格的一个单独部分中显示所有这些内容,尽管我确信我可以用VLOOKUP和/或INDEX解决这些问题-数据的实际排序让我发疯。此事件宏将使用源自A1的数据块,并从H3开始将值传输到新的数据块
右键单击工作表的“名称”选项卡,然后选择“查看代码”。当VBE打开时,将其粘贴到代码表中
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:C")) Is Nothing Then
On Error GoTo bm_Safe_Exit
Application.EnableEvents = False
With Cells(1, 1).CurrentRegion
.Cells.Sort Key1:=.Columns(4), Order1:=xlAscending, _
Key2:=.Columns(5), Order2:=xlDescending, _
Key3:=.Columns(1), Order3:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlYes
Range("H3").Resize(.Rows.Count, .Columns.Count) = .Cells.Value2
End With
End If
bm_Safe_Exit:
Application.EnableEvents = True
End Sub
你对目的地有点模糊,所以我随意使用了H3。命名范围可能更好。这肯定会有助于清除任何旧条目,这是您的下一步。我无法提出如何清除旧条目的方法,因为具体情况可能会因具体位置而异