大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、グラフの作成と操作について、ご紹介します。グラフの作成から書式設定、系列の操作と書式設定、グラフのコピーから保存まで網羅的に解説していきます。紹介するVBAコードを使えば、グラフの作成と操作が自由自在にできるようになります。実務でVBAを使ってグラフ操作をバンバン自動化していきましょう。

はじめに

この記事では、グラフの作成と操作を、網羅的にご紹介します。

グラフの作成、書式設定、系列の操作と書式設定、グラフのコピーから保存まで、を解説していきます。

この記事内容のVBAコードを使えば、実務で使えるレベルのグラフ操作ができるようになります。

実務でVBAを使って、グラフの操作をバンバン自動化していきましょう。

では、グラフの作成と操作について、解説していきます。

この記事を読むメリット

  • VBAを使ったグラフの作成と操作が、実務で使えるレベルになります

目次

グラフの取得と削除

グラフの取得と削除する方法です。

グラフオブジェクトの位置関係

グラフオブジェクトの位置関係は、こんな感じになっています。

グラフオブジェクトの位置関係

グラフオブジェクトの位置関係

「グラフ」の中に、「チャート」があって、データはチャートの中に入っています。

グラフを選択した場合は、「ActiveChart」でチャートが操作できます。

グラフを選択する場合

グラフを選択する場合

名前の取得やグラフの削除、コピーといった全体の操作は、「グラフ」のオブジェクトを使います。

なので、選択した場合は、「ActiveChart.Parent」を使って、操作します。

グラフを指定する場合は、次のようになります。

グラフを指定する場合

グラフを指定する場合

グラフを指定して、グラフ名の取得や、削除、コピーをする場合は、「ChartObjects(1)」を使います。

グラフ名を取得

グラフ名を取得してみます。

選択する方法と、グラフを指定する方法でやってみます。

グラフを選択して名前を取得

グラフを選択して名前を取得する場合は、「ActiveChart.Parent.Name」を使います。

Sub TEST1()
    
    'グラフの名前を取得(グラフを選択する場合)
    Debug.Print ActiveChart.Parent.Name
    
End Sub

グラフを選択しておきます。

グラフを選択しておきます

では、VBAコードを実行してみます。

グラフを選択して名前を取得できました

グラフを選択して名前を取得できました。

グラフを指定して名前を取得

グラフを指定して名前を取得する場合は、「.ChartObjects(1).Name」を使います。

Sub TEST2()
    
    'グラフの名前を取得(グラフを指定する場合)
    Debug.Print ActiveSheet.ChartObjects(1).Name
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

グラフを指定して名前を取得できました

グラフを指定して名前を取得できました。

シート内のすべてのグラフ名を取得する

シート内のグラフをループすることで、すべてのグラフの名前を取得することもできます。

すべてのグラフ名を取得する方法について、詳細はこちらでまとめています。

グラフの削除と初期化

グラフの削除と初期化をしてみます。

グラフを選択して削除

グラフを選択して削除する場合は、「ActiveChart.Parent.Delete」です。

Sub TEST3()
    
    'グラフを削除(選択の場合)
    ActiveChart.Parent.Delete
    
End Sub

グラフを選択しておきます。

グラフを選択しておきます

グラフを選択しておきました。

グラフを選択して削除できます。

グラフを選択して削除できました

グラフを選択して削除できました。

グラフを指定して削除

グラフを指定して削除する場合は、「.ChartObjects(1).Delete」です。

Sub TEST4()
    
    'グラフを削除(指定する場合)
    ActiveSheet.ChartObjects(1).Delete
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

グラフを指定して削除できました

グラフを指定して削除できました。

グラフを選択して初期化

初期化するには、「.ChartArea.ClearContents」を使います。

初期化する場合は、「チャート」のオブジェクトを指定します。

Sub TEST5()
    
    'グラフを初期化(選択する場合)
    ActiveChart.ChartArea.ClearContents
    
End Sub

グラフを選択しておきます。

グラフを選択しておきます

では、VBAコードを実行してみます。

グラフを選択して初期化できました

グラフを選択して初期化できました。

グラフを指定して初期化

グラフを指定して初期化するには、「.ChartObjects(1).Chart.ChartArea.ClearContents」とします。

「チャート」の部分までを指定するのが、ポイントです。

Sub TEST6()
    
    'グラフを初期化(指定する場合)
    ActiveSheet.ChartObjects(1).Chart.ChartArea.ClearContents
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

グラフを指定して初期化できました

