次のVBAコードを記述して、列「O」の値に基づいて、列「P」に「保留中」、「期限なし」、「-」を自動的に入力します。
タスクが完了した場合、ユーザーは手動で列「P」に「完了」を入力する必要があります。これは自動入力されません。
列「P」がすでに「完了」と表示されている場合は、最後のルール(列Oが「はい」の場合は「列Pに保留中」と入力)がスキップされることを確認する必要があります。
誰か助けてくれませんか?かなり緊急。ありがとう!
Sub info()
Dim i As Long
For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
If ActiveSheet.Cells(i, 15) = "No" Then
ActiveSheet.Range("P" & i) = "Not due"
End If
Next i
For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
If ActiveSheet.Cells(i, 15) = "-" Then
ActiveSheet.Range("P" & i) = "-"
End If
Next i
**For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
If ActiveSheet.Cells(i, 15) = "Yes" Then
ActiveSheet.Range("P" & i) = "Pending"
End If**
Next i
End Sub
これを行うには、IFチェックを追加します。また、3ループから1ループに移行してコードを最適化したため、コードは3倍高速になり、3つのチェックを1つの選択ケースに配置して読みやすくしました。
コードは次のようになります。
Sub info()
Dim i As Long
For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
Select case ActiveSheet.Cells(i, 15)
Case is "No"
ActiveSheet.Range("P" & i) = "Not due"
Case is "-"
ActiveSheet.Range("P" & i) = "-"
Case is "Yes"
If not ActiveSheet.Range("P" & i) = "Complete" then
ActiveSheet.Range("P" & i) = "Pending"
End if
End Select
Next i
End Sub
このVBAコードも試すことができます。
Private Sub CommandButton3_Click()
Dim rng As Range
Set rng = Range("P1:P3")
For Each r In rng
v = r.Value
If v = "No" Then
r.Offset(5, 1).Value = "Not Due"
End If
If v = "-" Then
r.Offset(5, 1).Value = "- -"
End If
If v = "Yes" Then
If r.Offset(5, 1).Value = "Complete" Then Exit Sub
r.Offset(5, 1).Value = "Pending"
End If
Next r
End Sub
NB:入力範囲いいえ、-およびはいはP1です:P3。
ファーストクリックにより、セルO6:O8に期限なし、-、および保留中が入力されます。
セルO8にCompleteと書き込むとすぐに、このコードはセルO8をスキップします。
注、入力範囲とセルオフセットの位置を変更できます。
これがお役に立てば幸いです。
私がテストした後、このソリューションを投稿したことを忘れないでください。誰かがこれに同意しない場合は、反対票を投じる前に理由を書いてください。