VBA按真/假条件选择列

时间:2017-03-23 13:28:54

标签: vba excel-vba excel

编辑: 下面的两个代码几乎都是完美的,但最终还是有同样的问题。 B1和D1:E1被正确分组,但由于某种原因,整个数据范围A1:E1也被分组。 B1和D1:E1然后作为子组运行,这是不理想的。

    |   A    |   B    |   C   |   D   |   E   |
-----------------------------------------------
 1  |  TRUE  |  FALSE |  TRUE | FALSE | FALSE |
 2  |        |        |       |       |       |
 3  |        |        |       |       |       |

在我的数据集中,从B1开始,第一行为TRUE或FALSE。最终,我正在尝试对所有具有FALSE的列进行分组。这是我到目前为止的代码。代码运行,但它没有做任何事情。任何建议

Option Explicit

Sub hideColumns()

Dim falseColumnRange As Range
Dim grp2 As Range

Set falseColumnRange = GetFalseColumnRange(Range("A1", Cells(1, Columns.Count).End(xlToLeft).Offset(1)))

If Not falseColumnRange Is Nothing Then
    For Each grp2 In falseColumnRange.Areas 
        grp2.Columns.Group
    Next
End If

End Sub

Function GetFalseColumnRange(rng2 As Range) As Range
    Dim ColumnRange As Range
    Dim Cell As Object
    For Each Cell In rng2
      If Cell.Value = False Then
        Set ColumnRange = Range(Cell.Address)
    Else
    End If
Next
End Function

2 个答案:

答案 0 :(得分:1)

你必须:

  • 使用Integer方法

  • 更新Content-Length, Content-Range, Content-Type
  • 最后将ColumnRange设置为Union()并返回找到的范围

    GetFalseColumnRange

答案 1 :(得分:1)

这是一个可行的GetFalseColumnRange

Function GetFalseColumnRange(rng2 As Range) As Range
    Dim ColumnRange As Range
    Dim Cell As Range

    For Each Cell In rng2
        If Cell.Value = False Then
            If ColumnRange Is Nothing Then
                Set ColumnRange = Cell
            Else
                Set ColumnRange = Union(ColumnRange, Cell)
            End If
        End If
    Next Cell
    Set GetFalseColumnRange = ColumnRange
End Function

使用此功能时,请注意空白单元格将被强制转换为False,因此请小心使用。否则你抓到的范围可能太大了。