グラフを指定して初期化できました。

シート内のすべてのグラフを削除

シート内のグラフをループすれば、すべてのグラフを削除することもできます。

シート内のすべてのグラフを削除する方法について、詳細はこちらでまとめています。

グラフを作成する

グラフを作成してみます。

  • 折れ線グラフ
  • 散布図
  • 棒グラフ

を作成してみます。

折れ線グラフ

グラフを作成する流れは、

  • 元データを選択
  • グラフを追加
  • グラフ種類を設定

という流れです。

折れ線グラフを作成

折れ線グラフは、種類に「xlLine」を入力します。

Sub TEST7()
    
    Range("A1").Select '元データを選択
    ActiveSheet.Shapes.AddChart2.Select 'グラフを挿入
    ActiveChart.ChartType = xlLine '「折れ線」
    
End Sub

元データを用意しておきます。

元データを用意しておきます

では、VBAコードを実行してみます。

折れ線グラフを作成できました

折れ線グラフを作成できました。

折れ線グラフの書式設定

折れ線グラフの簡単な書式設定について、詳細はこちらでまとめています。

散布図

次は、散布図を作成してみます。

散布図を作成

散布図を作成する場合は、種類に「xlXYScatter」を入力します。

散布図の場合は、「.SetSourceData」で参照範囲を設定すると、うまく作成することができます。

Sub TEST8()

    '散布図を作成
    ActiveSheet.Shapes.AddChart2.Select 'グラフを挿入
    ActiveChart.ChartType = xlXYScatter '散布図に変更
    ActiveChart.SetSourceData Range("A1").CurrentRegion '参照範囲を設定
    
End Sub

元データを用意しておきます。

元データを用意しておきます

では、VBAコードを実行してみます。

散布図を作成できました

散布図を作成できました。

散布図の書式設定

散布図の簡単な書式設定について、詳細はこちらでまとめています。

棒グラフ

次は、棒グラフを作成してみます。

棒グラフを作成

棒グラフの場合は、種類に「xlColumnClustered」を入力します。

Sub TEST9()
    
    '棒グラフを作成
    ActiveSheet.Range("A1").Select '元データを選択
    ActiveSheet.Shapes.AddChart2.Select 'グラフを作成
    ActiveChart.ChartType = xlColumnClustered '集合縦棒
    
End Sub

元データを用意しておきます。

元データを用意しておきます

では、VBAコードを実行してみます。

棒グラフを作成できました

棒グラフを作成できました。

棒グラフの書式設定

棒グラフの簡単な書式設定について、詳細はこちらでまとめています。

グラフの種類と参照範囲の変更

グラフの種類と参照範囲の変更をしてみます。

グラフ種類を変更

グラフ種類を変更は、「.ChartType」を使います。

「棒グラフ」に変更

棒グラフに変更するVBAコードです。

Sub TEST10()
    
    'グラフ種類を変更
    ActiveSheet.ChartObjects(1).Chart.ChartType = xlColumnClustered  '集合縦棒
    
End Sub

折れ線グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

「棒グラフ」に変更できました

「棒グラフ」に変更できました。

グラフの種類一覧について

グラフの種類一覧について、詳細はこちらでまとめています。

参照範囲を変更

グラフの「参照範囲」を変更してみます。

「参照範囲」を変更

参照範囲を変更するには、「.SetSourceData」を使います。

Sub TEST11()
    
    '参照範囲を設定
    ActiveSheet.ChartObjects(1).Chart.SetSourceData Range("A1:C3")
    
    '「横方向のデータ」を系列にする
    ActiveSheet.ChartObjects(1).Chart.PlotBy = xlColumns
    
End Sub

参照範囲を変更すると、系列が変わる場合があるので、「.PlotBy = xlColumns」で系列を指定しています。

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

「参照範囲」を変更できました

「参照範囲」を変更できました。

「SetSourceData」の詳細な使い方

「SetSourceData」をうまく使うと、「離れたセル範囲を参照」したり、「系列の追加」、「データの追加」をすることができます。

SetSourceDataを使った、参照範囲の変更について、詳細はこちらでまとめています。

別シートのセル範囲を参照する場合の注意点

別シートのグラフを作成したり、別シートの元データを参照する場合は、「シート」まで指定する必要があります。

別シートにグラフを作成する方法について、詳細はこちらでまとめています。

グラフの位置とサイズを設定

グラフの位置とサイズを設定してみます。

位置を設定

位置を設定してみます。

「左」と「上」の位置を設定

