VBA根据单元值select列

我正在试图在Excel表中查看选项。 我准备好单选button,标记为“销售”,“合同”,“帐户”和“全部”。 每个人都会显示/隐藏列,这取决于哪些部分与特定部门相关。 我想过滤哪些列相关的方式是每个列(顶部)有一个单元格,检查它是否包含s,c或a。 如果两个部门需要查看同一列,使用逗号是最好的方法吗?

查看选项

表

这里是我现在的代码,但它需要在macros代码中定义单元格:

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 

任何指导将不胜感激。

插入此function:

 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 

这将search正确内容的列,并隐藏它们,如果它们不包含它。

现在,您只需从button的子集中调用该函数,例如:

 Sub SalesOption_Click() FindCols "s" End Sub 

要么

 Sub AllOption_Click() Columns("B:DD").EntireColumn.Hidden = False End Sub 

另外两个应该是可以自己创build的(提示:只有一个字母是不同的)。

编辑:为了满足希望避免.Select-Statements,我改变了我的代码

或者你可以使用这个,我已经使用了一个InputBox,因为我不知道如何分配字母来search。

 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