[ VBA ] グループ化してない範囲でUngroupすると出ちゃうエラーの回避法

Excelで行や列をグループ化することができます。これをVBAを使ってやるなら、次のように書きます。

Range("1:3").Group

これで、1行目から3行目までをグループ化することができます。もう一度実行すれば、さらに1つ階層が深くなります。

一方、グループ化の解除は、次のように書きます。

Range("1:3").Ungroup

こう書けば、1行目から3行目までのグループ化を解除するこができます。階層が深い場合は、1つ階層が上がります。1階層しかない場合は、グループ化が解除されます。

ところが、ここでやっかいなことが起こります。もしグループ化されていない場合に「Ungroup」を実行しようとすると、エラーになってしまうんですよね。「RangeクラスのUngroupメソッドが失敗しました」というエラーが出てしまいます。

このため、エラーを出さずにUngroupを使うなら、その範囲がグループ化されているかどうかを調べないといけない、ということになってしまいます。しかし、もし「グループ化されていたら、全てのグループ化を削除したいんだ」というのであれば、次のようにすればOKです。

Range("1:3").ClearOutline

こうすると、階層が浅くても深くても、その範囲に設定されたグループ化がすべて削除されます。グループ化されていない範囲を指定しても、何も起こりません。エラーも起こりません。なので、上記のエラーをとりあえず回避したければ、このClearOutlineを使うのがいいと思います。

もし、シート全体からすべての階層のグループ化を削除したい、しかもエラーは出したくないというのであれば、

Cells.ClearOutline

と書けばOKです。

前の記事:
[ Excel ] 一度にたくさんのセルの値を結合したい
次の記事:
[ VBA ] ChartObjectオブジェクトというイケてない名前のオブジェクトについて