位置を設定するには、「.Left」と「.Top」を使います。

Sub TEST12()
    
    With ActiveSheet.ChartObjects(1)
        .Left = Range("B7").Left '左の位置
        .Top = Range("B7").Top '上の位置
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

「左」と「上」の位置を設定できました

「左」と「上」の位置を設定できました。

別シートの同じ位置にコピーや移動ができる

位置を取得できれば、グラフを別シートの「同じ位置」のコピーや移動ができます。

別シートの同じ位置にコピーや移動する方法について、詳細はこちらでまとめています。

サイズを設定

サイズを設定するには、「.Width」と「.Height」を使います。

Sub TEST13()
    
    With ActiveSheet.ChartObjects(1)
        .Width = Range("B7:G17").Width '幅
        .Height = Range("B7:G17").Height '高さ
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意

グラフを用意しておきます

では、VBAコードを実行してみます。

「幅」と「高さ」を設定

「幅」と「高さ」を設定できました

「幅」と「高さ」を設定できました。

グラフの書式を設定

グラフの書式を設定する方法です。

次の書式を設定してみます。

  • タイトル
  • 凡例
  • 軸ラベル

まずは、タイトルからです。

タイトル

タイトルを設定してます。

「タイトル」を表示

「タイトル」を表示するには、「.HasTitle = True」を使います。

Sub TEST14()
    
    With ActiveSheet.ChartObjects(1).Chart
        .HasTitle = True 'タイトルを表示
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

「タイトル」を表示できました

「タイトル」を表示できました。

「テキスト」「文字色」「文字サイズ」を設定

「テキスト」「文字色」「文字サイズ」を設定するには、「.ChartTitle」を使います。

それぞれ、「.Text」「.Font.Color」「.Font.Size」で設定できます。

Sub TEST15()
    
    'タイトル
    With ActiveSheet.ChartObjects(1).Chart.ChartTitle
        .Text = "売上一覧"
        .Font.Color = RGB(255, 0, 0) '赤色
        .Font.Size = 20 '文字サイズ
    End With
    
End Sub

タイトルを表示しておきます。

タイトルを表示しておきます

では、VBAコードを実行してみます。

「テキスト」「文字色」「文字サイズ」を設定できました

「テキスト」「文字色」「文字サイズ」を設定できました。

タイトルの位置や背景色の設定

VBAでタイトルの位置や背景色を設定することもできます。

タイトルの位置や背景色の設定について、詳細はこちらでまとめています。

凡例

凡例を設定してみます。

「凡例」を表示

「凡例」を表示するには、「.HasLegend = True」を使います。

Sub TEST16()
    
    With ActiveSheet.ChartObjects(1).Chart
        .HasLegend = True '凡例を表示
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

「凡例」を表示できました

「凡例」を表示できました。

「凡例」を下に配置

「凡例」を設定するには、「.Legend」を使います。

凡例の位置を設定する場合は、「.Position」を使って設定します。

Sub TEST17()
    
    '凡例
    With ActiveSheet.ChartObjects(1).Chart.Legend
        .IncludeInLayout = True 'グラフと重ねない
        .Position = xlBottom '下に表示
    End With
    
End Sub

凡例を表示しておきます。

凡例を表示しておきます

では、VBAコードを実行してみます。

「凡例」を下に配置できました

「凡例」を下に配置できました。

凡例の「位置の設定一覧」や「背景色」の設定

凡例は、「下」だけでなく、「上、左、右」にも設定できます。

凡例の「位置の設定一覧」や「背景色」の設定について、詳細はこちらでまとめています。

「軸」を設定してみます。

軸は、「縦軸の第1軸、第2軸」、「横軸の第1軸、第2軸」があります。

それぞれ、軸を表示するVBAコードは、こんな感じになります。

'軸の表示/非表示
ActiveSheet.ChartObjects(1).Chart.HasAxis(xlValue, 1) = True '「縦軸」の「第1軸」を表示(非表示はFalse)
ActiveSheet.ChartObjects(1).Chart.HasAxis(xlValue, 2) = True '「縦軸」の「第2軸」の表示(非表示はFalse)
ActiveSheet.ChartObjects(1).Chart.HasAxis(xlCategory, 1) = True '「横軸」の「第1軸」の表示 (非表示はFalse)
ActiveSheet.ChartObjects(1).Chart.HasAxis(xlCategory, 2) = True '「横軸」の「第2軸」の表示(非表示はFalse)

では、それぞれの軸を表示してみます。

