【问题标题】:How to hide rows in Excel based on values in two columns如何根据两列中的值隐藏Excel中的行
【发布时间】:2014-05-04 23:12:21
【问题描述】:

在这里的第一篇文章,我对 Excel-VBA 的世界非常陌生。

我正在尝试自动化一些报告,但遇到了一些障碍。我正在尝试根据 2 个单独列中单元格的值隐藏 Excel 工作表上的行。我在下面给出了一个例子。 (真实文档在给定时间和几乎任何日期最多可以包含 50 个名称。)

对于此示例,我需要隐藏 A 列中没有 JIM 值且日期大于 B 列中今天日期的所有行。(04/05/2014)

A       B
JIM     04/05/2014
JIM     04/05/2014
BOB     05/05/2014
BOB     04/05/2014
TED     07/05/2014
TED     04/05/2014
BOB     09/05/2014
JIM     04/05/2014
JIM     11/05/2014
TED     12/05/2014

我现在正在使用下面的代码,但在添加第二个参数时遇到了一些问题。

Sub Delete_Name_Date()

Dim rng As Range, cell As Range

For Each cell In Range("A1:F15")
If cell.Value = "JIM" Then
cell.EntireRow.Hidden = False
Else: cell.EntireRow.Hidden = True

End If
Next


End Sub

任何帮助都会很棒。

谢谢

亚当

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    试试这个:

    Sub Delete_Name_Date()
        Dim cell As Range
    
        For Each cell In Range("A1:A15")
            With cell
                .EntireRow.Hidden = _
                    (.Value <> "JIM" And CDate(.Offset(, 1).Value) > Date)
            End With
        Next
    End Sub
    

    为了可靠性,我建议您使用ThisWorkbook.Sheets("SheetName").Range("A1:A15") 而不是Range("A1:A15")

    【讨论】:

    • 嗨 Simoco,感谢您这么快回复我。该代码在示例中运行良好,但是在我的文档中尝试使用它时似乎出现以下错误:( Run-ime Error '13' Type Mismatch 知道为什么会这样吗?文档中的数据是相同的如提供的示例。干杯亚当
    • 两个原因1) 您的范围Range("A1:B15") 包含#N/A #DIV/0 等错误。2) 您的日期以错误的日期格式存储,CDate(.Offset(, 1).Value) 导致错误。尝试将CDate(.Offset(, 1).Value) 更改为DateValue(.Offset(, 1).Text)
    • 嘿 Simoco 今天回来了,你是对的,范围包含修正的错误,一切正常。你是一个救生员。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多