【问题标题】:Using Excel VBA To Hide Rows Based on Cell Value使用 Excel VBA 根据单元格值隐藏行
【发布时间】:2016-01-11 20:03:25
【问题描述】:

好的...再次返回另一个 Excel 问题。

这一次,我有一个 Excel 工作簿,其中包含 800 种化学品/化合物的化学和物理特性。我有另一个工作簿,其中包含大约 200 种这些化学物质。

我需要在包含 800 种化学品的工作簿中只显示较小工作簿中显示的化学品。从技术上讲,我可以检查所有 800 种化学品并使用“过滤器”功能来取消选择我不想要的所有内容,但显然这需要很长时间,而且肯定有更快的方法。

以下是我认为需要发生的事情:

在两个工作簿中,CAS 编号都是其中一列。我已将我想要显示的化学品的所有 CAS 编号复制到较大工作簿的新列中。我想做的是有一些 VBA 代码,基本上是这样说的:“如果较大工作簿中的 CAS 编号等于较小工作簿中的 CAS 编号,则显示该化学物质。如果不是,则不要显示它.

如果这很难理解,那么我很抱歉,很难用语言表达。

This is what I started doing:

    Sub HideRows()

    BeginRow = 3
    EndRow = 802
    ChkCol = 3

    For RowCnt = BeginRow To EndRow

        If Cells(RowCnt, ChkCol).Value = "A3" Then
            Cells(RowCnt, ChkCol).EntireRow.Hidden = True
        Else
            Cells(RowCnt, ChkCol).EntireRow.Hidden = False
        End If
        Next RowCnt


    End Sub

但我认为这是不对的。有什么想法吗?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    试试这个。

    将此例程放在标准代码模块中。

    Public Sub Ryan_C()
    
        Dim rCrit As Range, rData As Range
    
        With Sheets("Sheet1").[a1]
            Set rData = .Resize(.Item(.Parent.Rows.Count).End(xlUp).Row, .Item(, .Parent.Columns.Count).End(xlToLeft).Column)
        End With
    
        With Sheets("Sheet2").[a1]
            Set rCrit = .Resize(.Item(.Parent.Rows.Count).End(xlUp).Row)
        End With
    
        rData.AdvancedFilter xlFilterInPlace, rCrit
    
    End Sub
    

    注意:假设 800 种化合物在 Sheet1 中,200 个 CAS 登记号在 Sheet2 中。根据需要编辑工作表名称。

    注意:这假设两个工作表中的数据都从单元格 A1 开始。

    注意:它还假设两张表顶部的 CAS 标题匹配。

    【讨论】:

    • @findwindow 绝对使用 AdvancedFilter。
    • @Ryan_C 你需要帮助吗?请告诉我。
    • @ExcelHero 我还在想一个更好的方式来表达这个问题。有很多变数可以使这个难用的短语正确。
    • @Ryan_C 很公平,但我认为我的解决方案清楚地回答了提出的问题。请记住,Stack Overflow 也是未来访问者寻求问题帮助的资源。如果您有不同措辞的问题,请将其作为新问题发布,并接受此答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    相关资源
    最近更新 更多