在Excel中动态重新排序编号列表

时间:2013-05-13 13:14:23

标签: excel excel-formula

在Excel中,有没有办法动态更新任务列表的优先级?例如,如果您有一个优先级为1,5,3,2,4的列,并且用户添加了一个带有新任务的新行并为其指定了优先级1,则该列表将更新为2,6,4,3 ,5,1?

或者还有其他(更好的?)方式吗?我宁愿不必对列表进行排序,然后在每次添加或删除新任务时手动更改编号。另外,我不认为使用电子表格的人会这样做。

2 个答案:

答案 0 :(得分:1)

我会倾向于VBA答案,但我找到了公式和添加列,以便在没有宏的情况下完成所需的操作。 见下图

要保持此功能从一个添加到下一个添加,在添加每个新任务后,您必须在E:F列中复制已排序的任务列表,将值粘贴到A3中,并删除B2和C2中的值。然后你需要在列C:F的底部拖动你的公式,因为你的列表变长了。

这是我在单元格公式中可以看到的最大问题,更新需要复制粘贴删除。

Dynamically Change a numbered list based on a Set Priority Formulas Dynamically Change a numbered list based on a Set Priority Results

答案 1 :(得分:0)

查看以下代码。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngPriorityList As Range
Dim lNewValue As Long
Dim myCell As Range

    If IsNumeric(Target.Value) Then 'Only run if the a number was entered

        Set rngPriorityList = ThisWorkbook.Names("priority").RefersToRange 'the named range for the task list

        If Not Intersect(Target, rngPriorityList) Is Nothing Then 'Only run the following in the cell being updated was in the priority list range
            For Each myCell In rngPriorityList.Cells 'Loop through the priority list range
                If myCell.Value = Target.Value _
                And myCell.Address <> Target.Address Then 'Finding cells with the same value, excluding the cell being changes
                    myCell.Value = myCell.Value + 1 'Increment the prioriry by 1
                End If
            Next myCell
        End If
    End If
End Sub