web-dev-qa-db-ja.com

VisualBasic-セルに特定の値が含まれている場合にルールをスキップまたは無視するVBAコード

次の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
1
Lexi

これを行うには、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
2
LPChip

この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をスキップします。

注、入力範囲とセルオフセットの位置を変更できます。

これがお役に立てば幸いです。

私がテストした後、このソリューションを投稿したことを忘れないでください。誰かがこれに同意しない場合は、反対票を投じる前に理由を書いてください。

0
Rajesh S