「縦軸の第1軸」を表示

「縦軸の第1軸」を表示するには、「.HasAxis(xlValue, 1) = True」を使います。

Sub TEST18()
    
    '縦軸の第1軸を表示
    ActiveSheet.ChartObjects(1).Chart.HasAxis(xlValue, 1) = True
        
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

「縦軸の第1軸」を表示できました

「縦軸の第1軸」を表示できました。

「縦軸の第2軸」を表示

「縦軸の第2軸」を表示するには、「.HasAxis(xlValue, 2) = True」を使います。

Sub TEST19()
    
    '縦軸の第2軸を表示
    ActiveSheet.ChartObjects(1).Chart.HasAxis(xlValue, 2) = True
        
End Sub

では、VBAコードを実行してみます。

「縦軸の第2軸」を表示できました

「縦軸の第2軸」を表示できました。

「横軸の第1軸」を表示

「横軸の第1軸」を表示するには、「.HasAxis(xlCategory, 1) = True」を使います。

Sub TEST20()
    
    '横軸の第1軸を表示
    ActiveSheet.ChartObjects(1).Chart.HasAxis(xlCategory, 1) = True
        
End Sub

では、VBAコードを実行してみます。

「横軸の第1軸」を表示できました

「横軸の第1軸」を表示できました。

「横軸の第2軸」を表示

「横軸の第2軸」を表示するには、「.HasAxis(xlCategory, 2) = True」を使います。

Sub TEST21()
    
    '横軸の第2軸を表示
    ActiveSheet.ChartObjects(1).Chart.HasAxis(xlCategory, 2) = True
        
End Sub

では、VBAコードを実行してみます。

「横軸の第2軸」を表示できました

「横軸の第2軸」を表示できました。

スケールを設定

スケールの最大値と最小値を設定してみます。

軸を設定するには、「.Axes」を使います。

最小の設定が「.MinimumScale」が、最大の設定が「.MaximumScale」です。

Sub TEST22()
    
    '縦軸の第1軸
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue, 1)
        .MinimumScale = 500 '「最小」の目盛り
        .MaximumScale = 1200 '「最大」の目盛り
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

スケールを設定できました

スケールを設定できました。

スケールを「自動」にする

スケールを「自動」にしてみます。

最小を自動にするには「.MinimumScaleIsAuto」を使って、最小は「.MaximumScaleIsAuto」を使います。

Sub TEST23()
    
    '縦軸の第1軸
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue, 1)
        .MinimumScaleIsAuto = True '「最小」の目盛りを「自動」
        .MaximumScaleIsAuto = True '「最大」の目盛りを「自動」
    End With
    
End Sub

では、VBAコードを実行してみます。

スケールを「自動」にできました

スケールを「自動」にできました。

「軸」の文字書式や表示形式、背景色について

グラフの「軸」で、文字の書式や表示形式、背景色を設定することもできます。

「軸」の文字書式や表示形式、背景色の設定について、詳細はこちらでまとめています。

軸ラベル

「軸ラベル」を設定してみます。

軸ラベルには「縦軸の第1軸ラベル、第2軸ラベル」と「横軸の第1軸ラベル、第2軸ラベル」があります。

'軸ラベルを表示/非表示
ActiveSheet.ChartObjects(1).Chart.Axes(xlValue, 1).HasTitle = True '縦軸の第1軸ラベルを表示(非表示はFalse)
ActiveSheet.ChartObjects(1).Chart.Axes(xlValue, 2).HasTitle = True '縦軸の第2軸ラベルを表示(非表示はFalse)
ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory, 1).HasTitle = True '横軸の第1軸ラベルを表示(非表示はFalse)
ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory, 2).HasTitle = True '横軸の第2軸ラベルを表示(非表示はFalse)

では、それぞれの軸ラベルを表示してみます。

「縦軸の第1軸ラベル」を表示

「縦軸の第1軸ラベル」を表示するには、「.Axes(xlValue, 1).HasTitle = True」を使います。

Sub TEST24()
    
    '縦軸の第1軸
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue, 1)
        .HasTitle = True '軸ラベルを表示
    End With
        
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

「縦軸の第1軸ラベル」を表示できました

「縦軸の第1軸ラベル」を表示できました。

「縦軸の第2軸ラベル」を表示

「縦軸の第2軸ラベル」を表示するには、「.Axes(xlValue, 2).HasTitle = True」を使います。

Sub TEST25()
    
    '縦軸の第2軸
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue, 2)
        .HasTitle = True '軸ラベルを表示
    End With
        
