0

我是 VBA 编程的新手。我想

  • 搜索工作表,在第 6 行找到“N”或“TR”
  • 然后,对于“N”或“TR”列中的每个单元格
  • 如果所有单元格均为空白,则删除/隐藏该列
  • 如果单元格不是空白的,突出显示空白的单元格

这听起来很简单,但我认为它需要两个 for 循环。

 Sub checkandhide()    
    Set r = Range("6:6")  
    Rows("7:7").Select  
    For Each Cell In r  
        Selection.Find(What:="N", After:=ActiveCell, LookIn:=xlFormulas, LookAt _  
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _  
            False, MatchByte:=False, SearchFormat:=False).Activate  
        'search for N  
        Application.Run "hidecolumn"  
    Next  
 End Sub  


Sub hidecolumn()
    Dim target As Range
    Dim dwn As Range

    Set dwn = Range(ActiveCell.End(xlDown).Address)
    ActiveCell.Select

    ActiveCell.Offset(6, 0).Select

    For Each Cell In dwn
        If Cell.Text = "" Then Columns.Delete
    Next      
End Sub    

附上示例电子表格

4

1 回答 1

1
  1. 你不需要两个循环。
  2. 您提到要隐藏列,但您的代码建议您删除它(我保留了隐藏的解决方案)
  3. 您没有提到决定隐藏该列的空范围(哪些单元格为空白)-我假设所有内容都低于第 11 行。
  4. 这是经过尝试和测试的代码,其中包含一些注释。

    Sub checkandhide()
    Dim r As Range
    Dim Cell As Range
    'don't run it for the complete row but from first to last cell in it
    Set r = Range("A6", Cells(6, Columns.Count).End(xlToLeft))
    
    For Each Cell In r
        'you don't need find if you simply need to check value of the cell
        'let's assume we check for 'N' & 'TR'  but not 'n' or 'tr'
        If Cell.Value = "N" Or Cell.Value = "TR" Then
    
            'there are few possibilities to check if there is any value below _
            row 11 (?!) in analysed column. I would use this one:
            If Cells(Rows.Count, Cell.Column).End(xlUp).Row < 12 Then
                Cell.EntireColumn.Hidden = True
            End If
    
        End If
    Next
    End Sub
    
于 2013-07-04T06:29:41.877 回答