Excel 如何基于另一工作表上的单元格值在多个工作表中隐藏/显示行

Excel 如何基于另一工作表上的单元格值在多个工作表中隐藏/显示行,excel,vba,Excel,Vba,我试图找到一种更高效、更快的运行方式来调整此公式,以便它根据存储此宏的“输入”选项卡上的D10值,在多个工作表中隐藏/显示相同的行 我已经尝试了我能找到的一切,但看起来我必须在第一张工作表的正下方列出与新工作表名称完全相同的行引用 Private Sub Worksheet_Change(ByVal Target As Range) Application.DisplayAlerts = False 'Prevents general pop-ups Application.Calculati

我试图找到一种更高效、更快的运行方式来调整此公式,以便它根据存储此宏的“输入”选项卡上的D10值,在多个工作表中隐藏/显示相同的行

我已经尝试了我能找到的一切,但看起来我必须在第一张工作表的正下方列出与新工作表名称完全相同的行引用

Private Sub Worksheet_Change(ByVal Target As Range)

Application.DisplayAlerts = False 'Prevents general pop-ups
Application.Calculation = xlManual 'Formulas are not calculated
Application.ScreenUpdating = False 'What the user see's on screen will not change

If Intersect(Target, Range("D10")) Is Nothing Then Exit Sub

'Hides all major city information so just the titles are shown.
If Target.Address = ("$D$10") And Target.Value = "" Then
Sheets("Weekly Report - New").Unprotect
    Sheets("Weekly Report - New").Rows("54:63").EntireRow.Hidden = True
    Sheets("Weekly Report - New").Rows("68:77").EntireRow.Hidden = True
    Sheets("Weekly Report - New").Rows("82:91").EntireRow.Hidden = True
    Sheets("Weekly Report - New").Rows("96:105").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("18:31").EntireRow.Hidden = False
            Sheets("Weekly Report - New").Rows("23:47").EntireRow.Hidden = True

'Unhides 'London' under the major cities section and keeps the rest hidden.
ElseIf Target.Address = ("$D$10") And Target = "UK" Then
Sheets("Weekly Report - New").Unprotect
    Sheets("Weekly Report - New").Rows("54").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("68").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("82").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("96").EntireRow.Hidden = False
            Sheets("Weekly Report - New").Rows("55:63").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("69:77").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("83:91").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("97:105").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("24:28").EntireRow.Hidden = False
                    Sheets("Weekly Report - New").Rows("18:23").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("29:47").EntireRow.Hidden = True

'Unhides 'French Riviera' & 'Paris' under the major cities section and keeps the rest hidden.
ElseIf Target.Address = ("$D$10") And Target = "France" Then
Sheets("Weekly Report - New").Unprotect
    Sheets("Weekly Report - New").Rows("55:56").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("69:70").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("83:84").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("97:98").EntireRow.Hidden = False
            Sheets("Weekly Report - New").Rows("54").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("68").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("82").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("96").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("57:63").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("71:77").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("85:91").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("99:105").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("30:34").EntireRow.Hidden = False
                    Sheets("Weekly Report - New").Rows("18:29").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("35:47").EntireRow.Hidden = True

'Unhides 'Barcelona' & 'Madrid' under the major cities section and keeps the rest hidden.
ElseIf Target.Address = ("$D$10") And Target = "Spain" Then
Sheets("Weekly Report - New").Unprotect
    Sheets("Weekly Report - New").Rows("57:58").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("71:72").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("85:86").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("99:100").EntireRow.Hidden = False
            Sheets("Weekly Report - New").Rows("54:56").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("59:63").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("68:70").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("73:77").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("82:84").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("87:91").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("96:98").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("101:105").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("36:40").EntireRow.Hidden = False
                    Sheets("Weekly Report - New").Rows("18:35").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("41:47").EntireRow.Hidden = True

'Unhides 'Florence', 'Maples', 'Milan', 'Rome' & 'Venice' under the major cities section and keeps the rest hidden.
ElseIf Target.Address = ("$D$10") And Target = "Italy" Then
Sheets("Weekly Report - New").Unprotect
    Sheets("Weekly Report - New").Rows("59:63").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("73:77").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("87:91").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("101:105").EntireRow.Hidden = False
            Sheets("Weekly Report - New").Rows("54:58").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("68:72").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("82:86").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("96:100").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("42:46").EntireRow.Hidden = False
                    Sheets("Weekly Report - New").Rows("18:41").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("47").EntireRow.Hidden = True