End Sub

では、VBAコードを実行してみます。

「縦軸の第2軸ラベル」を表示できました

「縦軸の第2軸ラベル」を表示できました。

「横軸の第1軸ラベル」を表示

「横軸の第1軸ラベル」を表示するには、「.Axes(xlCategory, 1).HasTitle = True」を使います。

Sub TEST26()
    
    '横軸の第1軸
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory, 1)
        .HasTitle = True '軸ラベルを表示
    End With
        
End Sub

では、VBAコードを実行してみます。

「横軸の第1軸ラベル」を表示できました

「横軸の第1軸ラベル」を表示できました。

「横軸の第2軸ラベル」を表示

「横軸の第2軸ラベル」を表示するには、「.Axes(xlCategory, 2).HasTitle = True」を使います。

Sub TEST27()
    
    '横軸の第2軸
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory, 2)
        .HasTitle = True '軸ラベルを表示
    End With
        
End Sub

では、VBAコードを実行してみます。

「横軸の第2軸ラベル」を表示できました

「横軸の第2軸ラベル」を表示できました。

ラベルにテキストを入力

軸ラベルを設定するには、「.Axes(xlValue, 1).AxisTitle」を使います。

テキストを入力するには、「.Text」に入力します。

Sub TEST28()
    
    '縦軸の第1軸のラベル
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue, 1).AxisTitle
        .Text = "売上"
    End With
        
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

ラベルにテキストを入力できました

ラベルにテキストを入力できました。

ラベルの「文字色」と「文字サイズ」を設定

ラベルの「文字色」と「文字サイズ」を設定するには、それぞれ「.Font.Color」と「.Font.Size」を使います。

Sub TEST29()
    
    '縦軸の第1軸のラベル
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue, 1).AxisTitle
        .Font.Color = RGB(255, 0, 0) '赤色
        .Font.Size = 15 'サイズ
    End With
        
End Sub

ラベルを表示しておきます。

ラベルを表示しておきます

では、VBAコードを実行してみます。

ラベルの「文字色」と「文字サイズ」を設定できました

ラベルの「文字色」と「文字サイズ」を設定できました。

軸ラベルの背景色や枠線の設定

軸ラベルは、背景色や枠線を設定することもできます。

「軸ラベル」の背景色や枠線の設定について、詳細はこちらでまとめています。

グラフの系列の操作

グラフの系列を操作する方法を解説します。

系列のイメージ

系列のイメージは、こんな感じで、グラフ⇒チャート⇒系列の位置関係となっています。

グラフ⇒チャート⇒系列の位置関係

グラフ⇒チャート⇒系列の位置関係

系列は、左から連番で「1、2、3」と指定することができます。

系列の順番

系列の順番

系列の位置関係を把握しておきましょう。

系列名を取得

系列名を取得してみます。

グラフの系列名を取得

グラフの系列名を取得するには、「.Name」を使います。

Sub TEST30()
    
    '「1つ目」のグラフの「1つ目」の系列の「名前」
    Debug.Print ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Name
    
End Sub

グラフを用意しておきます

グラフを用意しておきます

では、VBAコードを実行してみます。

グラフの系列名を取得できました

グラフの系列名を取得できました

すべての系列名を取得

すべての系列名を取得してみます。

「For Each」を使って、すべての系列をループします。

Sub TEST31()
    
    '「1つ目」のグラフの系列をループ
    For Each a In ActiveSheet.ChartObjects(1).Chart.SeriesCollection
        Debug.Print a.Name '名前を取得
    Next
        
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

すべての系列名を取得できました

すべての系列名を取得できました

「For」を使ってすべての系列名を取得

「For Each」を使わないで、「For」ですべての系列を取得することもできます。

「For」ですべての系列を取得する方法について、詳細はこちらでまとめています。

系列の切り替え

系列の切り替えしてみます。

系列の切り替えは、「.PlotBy」を使います。

'系列にするデータを指定
ActiveSheet.ChartObjects(1).Chart.PlotBy = 系列にするデータ(xlRowsもしくはxlColumns)

元データの「縦方向のデータ」もしくは「横方向のデータ」のどのデータを系列にするかを設定できます。

「縦方向のデータ」を系列にする

「縦方向のデータ」を系列にするには、「.PlotBy = xlRows」とします。

Sub TEST32()
    
    '「行のデータ」を系列にする
    ActiveSheet.ChartObjects(1).Chart.PlotBy = xlRows
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

