Excel 根据单元格值隐藏行

Excel 根据单元格值隐藏行,excel,vba,Excel,Vba,如果多个单元格中的值等于0,我想隐藏一行。我已经尝试过这个VBA代码,它“有效”,但最后带0的行没有被隐藏 Sub Rehien_ausblenden() Dim i As Integer Application.ScreenUpdating = False Worksheets("Daten").Activate For i = 12 To 45 If Cells(i, 7).Value = 0 And Cells(i, 8)

如果多个单元格中的值等于0,我想隐藏一行。我已经尝试过这个VBA代码,它“有效”,但最后带0的行没有被隐藏

Sub Rehien_ausblenden()
    Dim i As Integer
    Application.ScreenUpdating = False
    Worksheets("Daten").Activate
    For i = 12 To 45
        If Cells(i, 7).Value = 0 And Cells(i, 8).Value = 0 _
        And Cells(i, 9).Value = 0 And Cells(i, 10).Value Then
          Rows(i).EntireRow.Hidden = True
        End If
    Next
        MsgBox ("Completed")
        Application.ScreenUpdating = True
 
End Sub
和单元格(i,10)。那么可能缺少值
=0
?请检查
和单元格(i,10).Value=0是否有效

此外,我建议进行以下修改:

  • 避免使用
    。激活
    并使用
    With
    语句(您可能会从阅读中受益) )
  • 使用
    Long
    而不是
    Integer
    :在VBA()中使用
    Integer
    没有任何好处,但是使用
    Integer
    进行行计数很容易出错,因为Excel的行数超过了
    Integer
    所能处理的行数
请注意,您的代码只隐藏行,但从不取消隐藏任何内容。因此,如果多次运行此命令,任何隐藏行都将始终保持隐藏状态,即使
if
语句不再为真

Sub Rehien_ausblenden()
    Application.ScreenUpdating = False

    With ThisWorkbook.Worksheets("Daten")
        Dim i As Long
        For i = 12 To 45
            If .Cells(i, 7).Value = 0 And .Cells(i, 8).Value = 0 _
               And .Cells(i, 9).Value = 0 And .Cells(i, 10).Value = 0 Then
                .Rows(i).EntireRow.Hidden = True
            End If
        Next i
    End With

    MsgBox "Completed"
    Application.ScreenUpdating = True
End Sub
和单元格(i,10)。那么可能缺少值
=0
?请检查
和单元格(i,10).Value=0是否有效

此外,我建议进行以下修改:

  • 避免使用
    。激活
    并使用
    With
    语句(您可能会从阅读中受益) )
  • 使用
    Long
    而不是
    Integer
    :在VBA()中使用
    Integer
    没有任何好处,但是使用
    Integer
    进行行计数很容易出错,因为Excel的行数超过了
    Integer
    所能处理的行数
请注意,您的代码只隐藏行,但从不取消隐藏任何内容。因此,如果多次运行此命令,任何隐藏行都将始终保持隐藏状态,即使
if
语句不再为真

Sub Rehien_ausblenden()
    Application.ScreenUpdating = False

    With ThisWorkbook.Worksheets("Daten")
        Dim i As Long
        For i = 12 To 45
            If .Cells(i, 7).Value = 0 And .Cells(i, 8).Value = 0 _
               And .Cells(i, 9).Value = 0 And .Cells(i, 10).Value = 0 Then
                .Rows(i).EntireRow.Hidden = True
            End If
        Next i
    End With

    MsgBox "Completed"
    Application.ScreenUpdating = True
End Sub

正如Ren所提到的,您确实需要按如下方式更正代码:

        If Cells(i, 7).Value = 0 And Cells(i, 8).Value = 0 _
        And Cells(i, 9).Value = 0 And Cells(i, 10).Value = 0 Then
(在第10列的单元格中添加
=0


此外,我想通知您,不在单元格中填充值也会导致单元格值为零:在我的例子中,我只在第12行中填充了值0,其余的都是空的,但从12到45的所有行都是隐藏的。

如任所述,您确实需要按如下方式更正代码:

        If Cells(i, 7).Value = 0 And Cells(i, 8).Value = 0 _
        And Cells(i, 9).Value = 0 And Cells(i, 10).Value = 0 Then
(在第10列的单元格中添加
=0

此外,我想通知您,不在单元格中填充值也会导致单元格值为零:在我的例子中,我只在第12行中填充了值0,其余的都是空的,但从12到45的所有行都是隐藏的