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