VBA根据单元格值选择列

时间:2014-12-18 11:23:09

标签: excel vba excel-vba

我正在尝试在Excel表格中创建视图选项。我已准备好单选按钮,标记为Sales,Contracts,Accounts和All。每个列都将显示/隐藏列,具体取决于哪些列与特定部门相关。我希望过滤哪些列相关的方法是在每列(顶部)中有一个单元格,检查它是否包含s,c或a。如果两个部门需要查看同一列,这是使用逗号的最佳方式吗?

view options

table

这是我目前拥有的代码,但它需要在宏代码中定义单元格:

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

非常感谢任何指导。

2 个答案:

答案 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