在 Excel 中,有没有办法动态更新任务列表的优先级?例如,如果您有一个优先级为 1、5、3、2、4 的列,并且用户添加了一个包含新任务的新行并为其分配了优先级 1,则列表将更新为 2、6、4、3 , 5, 1?
还是有其他(更好的?)方法可以做到这一点?我宁愿不必对列表进行排序,然后在每次添加或删除新任务时手动更改编号。另外,我认为使用电子表格的人不会这样做。
在 Excel 中,有没有办法动态更新任务列表的优先级?例如,如果您有一个优先级为 1、5、3、2、4 的列,并且用户添加了一个包含新任务的新行并为其分配了优先级 1,则列表将更新为 2、6、4、3 , 5, 1?
还是有其他(更好的?)方法可以做到这一点?我宁愿不必对列表进行排序,然后在每次添加或删除新任务时手动更改编号。另外,我认为使用电子表格的人不会这样做。
我倾向于 VBA 答案,但我发现公式和添加列可以在没有宏的情况下完成您需要的操作。见下图
为了使这项工作从一个添加到下一个,在添加每个新任务后,您必须将已排序的任务列表复制到 E:F 列中,将值粘贴到 A3 中,并删除 B2 和 C2 中的值。然后你需要将你的公式拖到 C:F 列的底部,因为你的列表变得更长了。
这是我在单元格公式中看到的最大问题,更新需要复制粘贴删除。
看看下面的代码。
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