【VBA】複数の図形を選択して位置やサイズを一括変更する方法

VBA

Excel VBAを使用して、シート上の複数の図形を選択し、これらの図形の位置やサイズを一括で変更することができます。今回は、特定の図形を選択して操作する方法と、シート上のすべての図形を選択して一括操作する方法を紹介します。

コードの概要

以下のコードは、特定の図形を選択して位置やサイズを変更する方法と、すべての図形を選択して同様の操作を行う手順を示しています。

Sub ModifyShapes()
    ' 特定の図形を選択
    ActiveSheet.Shapes.Range(Array(1, 2)).Select

    ' 全図形を選択
    ' ActiveSheet.Shapes.SelectAll

    ' 選択した図形の操作
    With Selection
        .LockAspectRatio = msoTrue ' msoFalse にすると縦横比固定なし
        .Height = 100
        .Width = 737.01
        .Left = Range("B2").Left ' 左位置をセルB2に設定
        .Top = Range("B2").Top ' 上位置をセルB2に設定
        .PictureFormat.CropLeft = 0
        .PictureFormat.CropTop = 0
        .PictureFormat.CropRight = 0
        .PictureFormat.CropBottom = 0
    End With
End Sub

コードの詳細解説

1. 複数の図形を選択

ActiveSheet.Shapes.Range(Array(1, 2)).Select
  • ActiveSheet.Shapes.Range(Array(1, 2)).Select: 現在のシートで、インデックス1と2の図形を選択します。Array の中に、選択したい図形のインデックス番号をカンマで区切って指定します。

2. すべての図形を選択

ActiveSheet.Shapes.SelectAll
  • ActiveSheet.Shapes.SelectAll: シート上のすべての図形を一括で選択します。このコードを有効にすると、全図形に対して一括操作が可能になります。

3. 図形の操作

With Selection
    .LockAspectRatio = msoTrue ' 縦横比を固定
    .Height = 100 ' 高さを100に設定
    .Width = 737.01 ' 幅を737.01に設定
    .Left = Range("B2").Left ' 左位置をセルB2に設定
    .Top = Range("B2").Top ' 上位置をセルB2に設定
    .PictureFormat.CropLeft = 0 ' 左のトリミングを0に設定
    .PictureFormat.CropTop = 0 ' 上のトリミングを0に設定
    .PictureFormat.CropRight = 0 ' 右のトリミングを0に設定
    .PictureFormat.CropBottom = 0 ' 下のトリミングを0に設定
End With
  • LockAspectRatio = msoTrue: 図形の縦横比を固定します。msoFalse にすると、縦横比が固定されずにサイズが変更されます。
  • HeightWidth: 図形の高さと幅を指定します。
  • LeftTop: 図形の左上位置を指定します。この例では、セル B2 の左上に図形を配置しています。
  • PictureFormat.CropLeft, CropTop, CropRight, CropBottom: 図形のトリミングを設定します。ここではトリミングを行わないため、すべて 0 に設定しています。

実用例

例えば、プレゼンテーションやレポートの作成時に、複数の画像や図形を同じ位置やサイズに揃える場合、このマクロを使用することで手動での調整を省略できます。また、同じ位置に異なる図形を複数配置する場合にも便利です。

すべての図形を同じサイズに揃え、シート内の特定の位置に配置する例

Sub AlignAndResizeShapes()
    ' すべての図形を選択
    ActiveSheet.Shapes.SelectAll

    ' 選択した図形を統一したサイズと位置に設定
    With Selection
        .LockAspectRatio = msoFalse
        .Height = 150
        .Width = 200
        .Left = Range("C3").Left
        .Top = Range("C3").Top
    End With
End Sub

この例では、すべての図形を高さ150、幅200に設定し、セル C3 の位置に揃えて配置します。

注意点

コマンドボタンを使うとコマンドボタン自体が図形の対象になるため、ボタンが変形してしまう

→図形を作成し、そこにマクロを挿入すると解決

まとめ

このVBAコードを使用することで、シート上の複数の図形を簡単に一括操作できます。特に、プレゼンテーション資料や報告書の作成時に、図形のサイズや位置を統一する必要がある場合に非常に有効です。ぜひ、作業の効率化に役立ててください。


図形の変形一個一個やるの大変すぎるよねー

ではまたー

コメント

タイトルとURLをコピーしました