「縦方向のデータ」を系列にできました

「縦方向のデータ」を系列にできました。

「横方向のデータ」を系列にする

「横方向のデータ」を系列にするには、「.PlotBy = xlColumns」です。

Sub TEST33()
    
    '「列のデータ」を系列にする
    ActiveSheet.ChartObjects(1).Chart.PlotBy = xlColumns
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

「横方向のデータ」を系列にできました

「横方向のデータ」を系列にできました。

系列の削除

系列を削除してみます。

系列の削除は、「.Delete」を使います。

2つ目の系列を削除してみます。

Sub TEST34()
        
    '系列を削除
    ActiveSheet.ChartObjects(1).Chart.SeriesCollection(2).Delete
    
End Sub

グラフを用意しておきます。

グラフを用意

グラフを用意しておきます

では、VBAコードを実行してみます。

「2つ目」の系列を削除

「2つ目」の系列を削除できました

「2つ目」の系列を削除できました。

系列の非表示

系列を非表示にしてみます。

系列の非表示と表示をする場合は、「.FullSeriesCollection」を使うのがポイントです。

「.FullSeriesCollection」と「.SeriesCollection」の違いは、こちらでまとめています。

「2つ目」の系列を非表示

「2つ目」の系列を非表示にしてみます。

非表示にするには、「.IsFiltered」を使います。

Sub TEST35()
        
    '系列を非表示
    ActiveSheet.ChartObjects(1).Chart.FullSeriesCollection(2).IsFiltered = True
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

「2つ目」の系列を非表示にできました

「2つ目」の系列を非表示にできました。

データソースで確認してみます。

データソースで確認してみます

「2つ目」の系列が非表示になっています。

「2つ目」の系列を表示

非表示にした「2つ目」の系列を表示してみます。

「.IsFiltered = False」で表示します。

Sub TEST36()
        
    '系列を表示
    ActiveSheet.ChartObjects(1).Chart.FullSeriesCollection(2).IsFiltered = False
    
End Sub

2つ目の系列を非表示にしたグラフを用意しておきます。

2つ目の系列を非表示にしたグラフを用意します

では、VBAコードを実行してみます。

2つ目の系列を表示できました

2つ目の系列を表示できました。

系列の追加

グラフに新しい系列を追加してみます。

「系列」を追加

系列を追加するには、「.NewSeries」を使います。

Sub TEST37()
    
    '新しい系列追加
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection.NewSeries
        .Name = Range("E1") '系列名
        .Values = Range("E2:E4") 'データ範囲
    End With

End Sub

元データにデータを追加しておきます。

元データにデータを追加します

では、VBAコードを実行してみます。

「系列」を追加できました

「系列」を追加できました。

「SetSourceData」を使うと簡単

系列の追加は、「SetSourceData」を使う方が簡単です。

系列の追加、X軸のデータ追加などもできて、応用が利きます。

「SetSourceData」を使って系列を追加する方法について、詳細はこちらでまとめています。

配列からグラフを作成したい場合は「NewSeries」

配列からグラフを作成したい場合は、「NewSeries」が使えます。

配列からグラフを作成する方法について、詳細はこちらでまとめています。

系列を2軸に設定

系列を2軸に設定してみます。

系列を「2軸」に設定

系列を2軸に設定するには、「.AxisGroup = 2」とします。

Sub TEST38()
    
    '「4つ目」の系列
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(4)
        .AxisGroup = 2  '第2軸にする
    End With
        
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

系列を「2軸」に設定できました

系列を「2軸」に設定できました。

初期状態から2軸設定までをやってみる

元データからグラフ作成して、2軸設定したグラフを作成する方法について、詳細はこちらでまとめています。

系列の種類を変更

系列の「種類」を変更してみます。

系列の種類を「折れ線」にする

系列を「.SeriesCollection(4)」で指定して、「.ChartType」で系列の種類を変更できます。

Sub TEST39()
    
    '「4つ目」の系列
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(4)
        .ChartType = xlLine '折れ線に変更する
    End With
        
End Sub

「2軸」設定したグラフを用意します。

「2軸」設定したグラフを用意します

では、VBAコードを実行してみます。

系列の種類を「折れ線」に変更できました

系列の種類を「折れ線」に変更できました。

グラフの種類一覧について

グラフの種類一覧について、詳細はこちらでまとめています。

グラフの系列の書式設定

グラフの系列の書式設定をしてみます。

  • 系列の線
  • 系列のマーカー
  • 棒グラフの色
  • データラベル