End If

Sheets("Weekly Report - New").Rows("108:121").EntireRow.Hidden = True
Sheets("Weekly Report - New").Protect

Application.DisplayAlerts = True
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True

End Sub

这对于“每周报告-新建”工作表来说效果很好(如果有点慢)。现在,我需要它对“累积报告-新建”工作表执行相同的操作。

因为有大量不同的行要隐藏和取消隐藏,所以我执行了第一个示例,您可以使用它来完成其余的操作:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.DisplayAlerts = False 'Prevents general pop-ups
Application.Calculation = xlManual 'Formulas are not calculated
Application.ScreenUpdating = False 'What the user see's on screen will not change

If Intersect(Target, Range("D10")) Is Nothing Then Exit Sub

'Hides all major city information so just the titles are shown.
If Target.Address = ("$D$10") And Target.Value = "" Then
Sheets("Weekly Report - New").Unprotect
    Sheets("Weekly Report - New").Rows("54:63").EntireRow.Hidden = True
    Sheets("Weekly Report - New").Rows("68:77").EntireRow.Hidden = True
    Sheets("Weekly Report - New").Rows("82:91").EntireRow.Hidden = True
    Sheets("Weekly Report - New").Rows("96:105").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("18:31").EntireRow.Hidden = False
            Sheets("Weekly Report - New").Rows("23:47").EntireRow.Hidden = True

'Unhides 'London' under the major cities section and keeps the rest hidden.
ElseIf Target.Address = ("$D$10") And Target = "UK" Then
Sheets("Weekly Report - New").Unprotect
    Sheets("Weekly Report - New").Rows("54").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("68").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("82").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("96").EntireRow.Hidden = False
            Sheets("Weekly Report - New").Rows("55:63").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("69:77").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("83:91").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("97:105").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("24:28").EntireRow.Hidden = False
                    Sheets("Weekly Report - New").Rows("18:23").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("29:47").EntireRow.Hidden = True

'Unhides 'French Riviera' & 'Paris' under the major cities section and keeps the rest hidden.
ElseIf Target.Address = ("$D$10") And Target = "France" Then
Sheets("Weekly Report - New").Unprotect
    Sheets("Weekly Report - New").Rows("55:56").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("69:70").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("83:84").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("97:98").EntireRow.Hidden = False
            Sheets("Weekly Report - New").Rows("54").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("68").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("82").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("96").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("57:63").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("71:77").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("85:91").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("99:105").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("30:34").EntireRow.Hidden = False
                    Sheets("Weekly Report - New").Rows("18:29").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("35:47").EntireRow.Hidden = True

'Unhides 'Barcelona' & 'Madrid' under the major cities section and keeps the rest hidden.
ElseIf Target.Address = ("$D$10") And Target = "Spain" Then
Sheets("Weekly Report - New").Unprotect
    Sheets("Weekly Report - New").Rows("57:58").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("71:72").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("85:86").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("99:100").EntireRow.Hidden = False
            Sheets("Weekly Report - New").Rows("54:56").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("59:63").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("68:70").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("73:77").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("82:84").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("87:91").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("96:98").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("101:105").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("36:40").EntireRow.Hidden = False
                    Sheets("Weekly Report - New").Rows("18:35").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("41:47").EntireRow.Hidden = True

'Unhides 'Florence', 'Maples', 'Milan', 'Rome' & 'Venice' under the major cities section and keeps the rest hidden.
ElseIf Target.Address = ("$D$10") And Target = "Italy" Then
Sheets("Weekly Report - New").Unprotect
    Sheets("Weekly Report - New").Rows("59:63").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("73:77").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("87:91").EntireRow.Hidden = False
    Sheets("Weekly Report - New").Rows("101:105").EntireRow.Hidden = False
            Sheets("Weekly Report - New").Rows("54:58").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("68:72").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("82:86").EntireRow.Hidden = True
            Sheets("Weekly Report - New").Rows("96:100").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("42:46").EntireRow.Hidden = False
                    Sheets("Weekly Report - New").Rows("18:41").EntireRow.Hidden = True
                    Sheets("Weekly Report - New").Rows("47").EntireRow.Hidden = True

End If

Sheets("Weekly Report - New").Rows("108:121").EntireRow.Hidden = True
Sheets("Weekly Report - New").Protect

