编辑: 下面的两个代码几乎都是完美的,但最终还是有同样的问题。 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
答案 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
,因此请小心使用。否则你抓到的范围可能太大了。