【问题标题】:How to hide the next 30 rows below the “second” duplicate value in Excel VBA如何在 Excel VBA 中隐藏“第二个”重复值下方的下 30 行
【发布时间】:2019-02-04 21:08:33
【问题描述】:

我在这方面搜索了很多,但自己无法做到,所以试图获得专家意见

我想根据重复值隐藏行块,但保持第一个重复值和行可见,这意味着:

我有单元格B20, B50,B80,B110,B140等是根据另一个工作表条目自动填写的“没问题”,所以数据不是唯一的“每次都相同”并且可能经常有重复值,我想隐藏下一个第二个副本的行数低于 30 行,保持第一个块不变。 示例:在下面的单元格值1111 示例中,我想保持第 20 到 49 行可见“因为它是第一个副本”,但隐藏第 80 到 109 行并隐藏第 140 到 169 行,因为它们是第二和第三重复等等。

B20 1111
B21 something
B22 something
.
.
.
B50 2222
B51 something
B52 something
.
.
.
B80 1111
B81 something
B82 something
.
.
.
B110 2222
B111 something
B112 something
.
.
.
B140 1111
B141 something
B142 something
.
.
.
Etc…

到目前为止,我尝试了很多方法,但无法像上面的示例那样基于重复项进行选择性块行隐藏。所以如果你有时间,请分享你的魔法。

【问题讨论】:

    标签: vba excel duplicates


    【解决方案1】:

    将此代码放入工作表的私有代码表(右键单击工作表名称选项卡,查看代码)

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    
        If Not Intersect(Target, Range("B20,B50,B80,B110,B140")) Is Nothing Then
            On Error GoTo safe_exit
            Application.ScreenUpdating = False
            Application.EnableEvents = False
            Dim t As Range, r As Range, b As Boolean
            Range("B20").Resize(150, 1).EntireRow.Hidden = False
            For Each t In Range("B20,B50,B80,B110,B140")
                b = False
                For Each r In Range("B20,B50,B80,B110,B140")
                    If r.Value = t.Value And b Then
                        r.Resize(30, 1).EntireRow.Hidden = b
                    ElseIf r.Value = t.Value Then
                        r.Resize(30, 1).EntireRow.Hidden = b
                        b = True
                    End If
                Next r
            Next t
        End If
    
    safe_exit:
        Application.EnableEvents = True
        Application.ScreenUpdating = True
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2015-10-24
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2015-06-11
      • 2021-09-22
      • 2015-08-15
      相关资源
      最近更新 更多