12/09/2020

Excel。VBA。簡単に複数のグラフのサイズを同じにして、位置も重ならずに揃えられます。【Graph size】

Excel。VBA。簡単に複数のグラフのサイズを同じにして、位置も重ならずに揃えられます。

<Excel VBA:グラフのサイズ位置調整>

シートに次のような3つのグラフがあります。


今回はわかりやすいように、極端に、サイズも位置も配置しております。

次のように、複数のグラフの大きさを同じにして、位置もグラフとグラフが重ならないように配置したのです。


 

本当に大した処理ではないわけです。

グラフのサイズを同じ大きさに変更して、ドラッグアンドドロップして重ならいように揃えればいいわけです。


しかし、数が増えると面倒ですし、資料作成のたびに、前回とグラフの大きさが変わったりしたらおかしくなります。


そこで、今回な面倒な処理も、Excel VBAで対応しちゃいましょう。


プログラム文自体も難しくなく、簡単に作ることができます。

では、下記がそのExcel VBAのプログラム文


Sub グラフ整列重複防止()

    Dim i As Long

    Dim j As Long

    

    j = 2

    

    With ActiveSheet

        .ChartObjects(1).Width = Range("a1:E15").Width

        .ChartObjects(1).Height = Range("a7:E15").Height

        .ChartObjects(1).Top = Cells(j, "g").Top

        .ChartObjects(1).Left = Cells(j, "g").Left

       

        If .ChartObjects.Count = 0 Then Exit Sub

        For i = 2 To .ChartObjects.Count

             j = j + 10


            .ChartObjects(i).Width = .ChartObjects(1).Width

            .ChartObjects(i).Height = .ChartObjects(1).Height

            .ChartObjects(i).Left = .ChartObjects(1).Left

            .ChartObjects(i).Top = Cells(j, "g").Top                 

        Next i

    End With    

End Sub


プログラム文の流れとしては、グラフ1(最初に挿入したグラフ)の大きさと配置場所を決定します。

その後、残りのグラフは、グラフ1を基準に大きさを同じにして、重ならないように配置場所をコントロールします。


それでは、プログラム文を確認してみましょう。


まずはお馴染みの変数宣言です。

Dim i As Long

Dim j As Long

    

j = 2

今回は変数2つ。Jには2を代入しておきます。


With ActiveSheet ~ End With

With文を使うことで、省略することが可能です。

ActiveSheetを何度も入力するのは面倒なので、With文を採用しましたが、わかりにくいようでしたら、ActiveSheetをつけてもOKです。


.ChartObjects(1).Width = Range("a1:E15").Width

.ChartObjects(1).Height = Range("a7:E15").Height

.ChartObjects(1).Top = Cells(j, "g").Top

.ChartObjects(1).Left = Cells(j, "g").Left


グラフ1に設定するブロックです。

.ChartObjects(1).Width = Range("a1:E15").Width

.ChartObjects(1).Height = Range("a7:E15").Height

Widthは幅。

Heightは高さ。

これは、a1:E15の範囲の大きさの、幅と高さをつかって、グラフの大きさを設定しています。

この範囲を変更することでグラフの大きさをコントロールすることができます。


.ChartObjects(1).Top = Cells(j, "g").Top

.ChartObjects(1).Left = Cells(j, "g").Left

この2行は、グラフの配置場所をコントロールしています。


Topは、上側。

Leftは左側です。

この2行で、jには2を代入しているので、G2が左上とした場所に配置することができます。


これで、一つ目のグラフの大きさと配置が終わりました、このあとの処理が残りのグラフに対応するグロックです。


If .ChartObjects.Count = 0 Then Exit Sub

この行は、グラフがシート状にあるのかないのかをチェックするための行です。

.ChartObjects.Countで、シート状にあるグラフを数えます。


For i = 2 To .ChartObjects.Count ~Next i

残りのグラフ数だけ繰り返します。


j = j + 10

これは、グラフとグラフを重ねないように調整するためのプログラム文です。

今回はプラス10。

つまり左上から10行分下に次のグラフを配置することができます。


.ChartObjects(i).Width = .ChartObjects(1).Width

.ChartObjects(i).Height = .ChartObjects(1).Height

.ChartObjects(i).Left = .ChartObjects(1).Left


この3行は、グラフ1と同じ大きさ、同じ高さにして、グラフ1の左側を揃えることが出来ます。


.ChartObjects(i).Top = Cells(j, "g").Top

このプログラム文は先ほど説明したように、一つ前のグラフの左上から10行分下に配置することができます。

これで重ならないようにすることができます。


今回は、グラフの高さを9行分にしています。

そして、左上から10行分下に配置するようにしています。

これで、グラフとグラフの間が1行分空けて配置することができました。

Excel VBAでグラフ!と思う人もいるかと思いますが、色々便利なので知っていると実務で役に立つこともあるかもしれませんね。