Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
ClearOutlieについて
投稿日時: 20/01/24 15:35:58
投稿者: せりむ

ClearOutlieについて教えて頂きたく投稿いたします。
下記、I列から最終列までのグループ化を解除したく記述したのですが、
実行致しますと、目的であるところの列のグループ化の解除と同時に
1行目のグループ化まで解除されてしまうのですが
ClearOutlieでは行or列の指定は可能なものでしょうか?
調べた限りでは情報を見つけることが出来ず、既出でしたら申し訳ございません、
どなたかご教授の程宜しくお願い致します。
 
追記:希望の範囲内にはグループ化されていない個所もあり、その範囲が日々変化することから
Ungroupでは対応できないとの情報をWeb上にて発見したために
ClearOutlineの使用を試みた次第でございます。
 
以下記述内容
Sub Macro1()
 
Dim MaxCol As Variant
MaxCol = Cells(1, Columns.Count).End(xlToLeft).Column
 
Range(Cells(1, 9), Cells(1, MaxCol)).Select
Selection.Columns.ClearOutlie
 
End Sub
 
以下使用のワークシート状況
    [---------------] [---]←グループ化
    H I J K L M N O P Q R S T U
1
2
 

回答
投稿日時: 20/01/24 17:59:45
投稿者: sk

引用:
ClearOutline

引用:
Ungroup

まず大前提として、ClearOutline メソッド(アウトラインのクリア)と
Ungroup メソッド(グループ化の解除)は、似ているようですが
同じ命令ではありません。
 
引用:
目的であるところの列のグループ化の解除と同時に
1行目のグループ化まで解除されてしまうのですが
ClearOutlieでは行or列の指定は可能なものでしょうか?

[アウトラインのクリア]コマンドは文字通り
「指定されたセル範囲のアウトラインを消去する」命令であり、
行/列の区別なく、範囲内の全てのアウトラインがクリアされます。
 
一方、[グループ化の解除]コマンドについては
「解除」という表現から一見「消去」と同じ意味に捉えられがちですが、
厳密に言えば「アウトラインレベルを上げる」命令です。
 
・指定された列のアウトラインレベルが 2 である場合、
 その列に対して UnGroup メソッドを実行すれば
 グループ化/アウトライン設定が解除される。
 
・指定された列のアウトラインレベルが 3 以上である場合、
 その列に対して UnGroup メソッドを実行すれば
 アウトラインレベルが 1 つ上がって、上位のグループに統合される
 (全てのレベルのグループがなくなるわけではない)
 
・指定された列のアウトラインレベルが 1 である
 (グループ化されていない列である)場合、
 その列に対して UnGroup メソッドを実行すれば
 実行時エラーが発生する。
 
引用:
希望の範囲内にはグループ化されていない個所もあり、その範囲が日々変化する

「アウトラインレベルの高さ/低さを無視して
指定した列(のみ)のアウトライン設定を解除する」
というのが目的なのであれば、少なくとも ClearOutline メソッドを
使うべきではないでしょう。
 
引用:
Range(Cells(1, 9), Cells(1, MaxCol)).Select
Selection.Columns.ClearOutlie

Range(Cells(1, 9), Cells(1, MaxCol)).EntireColumn.OutlineLevel = 1

投稿日時: 20/01/28 12:51:23
投稿者: せりむ

>sk様
ありがとうございます、疑問が解消いたしました!
アウトラインレベルを(体感としてグループ化がない状態に)設定するイメージになるのですね。