🕒 2015/04/20
🔄 2023/04/22
[ 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です。