Softex CelwareTech Blog
Excel VBA2026-05-14

Shapeを90度回転してセル範囲に合わせるExcel VBA汎用プロシージャ

Excel VBAでShapeを90度回転し、指定したセル範囲の中心とサイズに合わせる汎用プロシージャを解説します。

Excel VBA汎用プロシージャShapeRange図形

概要

RotateShapeFitCellは、Excel VBAShapeを90度回転し、指定したRangeの位置とサイズに合わせるための汎用関数です。

バーコード画像や矢印などの図形を、印刷用レイアウトのセル範囲にきれいに収めたいときに使えます。回転後の幅と高さをセルに合わせ、中心座標の差分を計算して図形を移動します。

使う場面

  • 横向きに作成したバーコードを、印刷用紙に合わせて縦向きに配置したい
  • 図形を90度回転したうえで、指定セル範囲の中央に合わせたい
  • Shape.LeftShape.Topの直接指定だけでは位置合わせが崩れる処理を共通化したい
  • 帳票やラベル印刷用の図形配置を再利用できる形にしたい

処理イメージ図

RotateShapeFitCellの図形回転とセル合わせイメージ

使用例

下の例では、BarcodeShapeという名前の図形を取得し、B2セルの位置とサイズに合わせます。

使用例
vba
Dim BarcodeShape As Shape

Set BarcodeShape = ActiveSheet.Shapes("BarcodeShape")
Set BarcodeShape = RotateShapeFitCell(BarcodeShape, ActiveSheet.Range("B2"))

コピー可能な実装コード

RotateShapeFitCell.bas
vba
' === Module: ModShape ===

Public Function RotateShapeFitCell(ByRef Shape As Shape, _
                                    ByRef Cell As Range) _
                                               As Shape
'Shapeを90度回転させてCellのサイズにあわせる
'20260122

'引数
'Shape・・・対象のShape
'Cell ・・・位置をあわせるCell

    '一旦移動する(左上から遠くに置いておかないと変形に影響が出る)
    Shape.Left = WorksheetFunction.Max(Shape.Width, Shape.Height) * 2
    Shape.Top = WorksheetFunction.Max(Shape.Width, Shape.Height) * 2

    '縦横比変更
    Shape.Width = Cell.Height
    Shape.Height = Cell.Width

    '90度回転
    Shape.Rotation = 90

    'CellとShapeの中心座標計算
    Dim ShapeCenterTop  As Double: ShapeCenterTop = Shape.Top + Shape.Height / 2
    Dim ShapeCenterLeft As Double: ShapeCenterLeft = Shape.Left + Shape.Width / 2
    Dim CellCenterTop   As Double: CellCenterTop = Cell.Top + Cell.Height / 2
    Dim CellCenterLeft  As Double: CellCenterLeft = Cell.Left + Cell.Width / 2

    '移動量計算(中心座標の差分が移動量)
    Dim MoveLeft As Double: MoveLeft = CellCenterLeft - ShapeCenterLeft
    Dim MoveTop As Double: MoveTop = CellCenterTop - ShapeCenterTop

    'Shape移動
    Call Shape.IncrementLeft(MoveLeft)
    Call Shape.IncrementTop(MoveTop)
    '※ 「Shape.Left = ** 」の処理はマイナスを指定できない

    '出力
    Set RotateShapeFitCell = Shape

End Function

初心者向けコード解説

ByRef Shape As Shapeは、回転・移動させたい図形を受け取る引数です。Excel上の図形、画像、バーコード画像などはShapeとして扱えます。

ByRef Cell As Rangeは、図形を合わせたいセル範囲です。単一セルだけでなく、結合セルや複数セル範囲を渡す設計にも応用できます。

最初にShape.LeftShape.Topを大きめの位置へ一旦移動しています。これは、左上付近で回転やサイズ変更を行うと、図形の変形や位置計算に影響が出ることを避けるためです。

Shape.Width = Cell.HeightShape.Height = Cell.Widthでは、90度回転する前提で幅と高さを入れ替えています。

Shape.Rotation = 90で図形を90度回転します。その後、図形とセルの中心座標をそれぞれ計算し、中心同士の差分をMoveLeftMoveTopとして求めています。

最後にIncrementLeftIncrementTopで図形を移動します。コメントにもある通り、Shape.Left = **だけでは扱いにくいケースがあるため、移動量で調整しています。

注意点

  • 図形名は事前に把握しておく必要があります。ActiveSheet.Shapes("BarcodeShape")のように取得します。
  • 90度回転専用の関数です。180度や任意角度にはそのまま対応していません。
  • セルの幅や高さが小さすぎる場合、図形も小さくなりすぎることがあります。
  • 図形の種類や元画像の余白によっては、見た目上の中央と座標上の中央がずれて見える場合があります。

まとめ

RotateShapeFitCellを使うと、VBAで図形を90度回転してセル範囲に合わせる処理を共通化できます。

バーコード、矢印、印刷用画像など、図形を帳票レイアウトへ合わせる処理で再利用しやすい汎用プロシージャです。

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →