我对此进行了大量搜索,并且不能自己做,所以试图获得专家意见
我想基于重复值隐藏行块,但保持第一个重复值和行可见,这意味着:
我有单元格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…
到目前为止,我尝试了很多东西但是根据上面的例子,不能根据重复进行选择性块行隐藏。所以如果你有时间请分享你的魔力。
将此代码放入工作表的私有代码表(右键单击工作表名称选项卡,查看代码)
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