Application.DisplayAlerts = True
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True

End Sub
Dim wb As Workbook, ws As Worksheet, SheetNames
Application.DisplayAlerts = False 'Prevents general pop-ups
Application.Calculation = xlManual 'Formulas are not calculated
Application.ScreenUpdating = False 'What the user see's on screen will not change

If Intersect(Target, Range("D10")) Is Nothing Then Exit Sub

Set wb = ThisWorkbook
SheetNames = Array("Weekly Report - New", "Cumulative Report - New")


StrValue = Target.Value
Select Case StrValue
    'Hides all major city information so just the titles are shown.
    Case vbNullString
        For i = 0 To 1
            Set ws = wb.Sheets(SheetNames(i))
            With ws
                .Unprotect
                Union(.Rows("54:63"), .Rows("68:77"), .Rows("82:91"), .Rows("96:105"), .Rows("23:47")). _
                    EntireRow.Hidden = True
                .Rows("18:31").EntireRow.Hidden = False
            End With
        Next i

    'All the other cases

End Select
我所做的是为您需要处理的每个工作表(假设两个工作表都有相同的数据)创建一个循环,并使用Urderboy所说的关于联合的内容,以提高可读性和更快的过程


希望这能为你指明正确的方向。如果您需要更多帮助,请询问。

首先,将隐藏和取消隐藏操作减少为一个用于
true
,一个用于
false
,以加快速度。比如说

ws.Range("54:54,68:68,82:82,96:96,24:28").EntireRow.Hidden = False
ws.Range("55:63,69:77,83:91,97:105,18:23,29:47").EntireRow.Hidden = True
注意:此处必须使用
范围
而不是

并将您的代码放入一个过程中,这样您就可以在任何工作表中重复使用它。请注意,您需要调整
法国
西班牙
意大利

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.DisplayAlerts = False 'Prevents general pop-ups
    Application.Calculation = xlManual 'Formulas are not calculated
    Application.ScreenUpdating = False 'What the user see's on screen will not change

    If Intersect(Target, Me.Range("D10")) Is Nothing Then Exit Sub

    ' call the function
    HideAndUnhideRows ThisWorkbook.Worksheets("Weekly Report - New"), Me.Range("D10").Value
    HideAndUnhideRows ThisWorkbook.Worksheets("Cumulative Report - New"), Me.Range("D10").Value

    Application.DisplayAlerts = True
    Application.Calculation = xlAutomatic
    Application.ScreenUpdating = True
End Sub

Private Sub HideAndUnhideRows(ws As Worksheet, Criteria As String)
    ws.Unprotect
    Select Case Criteria

    Case "" 'Hides all major city information so just the titles are shown.
        ws.Range("54:63,68:77,82:91,96:105,23:47").EntireRow.Hidden = True
        ws.Range("18:31").EntireRow.Hidden = False

    Case "UK" 'Unhides 'London' under the major cities section and keeps the rest hidden.
        ws.Range("54:54,68:68,82:82,96:96,24:28").EntireRow.Hidden = False
        ws.Range("55:63,69:77,83:91,97:105,18:23,29:47").EntireRow.Hidden = True

    Case "France" 'Unhides 'French Riviera' & 'Paris' under the major cities section and keeps the rest hidden.

    Case "Spain" 'Unhides 'Barcelona' & 'Madrid' under the major cities section and keeps the rest hidden.

    Case "Italy" 'Unhides 'Florence', 'Maples', 'Milan', 'Rome' & 'Venice' under the major cities section and keeps the rest hidden.

    End Select

    ws.Range("108:121").EntireRow.Hidden = True
    ws.Protect
End Sub

我将创建将一起隐藏的行的
Union
s,然后只隐藏
Union
——这将有利于可读性。另外,不要检查地址,而是检查
相交
为什么我们需要使用
范围
而不是
?我可能也会从中学到一些东西。该死的,你们工作得很快,我只是在调整它的不同部分,然后我会尝试一下,谢谢你们的快速响应@Damian,因为
不接受像
54:63,68:77这样的非连续逗号分隔地址,但
范围
接受。如果地址是硬编码的,我会避免使用
union
使其变得更短更快。我得到了更短的地址,但它是如何比
union()更快的呢ᴇʜ?好的,刚刚完成所有工作,由于文件中的一些其他元素,不得不对其进行调整,但本质上与编写的内容完全相同。非常感谢(:(一切都很好)