Excelに貼り付いている図形/画像オブジェクト(シェイプ)をセルに合わせて位置を移動したり、セルと同じ大きさにサイズ変更するサンプルプログラムを覚え書き。
指定したセルに図形/画像オブジェクトを移動するサンプルプログラム
オブジェクトの移動は、移動したいオブジェクトを選択して高さの位置(Top)と横の位置(Left)を指定します。
つまり、指定したセルに移動したい場合は、そのセルの左上隅の位置(Top、Left)を指定します。
以下のサンプルプログラムは、アクティブなセルに"図形1"という名前の図形を移動するプログラムです。
Sub Sample2()
ActiveSheet.Shapes("図1").Select
Selection.ShapeRange.Top = ActiveCell.Top
Selection.ShapeRange.Left = ActiveCell.Left
End Sub
上記サンプルプログラムは、単純に図形をアクティブセルに合わせて移動しているだけなので、当然図形のサイズがセルより大きければセルからはみ出した状態となります。
図形/画像オブジェクトをセルと同じサイズに変更するサンプルプログラム
次のサンプルプログラムは、指定した図形/画像オブジェクトを指定したセルの大きさに合わせてサイズ変更するサンプルプログラムです。
図形/画像オブジェクトをセルの大きさに合わせる場合、画像のもともとの縦横の比率を維持した上でセルのサイズに合わせて画像サイズを変更するやりかたと、画像の縦横の比率を無視してセルのサイズに合わせる方法と2通りの合わせ方があります。
縦横の比率を維持するかしないかは、"Shapes"オブジェクトの"LockAspectRatio"プロパティに"msoTrue(比率を維持)"か"msoFalse(比率を無視)"を設定します。
図形/画像オブジェクトの縦/横の比率を維持してなるべくセルの大きさに合わせる
セルの大きさの縦/横の比率とサイズを合わせたい画像オブジェクトの縦/横の比率が等しくない場合に画像オブジェクトの縦/横比率を維持したまま画像のサイズを変更します。
当然画像オブジェクトの縦か横がセルからはみ出す結果になります。
セルの幅に合わせて画像のサイズを変更して画像を移動するサンプルプログラムと実行結果
以下は、図形/画像オブジェクトの縦横比率を維持したまま、アクティブセル(A1セル)の幅に合わせてサイズを変更、アクティブセルに移動するサンプルプログラムです。
Sub Sample3()
ActiveSheet.Shapes("図 1").LockAspectRatio = msoTrue
ActiveSheet.Shapes("図 1").Select
With Selection
.ShapeRange.Top = ActiveCell.Top
.ShapeRange.Left = ActiveCell.Left
.Width = ActiveCell.Width
End With
End Sub
サンプルプログラムで使用している画像オブジェクトは、ほぼ正方形に近い形なので結果として以下のように画像がセルから縦にはみ出る状態となってしまいます。
画像のサイズ変更、移動前
画像のサイズ変更、移動後
セルの高さに合わせて図形/画像のサイズを変更して画像を移動するサンプルプログラムと実行結果
以下は、図形/画像オブジェクトの縦横比率を維持したまま、アクティブセル(A1セル)の高さに合わせてサイズを変更、アクティブセルに画像を移動するサンプルプログラム。
Sub Sample4()
ActiveSheet.Shapes("図 1").LockAspectRatio = msoTrue
ActiveSheet.Shapes("図 1").Select
With Selection
.ShapeRange.Top = ActiveCell.Top
.ShapeRange.Left = ActiveCell.Left
.Height = ActiveCell.Height
End With
End Sub
同じようにセルの高さに合わせると、以下のようにセルのサイズに比べて画像の横サイズがだいぶ小さくなってしまいます。
図形/画像オブジェクトの縦/横の比率を無視してセルの大きさにピッタリと合わせる
図形/画像オブジェクトの縦/横の比率を無視して、セルの大きさにピッタリと合うようにサイズを変更します。
この場合、対象のオブジェクトの縦/横比率がセルの縦/横比率に無理やり合わせられてしまうため、画像が変形されます。
図形/画像の縦横比率を無視して画像をセルの大きさにぴったり合わせて移動するサンプルプログラムと実行結果
以下サンプルプログラムと実行結果。
Sub Sample5()
ActiveSheet.Shapes("図 1").LockAspectRatio = msoFalse
ActiveSheet.Shapes("図 1").Select
With Selection
.ShapeRange.Top = ActiveCell.Top
.ShapeRange.Left = ActiveCell.Left
.Width = ActiveCell.Width
.Height = ActiveCell.Height
End With
End Sub
縦横比率を無視してセルの幅と高さに画像の大きさを合わせているため、正方形に近かった元の画像が横長のセルにあわされたため、画像が変形してしまいます。
まとめ
オブジェクトをセルに合わせて移動させる場合、"ShapeRange.Top"と"ShapeRange.Left"を使います。
サイズを変更する際には、縦横の比率を維持するか無視するかを決め、"LockAspectRatio"プロパティで指定することを忘れないでください。
コメント