【Excel VBA】既存シェイプの位置・サイズ・回転を自由自在に変更する方法

目次

はじめに

Excel VBAでレポートを自動生成する際、「このグラフを指定の場所に動かしたい」「特定のセルの大きさに図形をぴったり合わせたい」といった、レイアウト調整の自動化が必要になる場面は多いですよね。

VBAを使えば、シート上にすでにあるシェイプ(図形やグラフ、テキストボックスなど)の位置、大きさ、さらには回転角度まで、コードで正確にコントロールすることが可能です。

この記事では、既存のシェイプを操作するための基本的なプロパティと、具体的なVBAコードを2つの実践パターンに分けて解説します。


シェイプを操作する基本プロパティ

シェイプの見た目をVBAで変更するには、主に以下の5つのプロパティを扱います。

  • Top: ワークシートの上端からシェイプの上端までの距離
  • Left: ワークシートの左端からシェイプの左端までの距離
  • Width: シェイプの幅
  • Height: シェイプの高さ
  • Rotation: シェイプの回転角度(時計回り)

これらのプロパティの単位はすべてポイント(1ポイント ≒ 0.35mm)で指定します。


事前準備:シェイプに名前を付ける

VBAで特定のシェイプを間違いなく操作するために、あらかじめシェイプに固有の名前を付けておくことを強くおすすめします。

  1. 操作したいシェイプを選択します。
  2. リボンに表示される「図形の書式」タブをクリックします。
  3. 「選択」グループにある「オブジェクトの選択と表示」をクリックすると、画面右側に選択ウィンドウが開きます。
  4. 一覧から対象のシェイプを選択し、名前をダブルクリックして編集します。(例:「サンプル図形」)

実践1:数値で直接、位置やサイズを指定する

最も基本的な方法が、TopLeftなどの各プロパティに数値を直接代入する方法です。これにより、シェイプをミリ単位で正確に配置できます。

VBAコード例

以下のコードは、「サンプル図形」という名前のシェイプを特定の位置に移動させ、サイズを変更し、少し回転させる例です。

Sub MoveShapeByValue()

    ' "サンプル図形"という名前のシェイプを操作します
    With ActiveSheet.Shapes("サンプル図形")
        ' 上からの位置を100ポイントに設定
        .Top = 100
        
        ' 左からの位置を50ポイントに設定
        .Left = 50
        
        ' 幅を250ポイントに設定
        .Width = 250
        
        ' 高さを150ポイントに設定
        .Height = 150
        
        ' 15度回転させる
        .Rotation = 15
    End With

End Sub

コードの解説

With ActiveSheet.Shapes("サンプル図形") ... End With構文を使うことで、ActiveSheet.Shapes("サンプル図形")という長い記述を何度も書く手間が省け、コードがスッキリします。ブロック内の.Top.Leftは、すべて「サンプル図形」のプロパティを指しています。


実践2:セル範囲に合わせて位置とサイズを指定する

シェイプを特定のセル範囲にぴったり合わせたい場合、Rangeオブジェクトのプロパティを利用すると非常に便利です。

VBAコード例

以下のコードは、「サンプル図形」をC3セルからF8セルの範囲にぴったり合うように移動・リサイズする例です。

Sub AlignShapeToRange()

    ' 変数を宣言します
    Dim targetArea As Range
    
    ' 基準となるセル範囲を設定します
    Set targetArea = ActiveSheet.Range("C3:F8")
    
    ' "サンプル図形"という名前のシェイプを操作します
    With ActiveSheet.Shapes("サンプル図形")
        ' シェイプの上端をセル範囲の上端に合わせる
        .Top = targetArea.Top
        
        ' シェイプの左端をセル範囲の左端に合わせる
        .Left = targetArea.Left
        
        ' シェイプの幅をセル範囲の幅に合わせる
        .Width = targetArea.Width
        
        ' シェイプの高さをセル範囲の高さに合わせる
        .Height = targetArea.Height
        
        ' 回転をリセット(0度に戻す)
        .Rotation = 0
    End With
    
    ' オブジェクト変数を解放します
    Set targetArea = Nothing

End Sub

コードの解説

targetAreaというRange型の変数に基準となるセル範囲を設定しています。Rangeオブジェクトもシェイプと同様に.Top, .Left, .Width, .Heightといったプロパティを持っているため、それらの値をシェイプの各プロパティに代入するだけで、簡単にサイズと位置を同期させることができます。


まとめ

今回は、VBAを使って既存のシェイプの位置、サイズ、回転を制御する方法を解説しました。

ポイントの振り返り:

  • 基本プロパティ: Top, Left, Width, Height, Rotation を使う。
  • 確実な操作: シェイプには固有の名前を付けてShapes("シェイプ名")で指定する。
  • 数値指定: 固定のレイアウトにしたい場合に、ポイント単位で正確に配置できる。
  • セル範囲指定: Rangeオブジェクトのプロパティを使い、動的なレイアウト調整を簡単に行える。

これらのテクニックをマスターすれば、見栄えの良いレポートの自動生成や、ユーザーの操作に応じてレイアウトが変化するような、より高度なツールの作成に応用できます。ぜひ活用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次