【簡単Excelマクロ・VBA】グラフの作成|Excelオブジェクトの操作 #003
いつもありがとうございます。
ノンプログラマー向け「Excelマクロ・VBA解説シリーズ」へようこそ。
本稿では、自動でグラフを作成する方法を解説いたします。
ことばの意味
- ノンプログラマー
プログラミングを本職としない人たちのことです。 - マクロ
VBAを使って作成される「機能」のことです。 - VBA
Visusal Basic for Application の略で、プログラミング言語のことです。
関連記事
VBAにおけるExcelオブジェクト操作の全体像
VBAにおける「Excelオブジェクトの操作」の全体像は以下の記事で解説しております。
本稿では「Excelオブジェクトの操作」の一部である「グラフを作成する方法」を解説いたします。
VBAでグラフを作成する方法
基本コード
シナリオ
フォルダ内に以下の2つのファイルが入っているものとします。
- "グラフを作成する.xlsm" にマクロ記述します。
- "グラフを作成する.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
に格納しています。
つまり、変数 wb
と ws
に、それぞれワークブックとワークシートのオブジェクトが格納されます。これにより、これらのオブジェクトに対してさまざまな操作を行うことが可能になります。
' グラフオブジェクトの作成
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
おわりに
ご覧いただきありがとうございました。
本稿では、「Excelオブジェクトの操作」の中の「グラフを作成する方法」を解説いたしました。
お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。
皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。
なお、当サイトでは様々な情報を発信しております。もしよろしければ、トップページもご覧いただけると幸いでございます。
筆者の記事関連経験
- VBA使用経験約20年
実務に使用するマクロを多数作成してきました。 - Python 3 エンジニア認定基礎試験
経済産業省が定めたガイドライン「ITスキル標準(ITSS)」に掲載されている民間資格です。
VBAプログラミングスキルアップのための参考情報
ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。
VBAプログラミングのスキルアップ
学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。
入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。
甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
\チェックしてみよう/
\チェックしてみよう/
\チェックしてみよう/
VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
こちらの記事でも紹介しております。もしよろしければご覧ください。