根据单元格中的单词在excel中隐藏行
我在VBA非常新,并一直在寻找可以做我想做的VBA代码。 我试了几次,试图适应他们,但我似乎无法让他们正确的想法,我会尝试一些帮助!
我有6个项目在其旁边的单元格中显示为YES或NO,表示该人员是否在执行该项目。 这是由另一个工作表上该项目旁边的人员名称决定的,因此是生成公式,而不是下拉式或键入值。
这个项目下面有几行对应着它。
如果项目旁边有一个“否”(在C6中),我想让该项目的相应行被隐藏(行13:29)。
我希望每个项目都要重复这一点,
所以c7中的一个隐藏31:47,C8隐藏49:65,C9隐藏67:83,C10隐藏85:101,C11隐藏隐藏103:118,
我不知道这是否可能,一直在绕圈,真的希望有人可以帮助:)
这是我尝试过的适应之一,但我相信我做错了什么,抱歉没有张贴在这里
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$6" Then If Target.Value = NO Then Rows(13:29).EntireRow.Hidden = True Else Rows(13:29).EntireRow.Hidden = False If Target.Address = "$C$7" Then If Target.Value = NO Then Rows(31:47).EntireRow.Hidden = True Else Rows(31:47).EntireRow.Hidden = False End If End If If Target.Address = "$C$8" Then If Target.Value = NO Then Rows(49:65).EntireRow.Hidden = True Else Rows(49:65).EntireRow.Hidden = False End If End If If Target.Address = "$C$9" Then If Target.Value = NO Then Rows(67:83).EntireRow.Hidden = True Else Rows(67:83).EntireRow.Hidden = False End If End If If Target.Address = "$C$10" Then If Target.Value = NO Then Rows(85:101).EntireRow.Hidden = True Else Rows(85:101).EntireRow.Hidden = False End If End If If Target.Address = "$C$11" Then If Target.Value = NO Then Rows(103:119).EntireRow.Hidden = True Else Rows(103:119).EntireRow.Hidden = False End If End If End Sub
我能想到的最短代码:
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Dim bHide As Boolean bHide = (InStr(1, Target.Value, "NO", vbTextCompare) > 0) Select Case Target.Address Case "$C$6" Rows("13:29").EntireRow.Hidden = bHide Case "$C$7" Rows("31:47").EntireRow.Hidden = bHide Case "$C$8" Rows("49:65").EntireRow.Hidden = bHide Case "$C$9" Rows("67:83").EntireRow.Hidden = bHide Case "$C$10" Rows("85:101").EntireRow.Hidden = bHide Case "$C$11" Rows("103:119").EntireRow.Hidden = bHide End Select End Sub
请testing。
所以c7中的一个隐藏31:47,C8隐藏49:65,C9隐藏67:83,C10隐藏85:101,C11隐藏隐藏103:118,
C11
隐藏103:118
? 这不应该是C11
隐藏103:119
? 让我解释。
为了使您的工作变得简单,您需要find代码进展的趋势。 看到这个分析。
您正在寻找第6
行的“否”,并在第13:29
行显示/隐藏。 同样,你正在寻找第7
行“否”,并显示/隐藏行31:47
。 所以如果你注意到那么就有一个趋势。 行之间的差异是18
。 见上面的图片。 如果有一个趋势,那么有一个循环的可能性!
而且由于这个简单的表格,我也可以弄清楚,你说C11 hides 103:118
是不正确的,可能是一个错字。 为了保持18
差别, 118
必须是119
所以你的代码实际上可以被压缩(未经testing)
Dim i As Long, StartRow As Long, EndRow As Long StartRow = 13 EndRow = 29 For i = 6 To 11 If UCase(Range("C" & i).Value) = "NO" Then Rows(StartRow & ":" & EndRow).EntireRow.Hidden = True Else Rows(StartRow & ":" & EndRow).EntireRow.Hidden = False End If StartRow = StartRow + 18 EndRow = EndRow + 18 Next i
接下来的事情是,由于NO's
公式被改变了,你将不得不使用Worksheet_Calculate
而不是Worksheet_Change
,除非公式正在从同一个工作表中拾取数值,并且正在改变C6:C11
的单元格被手动更改为用户。