Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel中编号列表的动态重新排序_Excel_Excel Formula - Fatal编程技术网

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

Excel中编号列表的动态重新排序,excel,excel-formula,Excel,Excel Formula,在Excel中,是否有方法动态更新任务列表的优先级?例如,如果您有一个优先级为1、5、3、2、4的列,并且用户添加了一个具有新任务的新行,并为其分配优先级为1,则列表将更新为2、6、4、3、5、1 还是有其他更好的方法?我不希望每次添加或删除新任务时都对列表进行排序,然后手动更改编号。另外,我不认为使用电子表格的人会这么做。看看下面的代码 Private Sub Worksheet_Change(ByVal Target As Range) Dim rngPriorityList As Rang

在Excel中,是否有方法动态更新任务列表的优先级?例如,如果您有一个优先级为1、5、3、2、4的列,并且用户添加了一个具有新任务的新行,并为其分配优先级为1,则列表将更新为2、6、4、3、5、1


还是有其他更好的方法?我不希望每次添加或删除新任务时都对列表进行排序,然后手动更改编号。另外,我不认为使用电子表格的人会这么做。

看看下面的代码

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
Private子工作表\u更改(ByVal目标作为范围)
Dim RNG优先级列表作为范围
变暗LNEW值为长
暗淡的迈塞尔山脉
如果是数字(Target.Value),则“仅在输入a数字时运行”
设置rngPriorityList=ThisWorkbook.Names(“priority”).ReferStorRange'任务列表的命名范围
如果Not Intersect(Target,rngPriorityList)为Nothing,则“仅在优先级列表范围内更新的单元格中运行以下命令”
对于rngPriorityList.Cells中的每个myCell,循环遍历优先级列表范围
如果myCell.Value=Target.Value_
和myCell.Address Target.Address Then'查找具有相同值的单元格,不包括正在更改的单元格
myCell.Value=myCell.Value+1'将优先级增加1
如果结束
下一个迈塞尔
如果结束
如果结束
端接头

我倾向于VBA答案,但我发现公式和添加列可以在没有宏的情况下满足您的需要。见下图

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

这是我能看到的最大的问题,用单元格内公式进行更新需要复制粘贴删除


为什么不做一个排序列表,然后在所需位置添加额外的行,并将新任务放在其中。。。它完全不需要编号。它确实可以工作,但在一个小列表(只有6项)上测试后,值会更新,然后Excel会挂起几秒钟,我才能做任何事情。这正常吗?您是否已将其添加到存储任务列表的工作表的vba代码中?您是否更新了它以获得rngPriorityList的正确范围?在更长的列表(例如多达30个)上,它会挂起Excel并在近一分钟内没有响应。不确定是代码中的什么还是我这边的什么。我以前从来没有挂过Excel,是我。我给了列一个名称(priority),所以即使它是空的,它也会遍历整个列的长度。另一方面,如果我删除一个priority值并使其为零(0),脚本会自动为所有内容编号。我对VBA不够了解,无法解决该问题。有什么建议吗?我想这可以在有公式的单元格中完成,但复制是我想避免的事情。使用此工具的人不会执行所有这些步骤,也不会按照指示操作。他们想输入,保存,然后完成。(被宠坏了!)@scheballs+1用于此替代方法-通常使用内置功能而不是
vba