<<目次へ


VBAを使ってグラフと図形を作ってみる

 Excelにはグラフ作成機能と図形を描写するオートシェイプという機能が備わっています。VBAを使用することによって,より複雑なグラフや図形を作成することができるようになるので使いこなせればどんな分野でもかなり役立つと思います。

1. 線を引く(Rのablineと同じようなもの)

- linesプロシージャは線を引きます。
- lines_colorプロシージャは色を変更します。
- lines_styleプロシージャは線のスタイルを変更します。

Sub lines()

    '始点の座標(10,10) 終点の座標(200,200)
    Worksheets("Sheet1").Shapes.AddLine beginx:=10, beginy:=10, endx:=200, endy:=200
    
    '始点の座標(200,10) 終点の座標(10,200)
    Worksheets("Sheet1").Shapes.AddLine beginx:=200, beginy:=10, endx:=10, endy:=200
    
End Sub

Sub lines_color()
    Worksheets("Sheet1").Shapes.AddLine(beginx:=10, beginy:=10, endx:=200, endy:=200).Select
    Selection.ShapeRange.line.ForeColor.SchemeColor = 3
    
    Worksheets("Sheet1").Shapes.AddLine(beginx:=200, beginy:=10, endx:=10, endy:=200).Select
    Selection.ShapeRange.line.ForeColor.SchemeColor = 5
End Sub

Sub lines_style()
    Worksheets("Sheet1").Shapes.AddLine(beginx:=10, beginy:=10, endx:=200, endy:=200).line.DashStyle = msoLineDash
    
    Worksheets("Sheet1").Shapes.AddLine(beginx:=200, beginy:=10, endx:=10, endy:=200).line.DashStyle = msoLineDash
End Sub

~線の種類を変える方法~

[オブジェクト.Line.DashStyle=msoLineDash]・・・赤い部分を変更することによって線のスタイルを変えることができます(指定できるものは以下を参照)。

2. 複数の図形を1つにまとめる(図形のグループ化と解除)

・ワークシートに描かれている全ての図形をグループ化する

Sub work_group()
    Worksheets("Sheet1").Shapes.SelectAll
    Selection.group
End Sub

・グループ化した図形を解除するには次のようにします

Sub group_kaijyo()
    Worksheets("Sheet1").Shapes.SelectAll
    Selection.Ungroup
End Sub

・全ての図形ではなく,任意の複数の図形を選びたい場合

Sub koko_group02()
  '2番目と3番目のシェイプを選択
    Worksheets("Sheet1").Shapes.Range(Array(2, 3)).Select
End Sub

3. 図形を動かしてみる(アニメーション)

 VBAのコードを記述する前に動かす図形を何でもいいのであらかじめ作っておいてください。

Sub ani()
    Dim i As Integer
    
    For i = 1 To 5
        With Worksheets("Sheet1").Shapes(1)
            .IncrementLeft increment:=10
            .IncrementTop increment:=0
        End With
        Application.Wait TimeSerial(Hour(Now()), Minute(Now()), _
        Second(Now()) + 1)
        DoEvents
    Next i
End Sub

*increment:=10の部分とincrement:=0の部分の数値を変更してみて下さい。図形の移動方向が変わります。
*Second(Now())+1の数値を2に変えれば2秒ごとに図が移動します。ただし指定できるのは整数のみです。