【簡単エクセル/Excel VBA マクロ】グラフの作成|Excelオブジェクトの操作 #003

アフィリエイト広告を利用しています。
Information
運営者・ポテ

いつもありがとうございます!

皆さん、こんにちは。ご覧いただきありがとうございます。

“日々の業務にちょうどいい自動化を”──

業務改善アプリケーションの作成を行っている「ソフトデザイン工房」 です。

この記事ではVBAでグラフを作成する方法を解説します。

この記事が、あなたのVBAマクロの価値をさらに高める一助となれば幸いです。

VBAを活用して、自分自身や身近なコミュニティに合ったアプリケーションを作成し、仕事量は半分に、成果は2倍に──そんな未来を目指すあなたを応援しています。

VBAにおけるExcelオブジェクト操作の全体像

VBAにおける「Excelオブジェクトの操作」の全体像は以下の記事で解説しています。

この記事では「Excelオブジェクトの操作」の一部である「グラフを作成する方法」を解説いたします。

VBAでグラフを作成する方法

挿絵

基本コード

シナリオ

次のようなファイル構成です。

your_folder/
  ├── グラフを作成する.xlsm(マクロ実行ファイル)
  └── データ - A.xlsx(データ参照用ファイル)

グラフを作成する.xlsmに記述したマクロが、データ - A.xlsxを見に行き、同ファイル内のデータをグラフ化します。

コード

上述のシナリオを実行する基本コードと、その実行結果を以下に示します。このコードはエラーハンドリングなどを実装していない、最もシンプルなコードになっています。

Sub CreateGraph()


    ' 変数の宣言
    Dim file_path As String          ' 操作対象のExcelファイルのパスを格納する変数
    Dim wb As Workbook               ' 開いたワークブックを格納する変数
    Dim ws As Worksheet              ' 操作するワークシートを格納する変数
    Dim chart_object As ChartObject  ' 作成するグラフオブジェクトを格納する変数
    
    
    ' ファイルパスの設定
    file_path = ThisWorkbook.Path + "\データ - A.xlsx"
    
    
    ' ワークブックとワークシートのオープン
    Set wb = Workbooks.Open(file_path)
    Set ws = wb.Worksheets(1)
    
    
    ' グラフオブジェクトの作成
    Set chart_object = ws.ChartObjects.Add(200, 150, 400, 250)
    
    
    ' グラフの設定
    With chart_object.Chart
    
        ' ソースデータの設定
        .SetSourceData ws.Range(Cells(3, 2), Cells(4, 14))
    
        ' グラフスタイルの設定
        .ChartStyle = 201
    
        ' グラフタイトルの設定
        .ChartTitle.Text = ws.Cells(1, 2).Value
    
        ' Y軸の設定
        With .Axes(xlValue)
            .HasTitle = True
            .AxisTitle.Text = "数値"
        End With
    
        ' データラベルの設定
        With .SeriesCollection(1)
            .HasDataLabels = True
            .DataLabels.Orientation = xlUpward
        End With
    
    End With
    
    
    ' グラフの更新
    chart_object.Chart.Refresh
    
    
    ' ワークブックを保存して閉じる
    wb.Close savechanges:=True


End Sub
運営者・ポテ

解説していきます!

    ' 変数の宣言
    Dim file_path As String          ' 操作対象のExcelファイルのパスを格納する変数
    Dim wb As Workbook               ' 開いたワークブックを格納する変数
    Dim ws As Worksheet              ' 操作するワークシートを格納する変数
    Dim chart_object As ChartObject  ' 作成するグラフオブジェクトを格納する変数

ここでは、コード内で使用する変数が宣言されています。変数は Dim 変数名 As データ型 の構文で宣言します。これにより、各変数は As 以降で指定したデータ型のデータを格納できるようになります。

例えば、file_path は、操作対象のExcelファイルのパスを格納する変数であり、文字列型(String)のデータを格納できます。尚、各変数の用途については、右端にコメントを記載しています。

    ' ファイルパスの設定
    file_path = ThisWorkbook.Path + "\データ - A.xlsx"

ここでは、変数 file_path に操作対象のExcelファイルのパスを代入しています。

ThisWorkbook.Path は、このVBAコードが含まれているワークブックの保存場所のパスを返します。そのパスに "データ - A.xlsx" というファイル名をつなげて、ファイルパスとしています。

    ' ワークブックとワークシートのオープン
    Set wb = Workbooks.Open(file_path)
    Set ws = wb.Worksheets(1)

16行目は、file_path で指定したファイルを開き、そのワークブックオブジェクトを変数 wb に格納しています。

