1.例えばShapeで四角形を描画する操作をマクロ記録すると・・・
Sub 四角形()
ActiveSheet.Shapes.AddShape _
(msoShapeRectangle, 100, 50, 100, 50).Select
End Sub
のようになりますが、シート上でのRange操作のマクロ記録と
同じように、Selectする必要は必ずしもありません。
これをVBAで記述しやすいようにするには、通常Shape型で宣言した
オブジェクト変数を用意して、Set ステートメントを用います。
Sub 四角形2()
Dim MyShape As Shape
Set MyShape = ActiveSheet.Shapes.AddShape _
(msoShapeRectangle, 100, 50, 100, 50)
End Sub
2.次に、書式設定の記録マクロの修正です
例えばShapeの色を変えたり、線の太さを指定するときのマクロ記録は
Selection.ShapeRange.Line.Weight = 2
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
などのようになりますが、上の四角形2プロシージャのように
Shapeを選択しない場合は・・・
With ActiveSheet.Shapes.Range(MyShape.Name)
.Line.Weight = 2
.Fill.ForeColor.SchemeColor = 10
End With
※Range(Array(〜,〜))とすると、一度に複数のShapeを扱うことが出来ます。
3.その他のShape
・楕円
Set Shape1 = ActiveSheet.Shapes.AddShape _
(msoShapeOval, 100, 150, 100, 100)
・額縁
Set Shape2 = ActiveSheet.Shapes.AddShape _
(msoShapeBevel, 100, 100, 150, 50)
・上下矢印
Set Shape3 = ActiveSheet.Shapes.AddShape _
(msoShapeUpDownArrow, 100, 100, 50, 100)
他にもShapeはたくさんの種類がありますが、基本はマクロ記録です。
ぜひお試しください。
|