根据单元格中的单词在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的单元格被手动更改为用户。