Excel VBA宏,自动筛选数据和隐藏列

时间:2013-07-17 20:16:31

标签: excel excel-vba hide autofilter vba

我的excel宏有问题。我正在使用Excel 2003.我的excel文档中有很多数据,我需要创建宏,以便我可以看到特定的数据。

此文档中的所有数据都是从另一个Excel文档导入的。我的意思是它不是价值而是公式。第一行设置数据标签,如姓名,姓名,培训名称等。下面的行充满了这些数据。

我想做的是: 1.按特定列标准过滤数据。 2.使用宏: - 搜索范围内的所有列(假设范围为G:BV),值为“1” - 当在列中的任何单元格中找到值“1”时,它保持不变 - 当找不到值“1”时,应隐藏列

我努力寻找一些关于我的问题,但没有成功。到目前为止,我想出了这段代码:

Sub FindHid()

Dim vFind
Dim rSearch As Range

On Error GoTo 0

vFind = 1

Application.ScreenUpdating = True

For i = 7 To 75

With ActiveSheet.Columns("G:G")
   Set rSearch = .Find(vFind, LookIn:=xlValues, MatchCase:=False)

   If rSearch Is Nothing Then
      .EntireColumn.Hidden = True

      Else
      .EntireColumn.Hidden = False

   End If
End With
Set rSearch = Nothing
Next i

End Sub

3 个答案:

答案 0 :(得分:0)

我不会使用Find方法。 尝试使用类似的东西:

NRows = ActiveSheet.UsedRange.Rows.Count
For R = 2 To NRows
  If Rows(R).Hidden Then

答案 1 :(得分:0)

我的代码:

Sub HideNonOnes()
    Dim rngToSearch As Range
    Dim rng As Range
    Dim rngToHide As Range

    Set rngToSearch = Range("G2", Range("G2").End(xlDown).End(xlToRight))

    For Each rng In rngToSearch.Columns
        If Evaluate("ISNA(MATCH(1," & rng.Address & ",0))") Then
            If rngToHide Is Nothing Then
                Set rngToHide = rng.Range("A1")
            Else
                Set rngToHide = Union(rngToHide, rng.Range("A1"))
            End If
        End If
    Next rng
    If Not rngToHide Is Nothing Then
        rngToHide.Columns.Hidden = True
    End If
End Sub

在一次隐藏所有这些列之前构建范围rngToHide

答案 2 :(得分:0)

这不是我问题的最佳解决方案,但它有效:

Sub FindHid()

Dim vFind
Dim rSearch As Range

'On Error GoTo ErrorHandle
Application.ScreenUpdating = False

vFind = 1

Range("F1").Select

For i = 1 To 68
    ActiveCell.Offset(0, 1).Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select

    Set rSearch = Selection.Find(vFind, LookIn:=xlValues, LookAt:= _
        xlWhole, MatchCase:=True)

        If rSearch Is Nothing Then
            Selection.EntireColumn.Hidden = True

        Else
            Selection.EntireColumn.Hidden = False

        End If

Next i
Application.ScreenUpdating = True
Range("A1").Select

End Sub