再请一点帮助。 下面的代码用于隐藏与B5不匹配的列。 现在我的问题是,我想取消隐藏匹配值的列 同时来自B6和B7。 命令表B列5,6,7中的参考值。 让B5是MARCH 让B6是1月sample picture 让B7是2月份 工作表名称(GRA_NewGen CI)请注意,每行/每列的所有数据都在此处。 从工作表名称到匹配B5,B6,B7的范围是C列第4行,直到带有值的行的列结束。
以下是'代码
'Sub GRA_NewGen_CI()
Dim cell As Range
Application.ScreenUpdating = False
With Sheets("GRA_New Gen CI")
For Each cell In .Range("C4", .Range("XFD4").End(xlToLeft))
cell.EntireColumn.Hidden = cell.Value <> Sheets("Command").Range("B5") And Not IsEmpty(cell)
Next cell
End With
Application.ScreenUpdating = True
'End Sub
答案 0 :(得分:0)
如果您想要的是隐藏所有标记为&#34; JANUARY&#34;,&#34; FEBRUARY&#34;等等,通过使用Excel的过滤功能,您将获得更大的灵活性和更快的动作。了解有关过滤器的here。
答案 1 :(得分:0)
这给了我很多的机会。所有这些隐藏的列都很棘手。但现在轮到你了。请按照说明进行操作。
在你的命令&#39;单击表,找到一个空白列并输入&#34;显示全部&#34;在下面的单元格中的一个单元格和此函数中:
="Show "& B5
我希望你能在B5:B16中度过所有12个月,但如果你只有1月到3月,或者喜欢动态改变内容,那也没关系。只要在B列中有相关数据(月份名称或列标题),就可以复制公式。给我刚刚描述的范围命名。我给它起了名字&#34; DropdownList&#34;。确保命名范围具有&#39;范围&#39; &#34;工作簿&#34; (意思是,它可以从工作簿的所有部分中看到)。
在位置A4的GRA_New工作表上放置一个命令按钮。也许你已经在其他地方有一个按钮。在那种情况下,我会要求你一起玩,然后再制作另一个。稍后您可以将此按钮移动到任何其他位置,包括另一个工作表,但不能移动到可能隐藏的列中。此命令按钮将是“验证”下拉列表。输入
"Allow" = List and
"Source" =DropdownList (including the = mark.
您现在应该有一个验证下拉菜单,显示&#34;全部显示&#34;在第一个位置,&#34;显示1月&#34;在第二,更多&#34;显示......&#34;取决于命名范围DropdownList的大小。确保在&#34;显示1月和#34;之间有一个空格。和&#34;显示全部&#34;,不是更多而不是更少,每行由2个单词组成,第二个单词是相关的。
现在将以下过程添加到&#34; GR_New ...&#34;的代码表中。片材。
Private Sub Worksheet_Change(ByVal Target As Range)
'17 Mar 2017
If Target.Address = Range("A4").Address Then
SetDisplay_GRA_NewGen Split(Target.Value)(1)
End If
End Sub
在此程序中,请将参考更改为&#34; A4&#34;到您有验证下拉列表的单元格。
下一个程序进入正常的代码模块。默认情况下,它的名称是&#34; Module1&#34;,但你可以给它任何你喜欢的名字。
Sub SetDisplay_GRA_NewGen(ByVal Cmd As String)
' 17 Mar 2017
Dim Spike As String
Dim CountHidden As Integer
Dim FirstColumn As Long, LastColumn As Long
Dim CapRow As Long, Cap As String
Dim C As Long
CapRow = 4
FirstColumn = 3 ' = column C
With Worksheets("GRA_New_Gen_CI")
LastColumn = .UsedRange.Columns.Count
If StrComp(Cmd, "all", vbTextCompare) Then
With Range("DropdownList")
For C = 2 To .Rows.Count
Cap = Split(.Cells(C).Value)(1)
Spike = Spike & "|" & Cap
Next C
End With
For C = FirstColumn To LastColumn ' count hidden columns
Cap = .Cells(CapRow, C).Value
If .Columns(C).Hidden Then
If .Columns(C).Hidden Or InStr(1, Spike, Cap, vbTextCompare) = 0 Then
' if Cap can't be selected it is counted as not hidden
CountHidden = CountHidden + 1
End If
End If
Next C
Application.ScreenUpdating = False
If CountHidden = 0 Then
' hide all except the specified column
.Range(.Columns(FirstColumn), .Columns(LastColumn)).Hidden = True
End If
For C = FirstColumn To LastColumn
With .Columns(C)
If .Hidden Then
Cap = .Cells(CapRow).Value
If StrComp(Cap, Cmd, vbTextCompare) = 0 Then .Hidden = False
End If
End With
Next C
Else
.Range(.Columns(FirstColumn), .Columns(LastColumn)).Hidden = False
End If
End With
Application.ScreenUpdating = True
End Sub
在此过程中查找两个声明:
CapRow = 4
FirstColumn = 3
第4行是数据表中的行,程序将在其中查找月份名称。第3列(=&#34; C&#34;)将是程序期望找到月份名称的第一列。列A:B永远不会被触及。
现在您的系统已准备就绪。您需要知道如何操作它。 1.当您选择&#34;全部显示&#34;从下拉列表中将显示从FirstColumn开始的所有列。将此称为重置。 2.当您选择CapRow中具有该名称的下拉列中的任何项目时,将显示。 3.当您选择另一个月时,它将被添加到已显示的月份。 4.当所有列都已显示时,将仅显示所选列。
您可以随时修改DropdownList范围,使其更长或更短。重要的是下拉列表中的名称可以在CapRow中找到。该程序将它们作为文本进行比较,意思是&#34;显示全部&#34;与&#34; SHOW ALL&#34;。
相同