について、解説します。

系列の線を設定(折れ線と散布図)

折れ線と散布図の場合の、系列の線を設定してみます。

折れ線と散布図で同じように使うことができます。

線の「色」を設定

線の「色」を設定するには、「.Format.Line」を使います。

最初に「.Visible = msoTrue」で塗りつぶしありにして、色と透過率を「.ForeColor.RGB」と「.Transparency」で設定します。

Sub TEST40()
    
    '1つ目の系列の「線」
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Format.Line
        .Visible = msoTrue '塗りつぶしあり
        .ForeColor.RGB = RGB(0, 255, 0) '緑色
        .Transparency = 0.5 '透過率
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

線の「色」を設定できました

線の「色」を設定できました。

線の「太さ」を設定

線の「太さ」を設定するには、「.Weight」を使います。

Sub TEST41()
    
    '1つ目の系列の「線」
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Format.Line
        .Weight = 5 '太さ(マーカーの枠線の太さも変わる)
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

線の「太さ」を設定できました

線の「太さ」を設定できました。

線の「種類」を設定

線の「種類」を設定するには、「.DashStyle」を使います。

Sub TEST42()
    
    '1つ目の系列の「線」
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Format.Line
        .DashStyle = msoLineSysDot '点線(丸)
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

線の「種類」を設定できました

線の「種類」を設定できました。

「線の種類一覧」と「ポイント単位」の設定

系列の「線の種類一覧」と「ポイント単位」の設定について、詳細はこちらでまとめています。

系列のマーカーを設定(折れ線と散布図)

折れ線と散布図で、系列のマーカーを設定してみます。

マーカーを設定

マーカーを設定するには、「.MarkerStyle」を使います。

「1~9」の値を設定して、種類を選択できます。

Sub TEST43()
    
    '1つ目の系列
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
        .MarkerStyle = 1 'マーカーを表示(種類:1~9)
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

マーカーを設定できました

マーカーを設定できました。

マーカーの種類については、こちらでまとめています。

マーカーの「サイズ」を設定

マーカーの「サイズ」を設定するには、「.MarkerSize」を使います。

Sub TEST44()
    
    '1つ目の系列
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
        .MarkerSize = 8 'マーカーのサイズ
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

マーカーの「サイズ」を設定できました

マーカーの「サイズ」を設定できました。

マーカーの「背景色」を設定

マーカーの「背景色」を設定するには、「.MarkerBackgroundColor」を使います。

Sub TEST45()

    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
        'マーカーの背景色
        .MarkerBackgroundColor = RGB(255, 0, 0) '赤
    End With
        
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

マーカーの「背景色」を設定できました

マーカーの「背景色」を設定できました。

マーカーの「枠線色」を設定

マーカーの「枠線色」を設定するには、「.MarkerForegroundColor」を使います。

Sub TEST46()

    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
        'マーカーの枠線色
        .MarkerForegroundColor = RGB(255, 0, 0) '赤
    End With
        
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

マーカーの「枠線色」を設定できました

マーカーの「枠線色」を設定できました。

マーカーのポイント単位の設定

マーカーはポイント単位で設定することができます。

マーカーをポイント単位で設定する方法について、詳細はこちらでまとめています。

系列の色を設定(棒グラフ)

棒グラフの場合で、系列の色を設定してみます。

棒グラフの「色」を設定

系列の色を設定するには、「.Format.Fill」を使います。

色の変更は、「.ForeColor.RGB」に色を設定します。

Sub TEST47()
    
    '1つ目の系列の塗りつぶし
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Format.Fill
        .ForeColor.RGB = RGB(0, 255, 0) '緑
    End With
        
End Sub

棒グラフを用意しておきます。

棒グラフを用意しておきます

では、VBAコードを実行してみます。

棒グラフの「色」を設定できました

棒グラフの「色」を設定できました。

棒グラフの色を「ポイント単位」で設定

棒グラフの色は、ポイント単位で設定できます。

棒グラフの色を「ポイント単位」で設定する方法について、詳細はこちらでまとめています。

データラベルを設定

データラベルを設定する方法を、解説します。

データラベルを表示

データラベルを表示するには、「.HasDataLabels = True」とします。

Sub TEST48()
    
    '1つ目の系列のデータラベルを表示
    ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).HasDataLabels = True
    
End Sub

では、VBAコードを実行してみます。

データラベルを表示できました

データラベルを表示できました。

全系列のデータラベルを表示

全系列のデータラベルを表示するには、「For」で系列をループして表示します。

