このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】グループ化の解除を全ての図形に対して行う方法

2024年3月17日

【VBA】グループ化の解除を全てのオートシェイプに対して行う方法

今回は全ての図形に対してグループ化を解除する方法を紹介します。

グループ化の解除は簡単そうに見えて、少し工夫が必要です。

二重にグループ化されていると1回解除してもグループ化が残る

グループ化は1回だけではなく、グループ化された図形をさらにグループ化することができます。

そのためFor Eachループですべての図形のグループ化解除をしても、グループが残ることがあります。

この記事では何重にもグループ化されていてもすべてのグループ化を解除できる方法を紹介します。

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

すべての図形に対してグループ化を解除する方法

Sub UngroupAllShape()
    '''アクティブシート上のすべての図形に対してグループ化を解除
    
    Dim existGroup As Boolean
    
    ''existGroupがTrueの間はループ処理する
    Do
        existGroup = False 'フラグの初期化
        
        Dim oneShp As Shape
        For Each oneShp In ActiveSheet.Shapes
            
            ''グループ化されているか判定
            If oneShp.Type = msoGroup Then
                
                'グループ解除かつフラグをTrueに
                oneShp.Ungroup
                existGroup = True
            End If
        Next
        
        ''グループ化されたオブジェクトが1つもない⇒ループ処理終了
        If existGroup = False Then Exit Do
    Loop
End Sub

すべての図形のグループ化を解除するコードはこのようになります。

このコードを実行するとアクティブシート上のすべてのグループ化が解除されます。

グループ化を解除する仕組み

このプログラムのミソはDoループの部分です。

1回ループする度にグループ化されている図形がないかを調べています。

                'グループ解除かつフラグをTrueに
                oneShp.Ungroup
                existGroup = True

そして、グループ化されている図形がある場合はグループ化を解除し、existGroupという変数をTrueにしています。

そして、ここがTrueの場合はもう一度Doループされるようになっています。

最終的にグループ化された図形がなくなり、existGroupがFalseのままとなるとDoループから抜けだす仕組みになっています。

少し長いコードですが、貼り付けるだけで簡単に動くので活用してみてください。

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

VBA

Posted by やろまい