和風スパゲティのレシピ

日本語でコーディングするExcelVBA

図形(Shape)のサイズを変更する - Width/Height

図形(Shape)のサイズを変更する方法を解説します。

ShapeオブジェクトのWidth・Heightプロパティを使用します。

また、縦横比を固定したい場合は、
LockAspectRatioプロパティを使用します。

基本構文

対象Shape.Width = 幅(単位:ポイント)
対象Shape.Height = 高さ(単位:ポイント)

' 縦横比固定で変更する場合
対象Shape.LockAspectRatio = msoTrue  ' 縦横比を固定
対象Shape.Width = ' ← 変更に応じてHeightも自動で調整されます。

サンプルコード

Dim 対象図形 As Shape
Set 対象図形 = ActiveSheet.Shapes("TextBox 1")

' 幅・高さを指定
対象図形.Width = 200
対象図形.Height = 100

' 今のサイズから変更
対象図形.Width = 対象図形.Width + 50
対象図形.Height = 対象図形.Height + 20

' 縦横比を固定して幅を変更
対象図形.LockAspectRatio = msoTrue
対象図形.Width = 200 ' ← Heightも追従します。

' 縦横比を固定して倍率で拡大縮小
対象図形.LockAspectRatio = msoTrue
対象図形.Width = 対象図形.Width * 1.5 ' 150%に拡大
対象図形.Width = 対象図形.Width * 0.5 ' 50%に縮小

' セル範囲のサイズに合わせる
Dim サイズ基準セル範囲 As Range
Set サイズ基準セル範囲 = Range("B2:D5")

対象図形.LockAspectRatio = msoFalse
対象図形.Width = サイズ基準セル範囲.Width
対象図形.Height = サイズ基準セル範囲.Height

解説

図形(Shape)のサイズを変更するには、
変更後のサイズをWidth/Heightプロパティで指定します。

Widthプロパティが横幅、Heightプロパティが高さを表します。


サンプルの通り、元のWidth/Heightを計算に使用することができ、
特に「元の大きさ × 倍率」で倍率指定の拡大/縮小ができます。


また、縦横比を保ったままサイズ変更したい場合は、
LockAspectRatioプロパティにmsoTrueを指定します。

対象図形.LockAspectRatio = msoTrue
対象図形.Width = 200

このように書くと、幅に合わせて高さも自動で調整されます。

逆に、横幅と高さをそれぞれ自由に指定したい場合は、
LockAspectRatioをmsoFalseにしてからWidth/Heightを設定してください。


なお、Width/Heightを変更しても図形の左上位置は変わりません。

つまりサイズを大きくすると、図形は右方向・下方向へ広がります。


中央位置を保ったままサイズ変更したい場合は、
Width/HeightだけでなくTop/Leftもあわせて調整するか、
その機能を持った「ScaleWidth/ScaleHeightメソッド」を使用します。

詳しい解説はこちらの記事をどうぞ
www.limecode.jp