【エクセルVBA】複数グラフを列数指定で順番に整列させる方法!

このページでは、以下のようにシート上にちらかっているグラフを

シート上にグラフが散らかっている様子

こんな感じで一発整列させる方法をご紹介していきます。

シート上のグラフを自動整列させた結果

上の画像では4列に整列させていますが、指定列数を変更すればどんな並べ方も実行可能です。

 

〇このページの処理でできること

①グラフサイズの統一

②グラフとグラフの間隔指定(縦、横)

③グラフの整列(上述の通り)

 

基本的にはコードをコピーして実行するだけです。

あなたのやりたいことと一致していれば是非続きをご覧ください。

 

スポンサーリンク

コード上の指定変数の説明

まずは以降で紹介するサンプルコード内に出てくるいくつかの変数が何を指定しているものなのかを簡単に解説しておきます。

 

出てくる変数は以下の5つです。

chart_width :1つのグラフの横幅
chart_height :1つのグラフの高さ
margin1 :グラフとグラフの間隔(横方向)
margin2 :グラフとグラフの間隔(縦方向)
chart_col :整列させる際の列数

 

図で表すと以下の通りですね。

サンプルコードを中の変数の意味を解説

 

スポンサーリンク

複数グラフを列数指定で整列させるサンプルコード

変数の意味がわかったところで、実際のコーディングに入っていきましょう。

以下が冒頭に紹介した作業を実施してくれるサンプルコードです。

※3~7行目の各変数はあなたの状況に応じて適宜変更してください。

Sub chart_post_adjust3()
    Dim i As Integer
    Dim chart_width As Integer, chart_height As Integer
    chart_width = 300
    chart_height = 200
    margin1 = 10
    margin2 = 10
    chart_col = 3
    chart_row = ActiveSheet.ChartObjects.Count \ chart_col
    
    For i = 1 To ActiveSheet.ChartObjects.Count
        row_num = (i - 1) \ chart_col
        col_num = (i - 1) Mod chart_col
        With ActiveSheet.ChartObjects(i)
            .Width = chart_width
            .Height = chart_height
            .Left = col_num * (chart_width + margin1)
            .Top = row_num * (chart_height + margin2)
        End With
    Next
End Sub

 

スポンサーリンク

サンプルコードの実行結果

それでは先ほどのサンプルコードを実行してみましょう。

まずはchart_col = 4で実行してみます。

サンプルコードを実行した結果

横4列で問題なく整列していますね。

 

つぎはchart_col = 3で実行してみます。

サンプルコードを変数を変えて実行した結果

横3列で整列し、最後の行はもうグラフがないので2列になっていますね。

 

最後はchart_col = 5です。

サンプルコードを変数を変えて実行した結果

こちらも問題なしですね。

 

グラフサイズ、間隔も変更しながら実行してみてください。

いい感じに整列できるはずです。

 

スポンサーリンク

おわりに

というわけで今回は、エクセルVBAをシート上に散らかっている複数のグラフを一括整列させる方法をご紹介しました。

シートの整理の際にぜひご活用ください。

 

このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。

⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

↓ 応援ボタン

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

それではまた!

コメント

  1. ちはる より:

    役に立つvbaありがとうございます。
    上記のvbaに開始位置(現在グラフがA1から貼り付けされていること)についてですが、
    少しずらして貼り付けを行いたいです。
    (A5から上記のvbaでグラフが並ぶように…)
    アドバイス、よろしくお願いします。

    • ヒガシ ヒガシ より:

      ご質問ありがとうございます。(^^)
      おそらく
      .Top = row_num * (chart_height + margin2)の部分を
      .Top = row_num * (chart_height + margin2) + Range(“A5”).top
      に変更すればできるのではないかと思います。
      試してはいないので、結果を教えていただけると嬉しいです。
      よろしくお願いします。

      • ちはる より:

        返信ありがとうございました。
        +~をつけることにより、思っていた通りに動かすことができました♪
        本当にありがとうございます(^▽^)/

タイトルとURLをコピーしました