[英]Hide multiple rows on sheet based on cell value
I'm trying, with Excel 2013, to hide and unhide rows when a cell is a certain value. 我正在尝试使用Excel 2013在单元格为某个值时隐藏和取消隐藏行。
It's a form which should expand based on answers given. 这种形式应该根据给出的答案进行扩展。
When C16 = YES hide rows 18:22 当C16 = YES隐藏行18:22
When C16 = NO hide rows 24:38 当C16 = NO时隐藏行24:38
When C16 =blank hide rows 18:38 当C16 =空白时隐藏行18:38
When L43 = YES unhide rows 43:68 (if it's not yes a zero is displayed) 当L43 = YES时,取消隐藏第43:68行(如果不是,则显示零)
I have tried 2 methods. 我尝试了2种方法。
First: Into the worksheet - selected change in the top right dropdown 第一:进入工作表-在右上角的下拉菜单中选择更改
Private Sub Worksheet_Change(ByVal Target As Range)
Range("A18:A22").EntireRow.Hidden = (Range("$C$16").Value = "Yes")
Range("A24:A38").EntireRow.Hidden = (Range("$C$16").Value = "NO")
Range("A18:A38").EntireRow.Hidden = (Range("$C$16").Value = "")
Range("A43:A68").EntireRow.Hidden = (Range("$L$43").Value = "0")
End Sub
Second: code from here: 第二:来自这里的代码:
Unhide rows based on cell value 根据单元格值取消隐藏行
Using both of these methods only one of the changes seems to go ahead. 使用这两种方法,似乎只有一项更改正在进行。 So cell C16 is changed but that means range L43 is ignored
因此,单元格C16发生了变化,但这意味着范围L43被忽略了
Also when the cell was blank it didn't change anything. 同样,当单元格为空白时,它什么也没有改变。 It remained as is and didn't hide the columns as required.
它保持原样,并且没有按要求隐藏列。
Your ranges overlap so even if C16 = "Yes"
the line C16 = ""
will override it and unhide it. 您的范围会重叠,因此即使
C16 = "Yes"
,行C16 = ""
也会覆盖并取消隐藏它。 L42
is probably also a number where as you're comparing it to a text value try using the following instead. L42
可能也是一个数字,在将其与文本值进行比较时,请尝试使用以下内容。 Your code would run on every single change in your sheet as well so have also updated it to only run when either C16
or L43
is changed 您的代码也将在工作表中的每个更改上运行,因此也将其更新为仅在
C16
或L43
更改时运行
Private Sub Worksheet_Change(ByVal Target As Range)
With Me
If Not Intersect(Target, Union(.Range("C16"), .Range("L43"))) Is Nothing Then
.Range("A18:A38").EntireRow.Hidden = False
Select Case LCase(.Range("C16").Value2)
Case "yes"
.Range("A18:A22").EntireRow.Hidden = True
Case "no"
.Range("A24:A38").EntireRow.Hidden = True
Case Else
.Range("A18:A38").EntireRow.Hidden = True
End Select
.Range("A43:A68").EntireRow.Hidden = False
Select Case LCase(.Range("L43").Value2)
Case "yes"
.Range("A43:A68").EntireRow.Hidden = False
Case Else
.Range("A43:A68").EntireRow.Hidden = True
End Select
End If
End With
End Sub
After comments 评论后
I'd break this into two from your comments. 根据您的评论,我将其分为两部分。 The first would watch the dropdown and execute on the change of that cell.
第一个将监视下拉列表并在该单元格的更改上执行。 The second would update using the calculate event.
第二个将使用calculate事件进行更新。 Put these Subs in the sheets where applicable
将这些潜艇放在适用的表格中
Private Sub Worksheet_Change(ByVal Target As Range)
With Me
If Not Intersect(Target, Union(.Range("C16"), .Range("L43"))) Is Nothing Then
.Range("A18:A38").EntireRow.Hidden = False
Select Case LCase(.Range("C16").Value2)
Case "yes"
.Range("A18:A22").EntireRow.Hidden = True
Case "no"
.Range("A24:A38").EntireRow.Hidden = True
Case Else
.Range("A18:A38").EntireRow.Hidden = True
End Select
End If
End With
End Sub
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
With Me
.Range("A43:A68").EntireRow.Hidden = False
Select Case LCase(.Range("L43").Value2)
Case "yes"
.Range("A43:A68").EntireRow.Hidden = False
Case Else
.Range("A43:A68").EntireRow.Hidden = True
End Select
End With
Application.EnableEvents = True
End Sub
Try: 尝试:
With Worksheets("Sheet1")
.Rows("18:68").EntireRow.Hidden = False
opt = UCase(.Range("C16").Value)
Select Case opt
Case "YES"
Rows("18:22").EntireRow.Hidden = True
Case "NO"
Rows("24:38").EntireRow.Hidden = True
Case ""
Rows("18:38").EntireRow.Hidden = True
Case Else
MsgBox "Invalid option in cell C16."
End Select
If UCase(.Range("L43").Value) = "Yes" Then
Rows("43:68").EntireRow.Hidden = True
Else
MsgBox "Invalid option in cell L43."
End Select
End With
...though I didn't understand what you wanted to be '0'. ...虽然我不明白您想设为0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.