0

我对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
4

3 回答 3

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它在一次隐藏所有这些列之前构建范围。

于 2013-07-17T20:55:46.953 回答
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
于 2013-07-19T07:05:31.130 回答
0

我不会使用这种Find方法。尝试类似:

NRows = ActiveSheet.UsedRange.Rows.Count
For R = 2 To NRows
  If Rows(R).Hidden Then
于 2013-07-17T20:25:49.313 回答