「VBAでグラフを操作するにはどうしたらいいのだろう?」
そんな疑問をお持ちではありませんか?

・毎回手動でグラフを編集するのが手間で時間がかかる…
・データ系列を自由に調整したいけど、やり方がわからない
・第二Y軸を使った複合グラフや散布図でデータを視覚的に比較したい



こうしたお悩みを解決する方法が
「VBAのSeriesCollectionオブジェクト」
を使ったグラフ作成です!
この記事では、「SeriesCollectionを使って、円グラフ・棒グラフ・折れ線グラフ・散布図などを自在に操作する方法」を、具体的なコード例とともに初心者向けに解説します。
さらに、第二Y軸を使った複合グラフの作成方法や、グラフの種類変更、データ系列の細かな調整方法もわかります。
初めてVBAを学ぶ方でもすぐに使えるように、実際に動作するコード例もご紹介しますので、ぜひ参考にしてみてください!
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
この記事を読むことで「できるようになる」こと
- VBAでグラフを作成したら何が便利か?確認する
- グラフ操作で使用される「ChartObject」と「SeriesCollection」の違いを習得する
- SeriesCollectionの基本的な使い方を把握する
- SeriesCollectionの使用する際のポイントを確認する
- SeriesCollectionの使用例をチェックする
業務効率を上げる! VBAでグラフ作成のメリットと活用例
Excel VBAを使ってグラフを作成することには、業務効率化につながる多くのメリットがあります。
特に、業務で頻繁にグラフを使用する方にとっては、手間を大幅に削減し、作業時間を短縮する強力なツールとなります。
ここでは、VBAを活用することで得られる3つのメリットと、具体的な活用シーンをわかりやすく解説します。
VBAでグラフを作る3つのメリット
- 作業時間を大幅に短縮
毎回、手作業でグラフを作成する場合、以下のような手間が発生します。- データ範囲の選択
- タイトルや軸ラベルの設定
- グラフの種類変更
これらを毎回繰り返すのは非常に時間がかかります。
しかし、VBAを使えば、一度コードを書くだけで、複数のグラフをボタン1つで自動生成することが可能です。
これにより、業務でのルーチン作業が大幅に効率化されます。
- データ更新時も簡単に対応
手動で作成したグラフの場合、データが変わるたびに編集が必要です。
これでは、データ更新のたびに時間を浪費してしまいます。
一方で、VBAではデータ範囲をコードに組み込むことで、データが更新されても自動でグラフが再生成されます。
例えば、月次売上データが更新されても、グラフが即座に新しいデータを反映します。 - 大量のデータや複数のシートに対応可能
Excel VBAを使えば、以下のような操作も簡単です。- 複数シートやブックにまたがるデータを一括で処理
- 複数のデータセットをそれぞれ異なるグラフ形式で自動生成
大規模なデータや複数のグラフを扱う場合でも、VBAなら瞬時に対応できるため、Excelの作業負担が大幅に軽減します。
VBAでグラフ作成が役立つシーン
具体的にどのような場面で役立つのか、いくつかの例を挙げてみます。
- 毎月の定型業務を自動化したいとき
- たとえば、月次の売上データを集計して棒グラフや折れ線グラフを作成する作業です。
VBAを使えば、グラフ作成から保存までの一連の作業を自動化できます。
- たとえば、月次の売上データを集計して棒グラフや折れ線グラフを作成する作業です。
- データの比較をわかりやすく可視化したいとき
- 複数のデータセットを比較するために、棒グラフや散布図を使いたい場合です。
特定の条件でデータを抽出し、最適なグラフ形式で出力することが可能です。
- 複数のデータセットを比較するために、棒グラフや散布図を使いたい場合です。
- データ分析結果を迅速に共有したいとき
- VBAで作成したグラフは即座にPDFや画像として出力できます。
これにより、プレゼン資料やレポート作成の時間を大幅に短縮できます。
- VBAで作成したグラフは即座にPDFや画像として出力できます。
グラフを操作する「SeriesCollection」と「ChartObject」の違いを解説
VBAを使ってExcelグラフを操作するとき、「SeriesCollection」と「ChartObject」は頻繁に使用するオブジェクトです。
どちらも便利ですが、役割が異なるため使い分けが重要です。
この記事では、初心者でもわかるようにそれぞれの違いや、SeriesCollectionを活用する場面について解説します。
特徴 | SeriesCollection | ChartObject |
---|---|---|
役割 | グラフ内のデータ系列(棒や線などの集合) を個別に管理。 | Excelシート上に配置されるグラフ そのものを管理。 |
操作対象 | 各データ系列の値、名前、色、線の種類、 軸の設定など。 | グラフ全体の種類、サイズ、位置、 タイトル、凡例など。 |
主な用途 | グラフ内のデータを追加・削除したり、 見た目や軸の設定を調整する。 | グラフを作成、配置、カスタマイズ する。 |
よく使う プロパティ | Values (データ範囲)、Name (データ系列の名前)、 ChartType (系列ごとのグラフ種類)など。 | ChartType (グラフの種類)、SetSourceData (データ範囲)、HasTitle (タイトルの有無)など。 |
使用例 | ・ 棒グラフの色を青に変更。 ・ 新しい系列(データ)を追加し、 第二Y軸を設定。 | ・ グラフを挿入して種類を棒グラフに設定。 ・ グラフタイトルや軸ラベルを追加。 |
主なメソッド | NewSeries (新しいデータ系列を追加)、 Delete (系列の削除)。 | ChartObjects.Add (新しいグラフを追加)、Delete (グラフの削除)。 |
適用範囲 | データ系列ごとに細かい調整を 行いたいときに使用。 | グラフ全体を操作し、全体の見た目や 配置を調整する際に使用。 |
違いを簡単にまとめると…
- ChartObjectは「グラフ全体の操作」に使うオブジェクト。
例: グラフの種類、サイズ、位置、タイトル、凡例など。
ChartObjectについて解説を見る - SeriesCollectionは「グラフ内のデータの操作」に使うオブジェクト。
例: データ系列(棒や線など)の色、名前、軸の設定など。
SeriesCollectionについて解説を見る
初心者向けワンポイントアドバイス
- グラフを「作成」する場合は、ChartObjectからスタート!
- グラフの見た目を「データ単位でカスタマイズ」する場合は、SeriesCollectionを活用!
VBA SeriesCollectionとは? データ系列を操作する基礎オブジェクト
SeriesCollectionは、Excel VBAでグラフ内のデータ系列(棒や線などの集合)を操作するために使用するオブジェクトです。
データの色、形式、凡例の名前、第二軸への割り当てなど、データ系列ごとの細かいカスタマイズを行えます。
VBAを活用してSeriesCollectionを操作することで、次のようなメリットが得られます。
SeriesCollectionを使うメリット
- データ系列ごとの細かい調整が可能
- 棒グラフや折れ線グラフの色やマーカーを個別に設定できます。
- 第二軸を活用して複数のデータを可視化
- 例えば、売上(第一軸)と利益率(第二軸)を同時に表示するグラフを簡単に作成可能。
- 動的にデータ系列を追加・削除
- 新しいデータ系列を動的に追加したり、不要な系列を削除できます。
SeriesCollectionの役割と基本機能
SeriesCollectionは、グラフ内のデータを操作するためのオブジェクトで、主に以下のような操作が可能です。
SeriesCollectionでできる主な操作
操作内容 | 説明 |
---|---|
データ系列の追加 | グラフに新しいデータ系列を追加します。 |
データ系列の削除 | 不要なデータ系列を削除します。 |
凡例の名前を変更 | グラフの凡例に表示される名前をカスタマイズします。 |
系列の色やマーカー設定 | データ系列の色、線の種類、マーカー形状をカスタマイズします。 |
第二軸への割り当て | データ系列を第二軸(右側のY軸)に切り替え、複合グラフを作成します。 |
SeriesCollectionの主なプロパティとその使い方
以下は、SeriesCollectionの主なプロパティと役割の一覧です。
プロパティ名 | 説明 | 使用頻度 |
---|---|---|
Values | データ系列に使用するセル範囲を指定 | 高 |
Name | データ系列の名前を設定 | 高 |
AxisGroup | データ系列を第一軸または第二軸に設定 | 高 |
ChartType | 系列ごとに異なるグラフ種類を設定 | 中 |
Format | 系列の色や線のスタイルをカスタマイズ | 中 |
より詳しい情報は、Microsoft公式のSeriesCollection オブジェクト (Excel)を参照してください。
1. Values: データ系列に使用するセル範囲を指定
データ系列に表示する値(セル範囲)を指定します。
たとえば、売上データをグラフに反映させる場合に使用します。
With chartObj.Chart.SeriesCollection(1)
.Values = ws.Range("B2:B5") '// データ範囲を指定
End With
.Values
プロパティを使うことで、特定のセル範囲をデータとして設定できます。
2. Name: データ系列の名前を設定
データ系列の凡例に表示される名前を指定します。
With chartObj.Chart.SeriesCollection(1)
.Name = "売上" '// データ系列の名前を設定
End With
- グラフの凡例に表示される名前を設定します。
- 名前を「セルの値」にリンクさせることも可能です。
3. AxisGroup: データ系列を第一軸または第二軸に設定
売上データを第一軸、利益率データを第二軸に設定する場合に使用します。
With chartObj.Chart.SeriesCollection(2)
.AxisGroup = xlSecondary '// 第二軸に設定
End With
xlPrimary
: 第一軸(デフォルト)xlSecondary
: 第二軸
4. ChartType: 系列ごとに異なるグラフ種類を設定
1つのグラフ内で異なる種類のグラフを表示する場合に使用します。
With chartObj.Chart.SeriesCollection(1)
.ChartType = xlColumnClustered '// 棒グラフ
End With
複合グラフの例
With chartObj.Chart
.SeriesCollection(1).ChartType = xlColumnClustered '// 第一系列を棒グラフ
.SeriesCollection(2).ChartType = xlLine '// 第二系列を折れ線グラフ
End With
- データ系列ごとに棒グラフや折れ線グラフなどを個別に設定可能です。
たとえば、第一系列を棒グラフ、第二系列を折れ線グラフに設定できます。
以下は、ChartType
で指定できる主なグラフの種類とその用途の一覧です。
設定値 | グラフの種類 | 説明 |
---|---|---|
xlColumnClustered | クラスター棒グラフ | データをカテゴリーごとに比較する際に使用 |
xlColumnStacked | 積み上げ棒グラフ | 各カテゴリーの合計値と内訳を表示する場合に最適 |
xlLine | 折れ線グラフ | 時系列データの推移を示す際に使用 |
xlPie | 円グラフ | 全体に対する各要素の割合を視覚化する際に使用 |
xlXYScatter | 散布図 | 2つの変数間の相関関係を示す際に使用 |
xlBarClustered | クラスター横棒グラフ | 横向きの棒グラフでデータを比較する際に使用 |
xlBarStacked | 積み上げ横棒グラフ | 横向きで積み上げ表示を行う棒グラフ |
xlArea | 面グラフ | 時系列データを累積的に表示する場合に使用 |
xlDoughnut | ドーナツグラフ | 円グラフに似ていますが複数のデータ系列を表示可能 |
xlRadar | レーダーチャート | 複数の指標を比較する際に使用 |
クリックしてグラフの具体的なグラフを見る
xlColumnClustered


