如果列没有任何大于 1 的值,则退出

If column doesn't have any value greater than 1 then exit

提问人:M Muaz 提问时间:11/8/2021 最后编辑:PᴇʜM Muaz 更新时间:11/9/2021 访问量:95

问:

我正在尝试创建一个执行以下操作的 IF 语句:

  1. 突出显示(红色)值大于 1 且小于 26 的任何内容,然后继续执行宏的其余部分并执行其他操作(我已经成功完成了)。
  2. 如果值超过 25,则用红色突出显示,生成一个 messageBox,然后退出子(我已经成功完成了)。
  3. 如果所有行都是 = 1,则什么都不做并退出 sub(我正在努力)。

enter image description here

For Each C In Range("B2:B25000").Cells
  If C.Value > 1 And C.Value < 26 Then
    firstValue = C.Value
    firstAddress = C.Address
    Exit For
    
    If Not (C.Value > 1 And C.Value < 26) Then Exit Sub 'No
  
    ElseIf C.Value > 25 Then
    C.Interior.Color = VBA.ColorConstants.vbRed
    MsgBox "Too big!"
    Exit Sub
  End If
Next

C.Interior.Color = VBA.ColorConstants.vbRed 'if greater than 1 & less than 26 then Color = red

'remaining of the macro goes here

End Sub
Excel VBA

评论

0赞 BigBen 11/8/2021
提示:使用和(数一),并检查它们是否相等。或者只是为了.WorksheetFunction.CountAWorksheetFunction.CountIfCountif<>1
0赞 Siddharth Rout 11/8/2021
此外,第 1 点和第 2 点可以通过条件格式进行处理。不需要 VBA?
0赞 M Muaz 11/8/2021
@SiddharthRout看起来是这样,但就我而言,我需要一个 VBA,因为它是突出显示红色的,然后做许多其他事情
0赞 Siddharth Rout 11/8/2021
刚刚看到了你的编辑。既然你已经管理了前 2 点,你看到上面@BigBen建议了吗?
0赞 Siddharth Rout 11/8/2021
检查第 3 个条件的另一种方法是相关工作表在哪里If ws.evaluate("AND(EXACT(B2:B25000,B2),(B2=1))") = True Thenws

答:

1赞 CDP1802 11/9/2021 #1

使用 if 语句设置逻辑标志,然后决定是退出 sub 还是继续。

Option Explicit

Sub test()

    Dim ws As Worksheet, c As Range, lastrow As Long
    Dim bAllOnes As Boolean, bTooBig As Boolean
    
    Set ws = Sheet1
    bAllOnes = True
    bTooBig = False
    
    lastrow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    For Each c In ws.Range("B2:B" & lastrow).Cells
        If Val(c.Value) > 1 Then
            bAllOnes = False
            c.Interior.Color = VBA.ColorConstants.vbRed
            If c.Value > 25 Then
                 bTooBig = True
            End If
        ElseIf Val(c.Value) < 1 Then
            bAllOnes = False
        End If
    Next
    
    If bTooBig Then
        MsgBox "Too big!", vbCritical
        Exit Sub
    ElseIf bAllOnes Then
        MsgBox "All 1's!", vbCritical
        Exit Sub
    Else
        MsgBox "Continueing"
    End If
    
End Sub
0赞 M Muaz 11/9/2021 #2

我替换了这个If Not (C.Value > 1 And C.Value < 26) Then Exit Sub

有了这个ElseIf Application.WorksheetFunction.max(Range("b:b")) = 1 Then Exit Sub

而且效果很好

评论

1赞 CDP1802 11/9/2021
请注意,如果一个或多个值小于 1,即零,这也将退出。也许Application.WorksheetFunction.max(Range("b:b")) = 1 and Application.WorksheetFunction.min(Range("b:b")) = 1 then Exit Sub
0赞 M Muaz 11/10/2021
是的,你是对的,但数据永远不会包含 0 个值@CDP1802