- ベストアンサー
エクセルマクロ、アウトラインについて
マクロでアウトラインの展開を ExecuteExcel4Macro "SHOW.DETAIL(2,3)" で展開できますが、3という数字で指定ではなく、変数で場所を指定したいです。何かいい方法があれば教えて下さい。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 もしかしたら、その表というのは、アウトラインと集計と複合的に出来ていませんか? 先ほど、何度も試してみて、集計だけだと思い込んでいたのです。質問を読み違えていました。そもそも、私が前回の質問が印象に残っていたのが原因なのですが。確かに、手作業ではややこしく面倒です。 もしそうだとすると、こうなるのでしょうね。 j =2 ' On Error Resume Next 'エラーが発生するようなら、これを入れてください。 With ActiveSheet .Outline.ShowLevels rowLevels:=0, columnLevels:=j End With Range("A1").Select アウトラインをどのように作ったかは別として、2以上を入れればよいのではないかと思っています。途中、ピボットテーブルもどうかと思ったのですが、それもできないし、こういうのは、初めてです。うまくいくかどうか・・・・。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 今、ShowDetail と .Outline.ShowLevels と両方を試してみました。 ShowDetail は、列に対しては、なぜか、VBAメソッド側は、エラーが発生します。理由は良く分かりません。 やはり、列指定の場合は、以下のように、Ver.4 マクロ関数を使わざるを得ませんでした。 ShowDetail の場合は、列番号を指定しなくてはなりません。つまり、シートの「+」「-」をクリックするのと同じことです。 Dim i As Integer '列の表示・非表示 i = 10 '列数を指定 ret = Application.ExecuteExcel4Macro("SHOW.DETAIL(2," & i & ")") End Sub しかし、#3 で示した方法なら、ワークシートの一番左上の数の、数字のレベルによって変化するはずです。通常なら、1 で、すべての列が非表示で合計欄だけになり、2 .... と続きます。#3のコードを手直ししてみました。 '標準モジュールのみ Sub TestShowLevel() Dim i As Integer Dim j As Integer Dim r As Range Static k As Integer On Error Resume Next With ActiveSheet Set r = Range("A1").CurrentRegion i = r.Rows(1).SpecialCells(xlCellTypeVisible).Count j = r.Rows(1).Cells.Count If j - i > 0 Then k = k + 1 Else k = 1 End If .Outline.ShowLevels rowLevels:=0, columnLevels:=k End With End Sub
お礼
ありがとうございます。 大変参考になりました。 また機会がありましたらよろしくお願いします。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 たぶん、行に対して、アウトラインを展開しているなら、列は、1でよいと思いますね。 VBAメソッド側は、そういう違いが出ません。 なお、i は、"*集計"のところの行を指定してください。 マクロ関数側のret は、ダミーです。エラーは返ることはないはずですが、一応、置いておきました。必要なければ取ってもかまいません。 'マクロ関数 Sub Test1() Dim ret As Variant Dim i As Long i = 3 ret = Application.ExecuteExcel4Macro("SHOW.DETAIL(1," & i & ")") End Sub 'VBA メソッド Sub Test2() Dim i As Long i = 3 ActiveSheet.Rows(i).ShowDetail = Not ActiveSheet.Rows(i).ShowDetail End Sub
お礼
ありがとうございます。できました。 アウトライン展開は行、列でしています。 ちなみに参考までに。。。 行は ActiveSheet.Rows(i).ShowDetail。。。 でできることがわかりましたが、列の場合rowsをcolumnsに変えてみましたが反応しません。 見た目的にVBAメソッドに書いてある関数のほうがきれいなのでできれば使いたいです。
- zap35
- ベストアンサー率44% (1383/3079)
実際の動作は確認していませんが、 a = 3 ExecuteExcel4Macro "SHOW.DETAIL(2," & a & ")" ではいかがでしょうか?
お礼
ありがとうございます。できました。
お礼
ありがとうございます。 前回の回答でOKです。読み違えてはいませんよ。 特定のアウトラインをいじりたいので前回ので問題は解決しています。 お手数おかけしました。 で、rowsは列を指定しますが、行をいじりたい場合なんと書けばよいかわかりませんか。