xlColumnStacked


xlLine


xlPie


xlXYScatter


xlBarClustered


xlBarStacked


xlArea


xlDoughnut


xlRadar


5. Format: 系列の色や線のスタイルをカスタマイズ
棒グラフや折れ線グラフの色を変更する場合に使用します。
With chartObj.Chart.SeriesCollection(1).Format.Fill
.ForeColor.RGB = RGB(0, 128, 255) '// 青色に設定
End With
- 系列の色や線の種類をカスタマイズします。
ForeColor.RGB
: 塗りつぶしの色を指定。Line.ForeColor.RGB
: 折れ線グラフの線の色を指定。
SeriesCollectionを操作する実例
以下は、売上(棒グラフ)と利益率(折れ線グラフ)を同時に表示するグラフを作成するコード例です。
Sub CustomizeSeriesCollection()
Dim ws As Worksheet
Dim chartObj As ChartObject
'// シートとグラフを指定
Set ws = ActiveSheet
Set chartObj = ws.ChartObjects(1) '// 最初のグラフを取得
'// 第一系列(売上)
With chartObj.Chart.SeriesCollection(1)
.Values = ws.Range("B2:B5") '// 売上データ
.Name = "売上" '// 系列名
.ChartType = xlColumnClustered '// 棒グラフ
.Format.Fill.ForeColor.RGB = RGB(0, 128, 255) '// 色を青に設定
End With
'// 第二系列(利益率)
With chartObj.Chart.SeriesCollection.NewSeries
.Values = ws.Range("C2:C5") '// 利益率データ
.Name = "利益率" '// 系列名
.ChartType = xlLine '// 折れ線グラフ
.AxisGroup = xlSecondary '// 第二軸に設定
.Format.Line.ForeColor.RGB = RGB(255, 0, 0) '// 線の色を赤に設定
End With
End Sub
グラフの取得
Set ws = ActiveSheet
Set chartObj = ws.ChartObjects(1) '// 最初のグラフを取得
Set ws = ActiveSheet
- アクティブなシートを取得して変数
ws
に格納します。
- アクティブなシートを取得して変数
Set chartObj = ws.ChartObjects(1)
- シート上に存在する最初のグラフオブジェクト(ChartObject)を取得し、
chartObj
に設定します。
- シート上に存在する最初のグラフオブジェクト(ChartObject)を取得し、
第一系列(売上)の設定
With chartObj.Chart.SeriesCollection(1)
.Values = ws.Range("B2:B5") '// 売上データ
.Name = "売上" '// 系列名
.ChartType = xlColumnClustered '// 棒グラフ
.Format.Fill.ForeColor.RGB = RGB(0, 128, 255) '// 色を青に設定
End With
SeriesCollection(1)
- グラフ内の最初のデータ系列を操作します。
.Values
- 売上データとして、シート上のセル範囲(B2:B5)を設定します。
.Name
- データ系列に「売上」という名前を設定し、凡例に表示されます。
.ChartType
- 棒グラフ(クラスター形式)として設定します。
.Format.Fill.ForeColor.RGB
- 棒グラフの色を青(RGB(0, 128, 255))に設定します。
第二系列(利益率)の追加と設定
With chartObj.Chart.SeriesCollection.NewSeries
.Values = ws.Range("C2:C5") '// 利益率データ
.Name = "利益率" '// 系列名
.ChartType = xlLine '// 折れ線グラフ
.AxisGroup = xlSecondary '// 第二軸に設定
.Format.Line.ForeColor.RGB = RGB(255, 0, 0) '// 線の色を赤に設定
End With
SeriesCollection.NewSeries
- 新しいデータ系列をグラフに追加します。
.Values
- 利益率データとして、シート上のセル範囲(C2:C5)を設定します。
.Name
- データ系列に「利益率」という名前を設定し、凡例に表示されます。
.ChartType
- 折れ線グラフとして設定します。
.AxisGroup
- 第二軸(右側のY軸)に割り当てます。
.Format.Line.ForeColor.RGB
- 折れ線グラフの色を赤(RGB(255, 0, 0))に設定します。


