我正在尝试在Excel表格中创建视图选项。我已准备好单选按钮,标记为Sales,Contracts,Accounts和All。每个列都将显示/隐藏列,具体取决于哪些列与特定部门相关。我希望过滤哪些列相关的方法是在每列(顶部)中有一个单元格,检查它是否包含s,c或a。如果两个部门需要查看同一列,这是使用逗号的最佳方式吗?
这是我目前拥有的代码,但它需要在宏代码中定义单元格:
Sub SalesOption_Click()
Columns("B:DD").Select
Selection.EntireColumn.Hidden = True
Application.Union(Columns("c:p"), Columns("bt:bw"), Columns("cb")).Select
Selection.EntireColumn.Hidden = False
Range("$A$1").Select
End Sub
Sub AllOption_Click()
Columns("B:DD").Select
Selection.EntireColumn.Hidden = False
Range("$A$1").Select
End Sub
非常感谢任何指导。
答案 0 :(得分:2)
插入此功能:
Function FindCols(colVal As String)
Columns("B:DD").EntireColumn.Hidden = False
Dim LastCol As Integer
Dim desigRow As Integer
desigRow = 1 'first row will be checked for letters
With ActiveSheet
LastCol = .Cells(desigRow, .Columns.Count).End(xlToLeft).Column
End With
Dim i As Integer
Dim rng As Range
For i = 1 To LastCol
Set rng = Cells(desigRow, i)
If InStr(1, Cells(desigRow, i), colVal) = 0 Then 'If the column doesn't contain the wanted letter -> hide it
rng.EntireColumn.Hidden = True
End If
Next i
End Function
这会在列中搜索正确的内容,如果它们不包含它们,则会隐藏它们。
现在您只需要从按钮的子部分调用此函数,例如:
Sub SalesOption_Click()
FindCols "s"
End Sub
或
Sub AllOption_Click()
Columns("B:DD").EntireColumn.Hidden = False
End Sub
其他两个应该可以自己创建(提示:它只有一个字母不同)。
编辑:为了满足避免.Select-Statements的愿望,我改变了我的代码
答案 1 :(得分:0)
或者你可以使用它,我使用了一个InputBox,因为我不知道你想如何指定要搜索的字母。
Sub SO()
filterLet = InputBox("Enter Letter")
For i = 2 To 108
Cells(1, i).EntireColumn.Hidden = InStr(1, Cells(1, i).Value, filterLet) = 0
Next i
End Sub
显示所有只是使用
Columns("B:DD").EntireColumn.Hidden = False