Visual Basic - 如果单元格包含某个值则 VBA 代码跳过或忽略规则

Visual Basic - 如果单元格包含某个值则 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

您可以通过添加额外的 IF 检查来实现这一点。我还通过将 3 个循环改为 1 个循环来优化代码,因此代码速度提高了 3 倍,并将 3 个检查放入一个选择案例中,以便更容易阅读。

你的代码看起来应该是这样的:

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

您也可以尝试这个 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

注意: 您输入的范围-是的是 P1:P3。

第一次点击将填充单元格 O6:O8未到期--待办的

你一写完全的在单元格 O8 中,此代码将跳过单元格 O8。

笔记,您可以改变输入范围和单元格偏移位置。

希望这对你有帮助。

请记住,我是在测试过后才发布此解决方案的。如果有人不同意这一切,请在反对之前写下原因。

相关内容