【问题标题】:How to hide row based on cell value in last column of worksheet?如何根据工作表最后一列中的单元格值隐藏行?
【发布时间】:2019-02-11 13:28:49
【问题描述】:

我正在尝试创建一个宏,在其中搜索工作表的最后一列以查找值,如果在单元格中找到该值,则隐藏单元格的整行。我也在尝试为此使用动态范围,因为最后一列会发生变化。

With ws1

LastColumn = .Cells(1, Columns.Count).End(xlToLeft).Column
LastRow = .Cells(.Rows.Count, LastColumn).End(xlUp).Row

Set rDataRange = .Range(.Cells(2, LastColumn), .Cells(LastRow, LastColumn))

For Each rCell in RDataRange 
    If rCell.Value = "Yes" Then
        rCell.EntireRow.Hidden = True
    End If
Next rCell
End With

有人知道为什么这可能不起作用吗?

【问题讨论】:

  • 您必须完全限定With 声明相关部分。例如Set rDataRange = Range(Cells(2, LastColumn), Cells(LastRow, LastColumn)) 应该是 Set rDataRange = .Range(.Cells(2, LastColumn), .Cells(LastRow, LastColumn))
  • 啊,那是我的错,我正在使用的计算机无法访问互联网,所以我不得不在手机上手动重新输入。它确实在我的代码中读到了Set rDataRange = .Range(.Cells(2, LastColumn), .Cells(LastRow, LastColumn)),只是在这里打错了。

标签: excel vba


【解决方案1】:

试试:

Option Explicit

Sub test()

    Dim LastColumn As Long, Lastrow As Long, i As Long
    Dim str As String

    With ThisWorkbook.Worksheets("Sheet1")

        str = "Test"
        LastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
        Lastrow = .Cells(.Rows.Count, LastColumn).End(xlUp).Row

        For i = 1 To Lastrow

            If .Cells(i, LastColumn).Value = str Then
                .Rows(i).EntireRow.Hidden = True
            End If

        Next i

    End With

End Sub

【讨论】:

  • 应该是.Rows(i).EntireRow.Hidden = True
  • 谢谢!这绝对是循环遍历行的更好方法。
  • 这是一个很好的解决方案,但在旁注中;我看到人们经常实现这个循环,而.FindNext 函数会运行得更快,并且应该在大型数据库上显着改善计算时间(当你可以直接跳转到找到的值时,谁想要循环 100.000 行?):)
猜你喜欢
  • 2019-02-22
  • 2020-08-23
  • 2017-02-08
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多