2

Excelの相互運用機能を使用して列をグループ化するにはどうすればよいですか?

マクロを記録すると(通常は開始するのに良い方法です)、次のコードを取得します。

Columns("I:M").Select
Selection.Columns.Group

残念ながら、少なくともC ++では、いくつかの問題が原因でこれは機能しません。まずApplication.Selection、通常のを返しRange、次にRange.Columns別のを返しますRange。そしてRange.Group、この方法は次のとおりです。

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.group%28v=office.11​​%29.aspx

この方法は、ピボットテーブルに関連してのみ機能します。

では、Excelの相互運用機能を使用して列グループを作成するにはどうすればよいですか?

グループを作成できたとしても、どうすれば縮小/拡大できますか?つまり、+をクリックしてグループのコンテンツを表示するか、またはその逆で、マイナスをクリックしてグループを非表示にします。マクロの記録中にこれを行うと、マクロにはまったく反映されません。

4

2 に答える 2

2

Range.Group()ドキュメントはピボットテーブルに関連しているように見えますが、を使用して列を抽出し、その範囲にメソッドをRange.Columns適用する.Group()と、目的の効果が得られます。C#の場合:

Range range = sheet.get_Range("c1","e1");
range.Columns.Group();

編集:完全な例、これもC#で(申し訳ありませんが、これは私が便利な例です):

Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
app.Visible = true;
app.Workbooks.Add();
Worksheet sheet = app.Workbooks[1].Sheets[1];
Range range = sheet.get_Range("c1","e1");
range.Columns.Group();
于 2012-04-20T14:12:44.937 に答える
1

マクロレコーダが不明瞭にしていることの1つは、Range.EntireColumnプロパティを使用する必要があることです。グループ化、展開、折りたたみを行うコードを次に示します。私はグーグルと浮気によってこれを手に入れました、しかしそれは概念を正しく理解していると思います。うまくいけば、C++に変換するのは簡単です。

Sub test()
Dim ws As Excel.Worksheet

Set ws = ActiveSheet
With ws
    If .Columns.OutlineLevel > 1 Then
        'clear any existing hidden grouped columns and grouping
        .Outline.ShowLevels columnlevels:=.Columns.OutlineLevel
        .Range("1:1").EntireColumn.Ungroup
    End If
    'group
    .Range("A:C").EntireColumn.Group
    'collapse
    ws.Outline.ShowLevels columnlevels:=1
    'expand
    ws.Outline.ShowLevels columnlevels:=.Columns.OutlineLevel
End With
End Sub
于 2012-04-20T14:06:37.227 に答える