系列の数は、「.SeriesCollection.Count」で取得できますので、その系列の数だけループします。

Sub TEST49()
    
    '1つ目の系列
    With ActiveSheet.ChartObjects(1).Chart
        '系列をループ
        For i = 1 To .SeriesCollection.Count
            .SeriesCollection(i).HasDataLabels = True 'データラベルを表示
        Next
    End With
    
End Sub

では、VBAコードを実行してみます。

全系列のデータラベルを表示できました

全系列のデータラベルを表示できました。

データラベルの「位置」を設定(棒グラフ)

棒グラフの場合で、データラベルの「位置」を設定してみます。

グラフによって位置の設定は違うので注意です。

Sub TEST50()
    
    '棒グラフの場合
    '1つ目の系列のデータラベル
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels
        .Position = xlLabelPositionInsideEnd '内側上
    End With
    
End Sub

データラベルを表示しておきます。

データラベルを表示しておきます

では、VBAコードを実行してみます。

データラベルの「位置」を設定できました

データラベルの「位置」を設定できました。

棒グラフのデータラベルの「位置の一覧」は、こちらでまとめています。

データラベルの「位置」を設定(折れ線グラフと散布図)

次は、折れ線グラフと散布図の場合で、データラベルの「位置」を設定してみます。

Sub TEST51()
    
    '折れ線グラフと散布図の場合
    '1つ目の系列のデータラベル
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels
        .Position = xlLabelPositionCenter '中央
    End With
    
End Sub

データラベルを表示しておきます。

データラベルを表示しておきます

では、VBAコードを実行してみます。

データラベルの「位置」を設定できました

データラベルの「位置」を設定できました。

折れ線グラフと散布図のデータラベルの「位置の一覧」は、こちらでまとめています。

データラベルの「書式設定」や「ポイント単位」での設定

データラベルは、文字サイズや文字色、引き出し線の追加など書式設定ができます。

データラベルも「ポイント単位」で設定することができます。

データラベルの「書式設定」や「ポイント単位」での設定について、詳細はこちらでまとめています。

グラフのコピーと保存

グラフのコピーと保存する方法を解説します。

グラフのコピー

グラフをコピーしてみます。

グラフをコピー

グラフをコピーするには、「.Copy」と「.Paste」を使ってやります。

Sub TEST52()
    
    'グラフをコピー
    ActiveSheet.ChartObjects(1).Copy
    
    ActiveSheet.Range("B14").Select 'セルを選択
    ActiveSheet.Paste 'グラフを貼り付け
    
End Sub

では、VBAコードを実行してみます。

グラフをコピーできました

グラフをコピーできました。

別シートの同じ位置にコピー

別シートの同じ位置にコピーする、というのをやってみます。

ポイントは、元グラフの「位置を取得」しておいて、貼り付け先のグラフに「位置を設定」する、というところです。

Sub TEST53()
    
    'グラフをコピー
    With Worksheets("Sheet1").ChartObjects(1)
        a = .Left '左
        b = .Top '上
        .Copy
    End With
    
    'グラフを貼り付け
    With Worksheets("Sheet2")
        .Paste '貼り付け
        .ChartObjects(.ChartObjects.Count).Left = a '左の位置
        .ChartObjects(.ChartObjects.Count).Top = b '上の位置
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

別シートの同じ位置にコピーできました

別シートの同じ位置にコピーできました。

画像としてコピーする

「.CopyPicture」を使えば画像としてコピーすることができます。

画像としてコピーする方法について、詳細はこちらでまとめています。

画像として保存

グラフは、画像として保存することができます。

「.jpg」で保存する

使うVBAコードは、「.Export」です。

Sub TEST54()
    
    '「jpg」で出力する
    ActiveSheet.ChartObjects(1).Chart.Export ThisWorkbook.Path & "\TEST.jpg"
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

「.jpg」で保存できました

「.jpg」で保存できました。

「.gif」「.png」「.bmp」で保存する

「.jpg」以外にも「.gif」「.png」「.bmp」で保存することができます。

「.jpg」以外の他の形式で保存する方法について、詳細はこちらでまとめています。

おわりに

この記事では、グラフの作成と操作を、網羅的にご紹介しました。

グラフの作成、書式設定、系列の操作と書式設定、グラフのコピーから保存まで、を解説しました。

この記事内容のVBAコードを使えば、実務で使えるレベルのグラフ操作ができるようになります。

実務でVBAを使って、グラフの操作をバンバン自動化していきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す