17行目は、16行目で開いたファイルの中の最初のワークシート(Worksheets(1))を、変数 ws に格納しています。

つまり、変数 wbws に、それぞれワークブックとワークシートのオブジェクトが格納されます。これにより、これらのオブジェクトに対してさまざまな操作を行うことが可能になります。

    ' グラフオブジェクトの作成
    Set chart_object = ws.ChartObjects.Add(200, 150, 400, 250)

ここでは、変数 ws (Worksheets(1))に新しいグラフオブジェクトを追加し、そのオブジェクトを変数 chart_object に格納しています。

Add メソッドの引数は、グラフの位置とサイズ(左からの位置、上からの位置、幅、高さ)を指定しています。

    ' グラフの設定
    With chart_object.Chart
    
        ' ソースデータの設定
        .SetSourceData ws.Range(Cells(3, 2), Cells(4, 14))
    
        ' グラフスタイルの設定
        .ChartStyle = 201
    
        ' グラフタイトルの設定
        .ChartTitle.Text = ws.Cells(1, 2).Value
    
        ' Y軸の設定
        With .Axes(xlValue)
            .HasTitle = True
            .AxisTitle.Text = "数値"
        End With
    
        ' データラベルの設定
        With .SeriesCollection(1)
            .HasDataLabels = True
            .DataLabels.Orientation = xlUpward
        End With
    
    End With

ここでは、作成したグラフオブジェクトの各種設定を行っています。

28行目: .SetSourceData は、グラフのデータ範囲を設定しています。この場合は、ws.Range(Cells(3, 2), Cells(4, 14))を範囲として指定しています。

31行目: .ChartStyle は、グラフのスタイルを指定しています。スタイル201は、Excelの標準スタイルの1つです。

34行目: .ChartTitle.Text は、グラフのタイトルを設定しています。この場合、タイトルはws.Cells(1,2) に格納された値を使用しています。

36行目のブロック: ここではY軸の設定を行っています。.HasTitle = True は、Y軸にタイトルを表示する指定です。.AxisTitle.Text = "数値" で、タイトルを"数値"というテキストに設定しています。

42行目のブロック: ここではデータラベルの設定を行っています。.SeriesCollection(1)はグラフ内の最初のデータ系列(通常はグラフに最初に追加されたデータ)を参照しています。.HasDataLabels = True は、データ系列にデータラベル(各データポイントに表示される値)を表示する指定です。.DataLabels.Orientation = xlUpward は、データラベルの表示方向の指定です。xlUpward は、データラベルが上向きに表示されるように設定します。

    ' グラフの更新
    chart_object.Chart.Refresh

ここではRefresh メソッドを使用して、グラフの表示を更新しています。これにより、設定した内容が反映されます。

    ' ワークブックを保存して閉じる
    wb.Close savechanges:=True

最後に、変更を保存してワークブックを閉じます。savechanges:=True により、変更内容が保存されます。つまり、作成したグラフがファイルに保存されます。

以上が基本コードです。

【発展】複数のデータファイルすべてにグラフを追加する方法

グラフを作成するときに、作成するグラフがひとつであれば、わざわざコードを書かなくても手作業でグラフにした方が早いです。VBAが真に力を発揮するのは、繰り返し同じ作業が必要になる場合です。

以下に、複数のデータファイルすべてに自動でグラフを追加する方法を解説します。

シナリオ

以下のようなフォルダ構成とします。"グラフを作成する.xlsm" にマクロを記述します。"data"内には、グラフ作成のもととなるデータがファイルが多数入っています。

"グラフを作成する.xlsm" に記述したマクロが、"data" 内にあるファイルを見に行き、順次グラフ化します。

コード

上述のシナリオを実行するコードを以下に示します。

このコードは、Do While ステートメントを使用して、指定されたフォルダ内のすべてのExcelファイルを順番に開き、それぞれに対してグラフを作成して保存しています。

