如何在 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   | 16.0  | 0     | -16.0 | 3
Acc GP  | 16.0  | 0     | -16.0 | 2
Overtime| 0.00  | -2.00 | -2.0  | 1

nameposs(可能)和curr(当前)正在从电子表格中的其他单元格中提取。 diff只是curr减去poss.重量是赋予每个项目的相对权重。

我想做的是:首先,按diff升序排序。然后,按weight降序排序。因此,例如,无论权重如何,diff为 -16 的行将始终排序在diff较低(我猜实际上在技术上是更高的差异)的行之上,并且具有相同diff值的行的位置由它们的权重决定。我希望这是动态完成的,以便当确定nameposscurr的其他单元格之一发生更改时,排序会自动更改。然后我想在电子表格的单独部分中显示所有这些,尽管我确信我可以通过 VLOOKUP 和/或 INDEX 解决这个问题 - 数据的实际排序是让我发疯的原因。

此Worksheet_Change事件宏将重新处理源自 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。命名范围可能更好。它肯定会有助于清除任何旧条目,这是您的下一步。我无法提出如何清除旧条目的方法,因为其细节可能会根据确切位置而变化。

最新更新