以编程方式对行或列进行分组和取消分组

有没有办法在Excel 2010中以编程方式对列或行进行分组/取消分组?

注意:

  • “手动”命令在数据>大纲>组/取消组合
  • 在excel 2003中,这用于工作: someSheet.columns(i).ShowDetail = True / False但它不再在2010年的组(仅适用于数据透视表和小计分组)
  • 录制一个macros不会产生任何我可以使用的代码

更确切地说,在Excel 2010中调用myRange.ShowDetail = True可以展开折叠的组,但是如果该组已经展开,则会引发错误。 ShowDetail属性返回True,无论组是否展开。

在Excel 2010中,无论ShowDetail属性是否折叠或展开, ShowDetail属性总是返回true。 Hidden属性可以用来代替:

 'to expand If myRange.EntireColumn.Hidden Then myRange.EntireColumn.ShowDetail = True End If 'to collapse If Not myRange.EntireColumn.Hidden Then myRange.EntireColumn.ShowDetail = False End If 

关于不在透视表中的行…这不是我在Excel 2010中的经验,ShowDetail总是评估为True。 我认为这样做,但我没有意识到,我需要在这个财产总结行上按预期工作。 其次,我没有意识到默认的汇总行是在分组的行之下。 一旦我将该设置更改为在分组行之上具有摘要行(在function区:数据>大纲,显示大纲框中),折叠/展开的testing就变得更清晰了。

如果我选定的单元格在摘要行上,则ShowDetail评估值为True,如果分组logging正在显示,则为False。 对我来说关键在于总结一行,看看这种行为是如何运作的。 默认情况下,上面的孩子/分组行是真的扔我。

这里是我的macros,当我在汇总行中select一个单元格时,它dynamic扩展和折叠与汇总行关联的分组logging。 而且,如果该部分展开,则会使A列中的单元格变为粗体。 如果我select了多个单元格,此macros不会运行。

请注意,工作表保护可防止展开和折叠单元格组。 我的工作表是受保护的,所以我取消保护工作表以展开/折叠,然后重新保护它们。 (一个可能的改进是我只需要解除/保护当前表单而不是全部表单。)

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'TOGGLE SHOW/HIDE ROW If Target.Cells.Count = 1 Then If (Target.EntireRow.OutlineLevel = 1) And (Target.Offset(1, 0).EntireRow.OutlineLevel = 2) And _ (Target.Column < 15) Then Call Macros.ProtShts(False) Target.EntireRow.ShowDetail = Not Target.EntireRow.ShowDetail If Target.EntireRow.ShowDetail = True Then Range(Cells(Target.Row, 1), Cells(Target.Row, 14)).Font.Bold = True Else Range(Cells(Target.Row, 1), Cells(Target.Row, 14)).Font.Bold = False End If Call Macros.ProtShts(True) End If End If End Sub 

请记住,我将我的摘要行设置在分组logging之上。 如果您的汇总行低于分组logging(缺省值),则偏移行参考必须更改为-1,如下所示:

 (Target.Offset(1, 0).EntireRow.OutlineLevel = 2) 

最好的办法就是改变你隐藏范围内单元格的列宽。 这将自动取消组合select。

 dim wsA as worksheet set wsA = Worksheets("Name of your Worksheet") wsA.Columns("A:AJ").Columns.Group wsA.Range("A:A").ColumnWidth = 22.22 ' make the change to one of the cells in the group that you want to unhide.