VBA SeriesCollectionを使用する際に注意すべき3つのポイント
VBAでSeriesCollectionを操作する際には、細かい設定や特定の条件が原因でエラーが発生することがあります。
この記事では、SeriesCollectionを安全かつ効率的に使うための注意ポイントを解説します。
これを押さえておけば、初心者でも安心してグラフ操作が可能になります!
注意1. 存在しないデータ系列を操作しようとしてエラーが発生する
SeriesCollectionを操作する場合、グラフに対象のデータ系列が存在していることを前提とします。
以下のコードでは、SeriesCollection内に存在しない系列(インデックス1)を操作しようとした場合に、「実行時エラー ‘1004’: アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。


Sub ErrorExample()
Dim chartObj As ChartObject
'// グラフオブジェクトを取得(シート上に存在するグラフを前提)
Set chartObj = ActiveSheet.ChartObjects(1)
'// 存在しないデータ系列を操作しようとする(エラー発生)
With chartObj.Chart.SeriesCollection(1)
.Name = "売上" '// データ系列が存在しないためエラー
End With
End Sub
解決策
エラーを防ぐためには、SeriesCollectionの数を事前に確認し、データ系列が存在する場合にのみ操作を行う必要があります。
Sub AvoidErrorExample()
Dim chartObj As ChartObject
'// グラフオブジェクトを取得(シート上に存在するグラフを前提)
Set chartObj = ActiveSheet.ChartObjects(1)
'// データ系列が1つ以上存在するかを確認
If chartObj.Chart.SeriesCollection.Count > 0 Then
'// データ系列が存在する場合のみ操作
With chartObj.Chart.SeriesCollection(1)
.Name = "売上"
End With
Else
'// データ系列が存在しない場合の処理
MsgBox "データ系列が存在しません", vbExclamation
End If
End Sub
注意2. グラフ種類の変更に伴う制限に注意する
SeriesCollectionのChartType
プロパティを使用してグラフの種類を変更する場合、一部のグラフ種類には互換性がありません。
たとえば、円グラフでは系列を追加することがサポートされていません。
この制限を無視して操作を試みると、エラーが発生する場合があります。
- 円グラフに系列を追加する操作でのエラー
- 円グラフでは、データ系列を複数追加できません。
この操作を行うと「実行時エラー ‘1004’」が発生します。
- 円グラフでは、データ系列を複数追加できません。
- 異なるグラフ種類間でのプロパティの互換性がない場合
- 棒グラフを折れ線グラフに変更するのは問題ありませんが、棒グラフから円グラフに変更する場合には制限が発生することがあります。
解決策
以下は、棒グラフから円グラフに変更する具体的なコード例です。
このコードでは、データ系列が1つしかない場合にのみ、変更を実行します。
Sub ChangeToPieChartWithValidation()
Dim ws As Worksheet
Dim chartObj As ChartObject
Dim seriesCount As Integer
'// アクティブシートの最初のグラフを取得
Set ws = ActiveSheet
Set chartObj = ws.ChartObjects(1)
'// データ系列の数を確認
seriesCount = chartObj.Chart.SeriesCollection.Count
If seriesCount = 1 Then
'// 系列が1つの場合のみ円グラフに変更
chartObj.Chart.ChartType = xlPie
MsgBox "グラフの種類を円グラフに変更しました。確認してください。", vbInformation
Else
'// 系列が複数ある場合は変更不可
MsgBox "円グラフは1つのデータ系列のみをサポートします。系列を減らして再実行してください。", vbExclamation
End If
End Sub
注意3. 第二軸の設定ミスでデータが表示されない
複合グラフで第二軸を使用する場合、対象のデータ系列が正しく割り当てられていないと、データがグラフ上に表示されないことがあります。
解決策
AxisGroup
プロパティを活用- 第一軸には
xlPrimary
、第二軸にはxlSecondary
を設定。
- 第一軸には
- 複合グラフを使いこなす
- 棒グラフや折れ線グラフを組み合わせて、データを視覚的に比較しやすくする。
- 事前確認でエラーを回避
SeriesCollection.Count
を使って系列が存在することを確認。
- スケールの違いを活用
- 売上や利益率のようにスケールが異なるデータを効率的に比較するために第二軸を使用。
Sub SetSecondaryAxis()
Dim ws As Worksheet
Dim chartObj As ChartObject
'// アクティブシートの最初のグラフを取得
Set ws = ActiveSheet
Set chartObj = ws.ChartObjects(1)
'// 第一系列(売上)を第一軸に設定
With chartObj.Chart.SeriesCollection(1)
.AxisGroup = xlPrimary '// 第一軸
.Name = "売上"
.ChartType = xlColumnClustered '// 棒グラフ
End With
'// 第二系列(利益率)を第二軸に設定
With chartObj.Chart.SeriesCollection(2)
.AxisGroup = xlSecondary '// 第二軸
.Name = "利益率"
.ChartType = xlLine '// 折れ線グラフ
End With
MsgBox "複合グラフの軸設定が完了しました!", vbInformation
End Sub
VBA SeriesCollectionでグラフを操作する使用例をご紹介
ここでは、実際にVBAでSeriesCollectionを操作してグラフを作成するコード例を紹介します。
以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
使用例1: SeriesCollectionで複合グラフを作成し第二軸を設定
このコードでは、売上データと利益率データを基に複合グラフを作成し、以下を行います。
- 売上データを棒グラフとして第一軸に設定
- 利益率データを折れ線グラフとして第二軸に設定
- データ系列ごとに色と名前をカスタマイズ
コード例 | SeriesCollectionで複合グラフを作成し第二軸を設定
Sub CreateComboChartWithSecondaryAxis()
Dim ws As Worksheet
Dim chartObj As ChartObject
'// アクティブシートとデータ範囲を指定
Set ws = ThisWorkbook.Sheets(1)
'// グラフオブジェクトを追加
Set chartObj = ws.ChartObjects.Add(Left:=100, Top:=50, Width:=500, Height:=350)
'// グラフの初期設定
With chartObj.Chart
.ChartType = xlColumnClustered '// 棒グラフとして設定
.HasTitle = True
.ChartTitle.Text = "売上と利益率の複合グラフ"
'// 第一系列(売上)の設定
With .SeriesCollection.NewSeries
.Values = ws.Range("B2:B7") '// 売上データ
.Name = "売上" ' 凡例名
.AxisGroup = xlPrimary '// 第一軸に設定
.Format.Fill.ForeColor.RGB = RGB(0, 102, 204) '// 色を青に設定
End With
'// 第二系列(利益率)の設定
With .SeriesCollection.NewSeries
.Values = ws.Range("C2:C7") '// 利益率データ
.Name = "利益率" '// 凡例名
.ChartType = xlLine '// 折れ線グラフに設定
.AxisGroup = xlSecondary '// 第二軸に設定
.Format.Line.ForeColor.RGB = RGB(255, 0, 0) '// 線の色を赤に設定
End With
'// X軸タイトルを設定
With .Axes(xlCategory)
.HasTitle = True
.AxisTitle.Text = "月別"
End With
'// 第一Y軸タイトルを設定
With .Axes(xlValue)
.HasTitle = True
.AxisTitle.Text = "売上 (円)"
End With
'// 第二Y軸タイトルを設定
With .Axes(xlValue, xlSecondary)
.HasTitle = True
.AxisTitle.Text = "利益率 (%)"
End With
End With
MsgBox "複合グラフを作成しました!", vbInformation
End Sub
処理結果