Sub CreateChartsToMultipleFiles()


    ' 変数の宣言
    Dim file_path As String          ' ファイルのディレクトリパスを格納する変数
    Dim file_name As String          ' 操作対象のExcelファイル名を格納する変数
    Dim wb As Workbook               ' 開いたワークブックを格納する変数
    Dim ws As Worksheet              ' 操作するワークシートを格納する変数
    Dim chart_object As ChartObject  ' 作成するグラフオブジェクトを格納する変数


    ' ディレクトリパスの設定
    file_path = ThisWorkbook.Path & "\data\"


    ' ディレクトリ内の最初のファイルを取得
    file_name = Dir(file_path & "*.xlsx")


    ' ファイルが存在する限りループ
    Do While file_name <> ""
    
        ' ワークブックとワークシートのオープン
        Set wb = Workbooks.Open(file_path & file_name)
        Set ws = wb.Worksheets(1)
        
        ' グラフオブジェクトの作成
        Set chart_object = ws.ChartObjects.Add(200, 150, 400, 250)
        
        ' グラフの設定
        With chart_object.Chart
        
            ' ソースデータの設定
            .SetSourceData ws.Range(Cells(3, 2), Cells(4, 14))
        
            ' グラフスタイルの設定
            .ChartStyle = 201
        
            ' グラフタイトルの設定
            .ChartTitle.Text = ws.Cells(1, 2).Value
        
            ' Y軸の設定
            With .Axes(xlValue)
                .HasTitle = True
                .AxisTitle.Text = "数値"
            End With
        
            ' データラベルの設定
            With .SeriesCollection(1)
                .HasDataLabels = True
                .DataLabels.Orientation = xlUpward
            End With
        
        End With
        
        ' グラフの更新
        chart_object.Chart.Refresh

        ' オブジェクトの解放
        Set chart_object = Nothing
        
        ' ワークブックを保存して閉じる
        wb.Close savechanges:=True
        
        ' 次のファイルを取得
        file_name = Dir()
    
    Loop


End Sub
運営者・ポテ

ご覧いただきありがとうございました!

VBAスキルアップの参考情報

近年は、ChatGPTをはじめとするAIの登場によって、学習のスタイルが大きく変わりました。

分からないことがあれば、AIに尋ねれば答えがすぐに見つかる時代です。

とはいえ、AIを使いこなすには、自分自身の基本的な知識や理解力が欠かせません。

全体像をつかむためには、やはり書籍などで体系的に学んでおくことが今でも有効です。

そのうえでAIを活用すれば、自分の理解度に合わせた的確な解説や、応用のヒントを得ることができます。

「学んで基礎を築く → AIで補い発展させる」──このサイクルを重ねることで、VBAスキルは着実に高まっていくでしょう。

VBAのスキルアップ

VBAを学び始めるなら

入門書は、どれを選んでも大きな差はないように感じます。

どれを選ぶかに悩むことに時間をかけるよりも、まずは手頃な一冊を手に取って進めてみるのがおすすめです。

もし迷ったときには、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。

基礎を超えて力をつけたいなら

私は上級者を目指していましたので、入門書にとどまらず、このような内容の濃い一冊を選んで学んでいました。

今は誰でもAIを活用できる時代になりましたが、上級者を目指す方にとっては、AIをより上手に活用するという意味でも、こうした本は今なお価値があります。

このレベルの本を一冊持っておくことに、損はないでしょう。


資格で能力を証明したいなら

VBAのプログラミング能力を客観的に示したい場合には「VBAエキスパート試験」があります。

特に「スタンダード」の方は上級者向けです。

あなたが社内業務の改善を行う立場であっても、VBAで作成したシステムをお客様に納める立場であっても、この資格は信頼や安心につながるでしょう。

以下の公式テキストが販売されています。



プログラミングの一般教養

「独学プログラマー」というプログラミングの魅力を解説した書籍があります。

これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。

今はAIにコードを尋ねれば、答えが返ってくる時代です。

しかし、この本からは「コード」以上に、プログラミングに向き合う姿勢や考え方を学ぶことができるでしょう。


こちらの記事でも紹介しています。もしよろしければご覧ください。

【初心者歓迎】無料相談受付中 

運営者・ポテ

いつもありがとうございます!

限られた時間をより良く使い、日本の生産性を高めたい──

みんなの実用学を運営するソフトデザイン工房では、業務整理や業務改善アプリケーション作成のご相談を承っております。

お気軽にご相談ください。


こちらの記事でも紹介しております。

おわりに

運営者・ポテ

ご覧いただきありがとうございました!

この記事では、「Excelオブジェクトの操作」の中の「グラフを作成する方法」を解説しました。

お問い合わせやご要望がございましたら、「お問い合わせ/ご要望」フォームまたはコメント欄よりお知らせください。

この記事が皆様のお役に立てれば幸いです。

なお、当サイトでは様々な情報を発信しております。よろしければトップページもあわせてご覧ください。

この記事を書いた人

運営者・ポテソフトデザイン工房|日々の業務にちょうどいい自動化を
■人生を追求する凡人 ■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢 ■ソフトデザイン工房運営(個人事業者) - 業務改善アプリケーションをご提供 ■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を追求。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です