【VBA】複数のグラフを一括作成する方法!サンプルデータを使って実演!

f:id:yshgs_elec:20210217222420p:image

たくさんのデータを分析する際、一つのグラフに複数データを一括表示させるより、ひとつひとつのデータを別々のグラフに出力した方が、分析効率が上がることもあると思います。

この記事では、そんな状況で役に立つ、複数のグラフをVBAを使って一括作成する方法をご紹介しています。

さっそくやっていきましょう!

 

スポンサーリンク

紹介するスキルの概要説明

まずはじめにこの記事で紹介する内容を簡単にご説明しておきます。

今回は、以下のようにAからD列までにいくつかのデータが入っている状態で、

複数画像を一括作成する際に使用するサンプルデータ

各データを参照したグラフを別々に、かつ一括作成する方法をご紹介します。

(今回は、X軸はすべてのグラフで共通とし、A列を参照するようにしています。X軸をそれぞれ変更した場合でも、この記事の内容を少し応用するだけで対応可能です。)

サンプルデータを使って複数の画像を一括作成した結果

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

 

スポンサーリンク

完成版マクロのダウンロード方法の紹介

スキル紹介に入る前に宣伝です。

以降で紹介している複数グラフの自動作成ツールは以下からダウンロードも可能です。

本記事で紹介するコードはあくまでもグラフを作成する機能に過ぎません。

 

ダウンロード版では、グラフを作成はもちろん、グラフの一括削除、選択したグラフの軸の最大、最小、メモリ幅の自動設定機能等、様々な機能を織り込んだマクロファイルを作成しています。

 

以下の動画はそのマクロが動いている様子です。

データシートにどんな感じでデータが記述されているかを指定するだけで、簡単に複数のグラフを一括作成してくれます。

作成後のグラフの軸設定もグラフを選択してボタンを押すだけで簡単に変更可能です。

任意の数値にしたり、オート設定に戻すこともボタン一つです。

 

この完成版マクロは以下のnoteで販売しています。

興味があればぜひご購入ください!

【エクセルVBA】複数グラフを一括作成&自動軸設定マクロ|ヒガシ@メーカーエンジニア
以下のページにて紹介している複数グラフの一括作成マクロを紹介する。 ※本マクロは一度に最大20個のマーカーなしの散布図を作成することが可能です。グラフの数を増やしたり、グラフの種類を変更する際はマクロを多少書き換える必要があります。ご理解の...

 

さらに!上記のマクロを機能強化し、外部ファイルの読み込みから自動化できるマクロも構築しています。

こちらはサンプル版を無料ダウンロードも可能になっています。

複数のcsvデータを自動インポート⇒データを散布図にするマクロ|ヒガシ@メーカーエンジニア
このページでは、以下のブログにて紹介している、複数のデータを読み込み、そのデータから散布図を大量作成するマクロを紹介します。 詳細な機能等は上記ブログに掲載していますのでご確認ください。 なお、ファイルはMicrosoft Office H...

ぜひこちらもご覧ください。

スポンサーリンク

複数グラフを一括作成するVBAコード

話を戻して、冒頭にご紹介した複数グラフを一括作成るVBAコードは以下の通りです。

Sub Make_graph()
    '変数の型を宣言
    Dim X_AXIS  As String
    Dim Y_AXIS As String
    Dim GRF_name As String
    Cells(Rows.Count - 1000, 1).Select
    'データが3つあるので3回繰り返す
    For i = 0 To 2
        '作成後のグラフ名
        GRF_name = Cells(1, 2 + i)
        'データ範囲を取得する
        X_AXIS = "A2:A22"
        Y_AXIS = Chr(66 + i) & "2:" & Chr(66 + i) & "22"
        'グラフ(散布図)を挿入する
        ActiveSheet.Shapes.AddChart2(-1, -4169).Select
        With ActiveChart
            '1つ目のデータ作成
            .SeriesCollection.NewSeries
            .FullSeriesCollection(1).XValues = ActiveSheet.Name & "!" & X_AXIS
            .FullSeriesCollection(1).Values = ActiveSheet.Name & "!" & Y_AXIS
            'グラフの名前、タイトルを変更する
            .Parent.Name = GRF_name
            .ChartTitle.Text = GRF_name
        End With
        'グラフの位置調整
        ActiveSheet.Shapes(GRF_name).Left = Cells(1, i * 7 + 1).Left
    Next
End Sub

◆コードのポイント解説

今回のポイントは、作成するグラフが参照するセル範囲をうまく指定してあげるところです。

X軸となるA列は固定することにしたので、”A2:A22″というように普通に指定すれ良いのですが、Y軸となるデータは各グラフごとにことなる場所を指定する必要があります。

今回はB列、C列、D列というように順番に領域を指定するためにChr関数というものを用いています。

Chr関数はある数値を入力してあげれば、その数値に対応する文字を返してくれる関数です。

たとえば

Chr(66)⇒B

Chr(67)⇒C

Chr(68)⇒D

という感じです。

Chr関数に入れる数値と出力される文字について詳しく知りたい方は以下のマイクロソフトの公式ページをご確認ください。

文字セット (0 から 127) | Microsoft Docs

また、今回は一気に3つのグラフを作成したため、コードが少し複雑化しており、初心者の方にはわかりにくかったかもしれません。

もうすこし基礎的な状況で解説してほしいという方は以下の記事も参考にしてみてください。

 

今回はデータが3つしかない状況でコードを書いていますが、もっとたくさんデータがあった場合は、For Nextの繰り返し回数をデータ数に応じて変更していただければ、OKです。

ぜひご活用ください。

スポンサーリンク

おわりに

というわけで今回は複数のグラフを一括作成するVBAコードをご紹介しました。

 

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

 

・日々の残業時間を減らしたい。

・業務をもっと効率的にこなしたい。

・もっと勉強する時間を作りたい。

こんな思いを持っている人は、ぜひ他の記事も見てみてくださいね。

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

↓ 応援ボタン

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

それではまた!

コメント

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