コードの動作概要
ChartObjects.Add
を使用して新しいグラフを作成。配置位置とサイズを指定します。
売上データを棒グラフ(xlColumnClustered
)として設定。
第一軸(xlPrimary
)に割り当て。
棒グラフの色を青に設定。
利益率データを折れ線グラフ(xlLine
)として設定。
第二軸(xlSecondary
)に割り当て。
折れ線グラフの色を赤に設定。
X軸: 月別
第一Y軸: 売上 (円)
第二Y軸: 利益率 (%)
グラフ作成が完了したことをMsgBox
で通知します。
このコードで使用している機能
機能 | 説明 |
---|---|
Set | オブジェクト変数に値を代入します。 |
ChartObjects.Add | 新しいグラフを指定位置とサイズで作成します。 |
SeriesCollection.NewSeries | 新しいデータ系列をグラフに追加します。 |
ChartType | データ系列のグラフ種類を設定します(例: 棒グラフ、折れ線グラフ)。 |
AxisGroup | データ系列を第一軸(xlPrimary )または第二軸(xlSecondary )に割り当てます。 |
.Format.Fill.ForeColor.RGB | 棒グラフの色を設定します。 |
.Format.Line.ForeColor.RGB | 折れ線グラフの線の色を設定します。 |
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Set ws = ThisWorkbook.Sheets(1)
- アクティブなブックの1枚目のシートを取得します。
- Set chartObj = ws.ChartObjects.Add(Left:=100, Top:=50, Width:=500, Height:=350)
- シートに新しいグラフを追加します。
グラフの位置(左上)とサイズ(幅500、高さ350)を指定します。
- シートに新しいグラフを追加します。
- With chartObj.Chart
.ChartType = xlColumnClustered
.HasTitle = True
.ChartTitle.Text = “売上と利益率の複合グラフ”
End With- 棒グラフとして初期設定を行い、グラフタイトルを設定します。
- With .SeriesCollection.NewSeries
.Values = ws.Range(“B2:B7”)
.Name = “売上”
.AxisGroup = xlPrimary
.Format.Fill.ForeColor.RGB = RGB(0, 102, 204)
End With- 売上データを棒グラフとして第一軸に設定し、色を青に変更します。
- With .SeriesCollection.NewSeries
.Values = ws.Range(“C2:C7”)
.Name = “利益率”
.ChartType = xlLine
.AxisGroup = xlSecondary
.Format.Line.ForeColor.RGB = RGB(255, 0, 0)
End With- 利益率データを折れ線グラフとして第二軸に設定し、色を赤に変更します。
- With .Axes(xlValue, xlSecondary)
.HasTitle = True
.AxisTitle.Text = “利益率 (%)”
End With- 第二軸にタイトルを設定します。
総括・ポイント
このコードは、Excel VBAで折れ線グラフを作成し、タイトルや軸をカスタマイズする基本的な例を提供します。
- このコードでできること
- 売上と利益率のデータを複合グラフで表示。
- 第一軸と第二軸を活用して、異なるスケールのデータを視覚的に比較可能。
- カスタムタイトルと軸ラベルでグラフをわかりやすく設定。
- 応用例
- 系列を追加して複数のデータを比較。
- 棒グラフとエリアグラフの組み合わせに変更。
- 第二軸のスケールを動的に調整。
使用例2: SeriesCollectionを使って棒グラフを折れ線グラフに変更する
このコードでは、既存の棒グラフを折れ線グラフに変更する方法を解説します。
既に作成済みのグラフのスタイルを柔軟に変更することで、データの見やすさや分析内容を調整できます。
コード例 | 棒グラフを折れ線グラフに変更
Sub ChangeColumnChartToLineChart()
Dim ws As Worksheet
Dim chartObj As ChartObject
Dim series As Series
'// アクティブシートの最初のグラフを取得
Set ws = ActiveSheet
Set chartObj = ws.ChartObjects(1)
'// データ系列が存在するか確認
If chartObj.Chart.SeriesCollection.Count > 0 Then
'// 各データ系列を順番に折れ線グラフに変更
For Each series In chartObj.Chart.SeriesCollection
series.ChartType = xlLine '// 折れ線グラフに変更
Next series
MsgBox "グラフを棒グラフから折れ線グラフに変更しました!", vbInformation
Else
MsgBox "データ系列が存在しません。", vbExclamation
End If
End Sub
処理結果


コードの動作概要
ChartObjects(1)
を使用して、シート上の最初のグラフを取得します。
SeriesCollection.Count
を使用して、データ系列が存在するか確認します。
系列が存在しない場合はメッセージを表示し、処理を終了します。
For Each
ループで、すべてのデータ系列を順番に取得。
ChartType = xlLine
で、棒グラフ(xlColumnClustered
)を折れ線グラフに変更。
メッセージボックスを表示して、変更が完了したことを通知します。
このコードで使用している機能
機能 | 説明 |
---|---|
Set | オブジェクト変数に値を代入します。 |
ChartObjects(1) | シート上の最初のグラフオブジェクトを取得します。 |
SeriesCollection.Count | グラフ内のデータ系列の数を取得します。 |
For Each | グラフ内のすべてのデータ系列を順番に操作します。 |
ChartType = xlLine | データ系列のグラフ種類を折れ線グラフ(xlLine )に変更します。 |
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Set ws = ActiveSheet
- アクティブなシート(現在表示されているシート)を取得して、
ws
に格納します。
- アクティブなシート(現在表示されているシート)を取得して、
- Set chartObj = ws.ChartObjects(1)
- シート上に存在する最初のグラフ(
ChartObjects(1)
)を取得し、chartObj
という変数に代入します。ChartObjects
はシート上のすべてのグラフを管理するコレクションで、(1)
は1番目のグラフを指定しています。
- シート上に存在する最初のグラフ(
- If chartObj.Chart.SeriesCollection.Count > 0 Then
- グラフ内に存在するすべてのデータ系列(
SeriesCollection
)を順番にループで取得します。
各系列がseries
という一時的な変数に代入され、ループ内でその系列を操作できます。
- グラフ内に存在するすべてのデータ系列(
- series.ChartType = xlLine
- 各データ系列のグラフの種類を
xlLine
(折れ線グラフ)に変更します。ChartType
の詳細- ここではデータ系列の種類を個別に設定します。
たとえば、棒グラフ(xlColumnClustered
)から折れ線グラフ(xlLine
)に変更することで、データの推移が視覚的にわかりやすくなります。
- ここではデータ系列の種類を個別に設定します。
- 各データ系列のグラフの種類を
- Next series
For Each
ループの終わりを示します。
次のデータ系列がseries
に代入され、ループ内の処理が再び実行されます。
- MsgBox “グラフを棒グラフから折れ線グラフに変更しました!”, vbInformation
- 処理が完了したことをユーザーに通知するメッセージボックスを表示します。
- Else
MsgBox “データ系列が存在しません。”, vbExclamation- 条件分岐の
Else
部分です。
グラフ内にデータ系列が存在しない場合、このメッセージボックスが表示されます。
- 条件分岐の
総括・ポイント
- このコードでできること
- 棒グラフを簡単に折れ線グラフに変更可能。
- データ系列が複数ある場合でも、一括で変更を適用。
- 応用例
- 一部の系列だけを変更
- 特定の系列のみを折れ線グラフに変更したい場合は、
SeriesCollection(1)
のように個別に指定可能です。chartObj.Chart.SeriesCollection(1).ChartType = xlLine
- 特定の系列のみを折れ線グラフに変更したい場合は、
- 他のグラフ種類への変更
- 折れ線グラフ以外にも、以下のような種類に変更できます。
- 棒グラフ(
xlColumnClustered
) - 散布図(
xlXYScatter
) - 円グラフ(
xlPie
)
- 棒グラフ(
- 折れ線グラフ以外にも、以下のような種類に変更できます。
- 一部の系列だけを変更
- 注意ポイント
- グラフ種類の変更には互換性があります。
一部のグラフ種類(例: 円グラフ)には制限があるため、変更前に確認が必要です。
- グラフ種類の変更には互換性があります。
使用例3: 第二軸のスケールを動的に調整
このコードでは、複合グラフの第二軸(利益率や成長率など)のスケールをデータに応じて動的に調整します。
データ範囲が広い場合や、1%~100%の数値を明確に可視化したい場合に便利です。
コード例 | 第二軸のスケールを動的に調整
Sub AdjustSecondaryAxisScale()
Dim ws As Worksheet
Dim chartObj As ChartObject
'// アクティブシートの最初のグラフを取得
Set ws = ActiveSheet
Set chartObj = ws.ChartObjects(1)
'// 第二軸の最小値と最大値を設定
With chartObj.Chart.Axes(xlValue, xlSecondary)
.MinimumScale = 50
.MaximumScale = 100
End With
MsgBox "第二軸のスケールを調整しました!", vbInformation
End Sub
処理結果


コードの動作概要
アクティブシートの最初のグラフを取得します。
シート上に複数のグラフがある場合は、特定のグラフを選択して処理を実行できます。
Axes(xlValue, xlSecondary)
を使用して、第二軸(右側のY軸)を取得します。
.MinimumScale
で軸の最小値を設定(ここでは50
)。
.MaximumScale
で軸の最大値を設定(ここでは100
)。
スケール変更が完了したことを示すメッセージボックスを表示します。
このコードで使用している機能
機能 | 説明 |
---|---|
Set | オブジェクト変数に値を代入します。 |
ChartObjects(1) | シート上の最初のグラフオブジェクトを取得します。 |
Axes(xlValue, xlSecondary) | 第二軸(右側のY軸)を取得します。 |
.MinimumScale | 第二軸の最小値を設定します(ここでは0 )。 |
.MaximumScale | 第二軸の最大値を設定します(ここでは1 、パーセント形式)。 |
MsgBox | 処理が完了したことをユーザーに通知します。 |
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Set ws = ActiveSheet
- アクティブなシート(現在表示されているシート)を取得して、
ws
に格納します。
- アクティブなシート(現在表示されているシート)を取得して、
- Set chartObj = ws.ChartObjects(1)
- シート上にある最初のグラフオブジェクト(
ChartObjects(1)
)を取得し、chartObj
変数に代入します。 - 注意: シート上にグラフがない場合、このコードはエラーを発生させます。
エラーを回避するために事前確認を追加することも可能です。
- シート上にある最初のグラフオブジェクト(
- With chartObj.Chart.Axes(xlValue, xlSecondary)
- グラフの第二軸(右側のY軸)を取得します。
xlValue
は値軸(縦軸)を、xlSecondary
は第二軸を指定しています。
- グラフの第二軸(右側のY軸)を取得します。
- .MinimumScale = 50
- 第二軸の最小値を
50
に設定します。
- 第二軸の最小値を
- .MaximumScale = 100
- 第二軸の最大値を
100
に設定します。
- 第二軸の最大値を
- End With
With
ステートメントの終了を示します。これ以降は通常のコードに戻ります。
- MsgBox “第二軸のスケールを調整しました!”, vbInformation
- 処理が完了したことをメッセージボックスで通知します。
総括・ポイント
- このコードでできること
- 第二軸のスケールをデータに合わせて動的に設定。
- 複合グラフの利益率や成長率などを正確に表示可能。
- 応用例
- 自動スケール調整
- データの最小値と最大値に基づいてスケールを動的に設定する場合は、以下のコードを使用できます。
With chartObj.Chart.Axes(xlValue, xlSecondary)
.MinimumScale = Application.WorksheetFunction.Min(ws.Range("C2:C10"))
.MaximumScale = Application.WorksheetFunction.Max(ws.Range("C2:C10"))
End With - 軸タイトルを追加
- 第二軸に「利益率 (%)」のようなタイトルを設定して視覚的にわかりやすくすることができます。
With chartObj.Chart.Axes(xlValue, xlSecondary)
.HasTitle = True
.AxisTitle.Text = "利益率 (%)"
End With
- 第二軸に「利益率 (%)」のようなタイトルを設定して視覚的にわかりやすくすることができます。
- データの最小値と最大値に基づいてスケールを動的に設定する場合は、以下のコードを使用できます。
- 自動スケール調整
この記事のまとめ
この記事では、「VBAでグラフを操作するSeriesCollectionオブジェクト」 について詳しく解説しました。
基本的な使い方から実際のコード例まで、初心者でも理解しやすい内容で構成しています。
ポイントのおさらい
- SeriesCollectionオブジェクトの基本的な使い方を習得
- SeriesCollectionオブジェクトの役割や、データ系列の色、名前、軸の設定など、基本的な操作方法を解説しました。
⇒ 「VBA-SeriesCollectionとは? データ系列を操作する基礎オブジェクト」をもう一度見る
- SeriesCollectionオブジェクトの役割や、データ系列の色、名前、軸の設定など、基本的な操作方法を解説しました。
- ChartObjectとSeriesCollectionの違いを把握
- ChartObject がグラフ全体を操作するのに対し、SeriesCollection はデータ系列ごとに操作を行う役割を持つことを解説しました。
⇒ 「グラフを操作する「SeriesCollection」と「ChartObject」の違いを解説」をもう一度見る
- ChartObject がグラフ全体を操作するのに対し、SeriesCollection はデータ系列ごとに操作を行う役割を持つことを解説しました。
- 注意ポイントを理解してトラブルを回避
- 存在しない系列を操作しようとした場合のエラーや、グラフ種類変更時の制限など、SeriesCollection使用時の注意点を解説しました。
⇒ 「VBA-SeriesCollectionを使用する際に注意すべき3つのポイント」をもう一度見る
- 存在しない系列を操作しようとした場合のエラーや、グラフ種類変更時の制限など、SeriesCollection使用時の注意点を解説しました。
- 実際にグラフを操作する使用例を学ぶ
- 複合グラフの作成
- 売上と利益率を第一軸・第二軸で分けて表示。
- グラフ種類の変更
- 既存の棒グラフを折れ線グラフに変更。
- 第二軸のスケール調整
- 利益率のスケールを50~100%に設定。
⇒ 「VBA SeriesCollectionでグラフを操作する使用例をご紹介」をもう一度見る
- 利益率のスケールを50~100%に設定。
- 複合グラフの作成
さらに学ぶために
SeriesCollectionをマスターすると、Excel VBAのグラフ操作の幅が一気に広がります。
以下の記事も合わせて参考にすると、VBAの応用力がさらに高まります!

