大体でIT

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

大体でIT

Excel VBAで、グラフのデータラベルを書式設定する方法について、ご紹介します。データラベルを設定するには、「HasDataLabels」や「DataLabels」を使います。「ベース」となるグラフを作成しておいて、一部の設定や変更をVBAで自動化すると効率的です。

はじめに

この記事では、グラフのデータラベルを書式設定する方法について、ご紹介します。

データラベルの書式設定するVBAコードは、かなりたくさんありますので、全部覚えて使いこなすのは、無理ですね。

「ベース」となるグラフを作成して、グラフの一部をVBAで変更するというのが、効率的です。

データラベルの一部を変更したい場合は、今回ご紹介するVBAコードを使って、自動化していきましょう。

では、グラフのデータラベルを書式設定する方法について、解説していきます。

この記事で紹介すること

  • グラフのデータラベルを書式設定する方法

目次から見たい項目へ移動すると便利ですよ。

目次

VBAコードまとめ

グラフのデーララベルを設定するVBAコードについて、まとめています。

VBAコードだけ確認したい場合に、ご活用ください。

'データラベルの表示/非表示
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).HasDataLabels = True '表示
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).HasDataLabels = False '非表示

'データラベルの位置
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels
    '棒グラフの場合
    .Position = xlLabelPositionCenter '中央
    .Position = xlLabelPositionInsideEnd '内側上
    .Position = xlLabelPositionInsideBase '内側軸寄り
    .Position = xlLabelPositionOutsideEnd '外側上
    '折れ線グラフと散布図の場合
    .Position = xlLabelPositionCenter '中央
    .Position = xlLabelPositionLeft '左
    .Position = xlLabelPositionRight '右
    .Position = xlLabelPositionAbove '上
    .Position = xlLabelPositionBelow '下
End With
    
'ポイント単位でデータラベルの表示と非表示
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(2).HasDataLabel = True '「2つ目のポイント」を表示
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(2).HasDataLabel = False '「2つ目のポイント」を非表示

'ポイント単位でデータラベルの位置を設定
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(2).DataLabel
    .Left = .Left - 10 '左寄せる
    .Top = .Top - 10 '上に寄せる
End With

'系列名
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels.ShowSeriesName = -1 '表示
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels .ShowSeriesName = 0 '非表示

'引き出し線
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).HasLeaderLines = True '表示
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).HasLeaderLines = False '非表示

'データラベルの文字
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels.Font.Size = 13 'サイズ
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels.Font.Color = RGB(255, 0, 0) '赤色

'データラベルの表示形式
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels.NumberFormatLocal = "\#,##0" '通貨
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels.NumberFormatLinked = -1 'セルとリンク

'データラベルの背景色
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels.Format.Fill.Visible = msoTrue '塗りつぶしあり
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels.Format.Fill.ForeColor.RGB = RGB(255, 0, 0) '赤色
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels.Format.Fill.Transparency = 0.5 '透過率
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels.Format.Fill.Visible = msoFalse '塗りつぶしなし

では、解説していきます。

データラベルの表示と非表示

VBAで、グラフのデータラベルの表示と非表示にする方法です。

系列のイメージについて、詳細はこちらでまとめています。

表示と非表示

グラフに「データラベル」を表示する方法と、非表示にする方法です。

データラベルを表示

「データラベル」を表示してみます。

「.HasDataLabels」を使います。

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

では、実行してみます。

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

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

データラベルを非表示

データラベルを非表示にしてみます。

「False」を入力すると、非表示にできます。

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

では、実行してみます。

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

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

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

次は、全系列のデータラベルの表示と非表示をやってみます。

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

全系列のデータラベルを表示してみます。

「.SeriesCollection.Count」で、「系列の数」を取得して、全系列をループします。

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

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

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

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

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

全系列のデータラベルを非表示にしてみます。

先ほどのVBAコードで、「False」を入力すると、非表示にできます。

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

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

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

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

データラベルの位置

データラベルの位置を、設定してみます。

データラベルの位置は、「グラフ毎」で違います。

「棒グラフ」と「折れ線グラフと散布図」の場合で、説明します。

棒グラフ

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

データラベルを「内側上」に配置する

データラベルを「内側上」に配置するVBAコードです。

位置の設定は、「.Position」を使います。

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

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

グラフを用意します

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

VBAでデータラベルを「内側上」に配置できました

VBAでデータラベルを「内側上」に配置できました。

棒グラフのデータラベルの配置例

棒グラフのデータラベルの配置で、引数の一覧です。

  • 中央(xlLabelPositionCenter)
  • 内側上(xlLabelPositionInsideEnd)
  • 内側軸寄り(xlLabelPositionInsideBase)
  • 外側上(xlLabelPositionOutsideEnd)

「棒グラフ」のデータラベルの配置を設定するVBAコードの例は、こんな感じになります。

'棒グラフの場合
'1つ目の系列のデータラベル
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels
    'ラベルの位置
    .Position = xlLabelPositionCenter '中央
    .Position = xlLabelPositionInsideEnd '内側上
    .Position = xlLabelPositionInsideBase '内側軸寄り
    .Position = xlLabelPositionOutsideEnd '外側上
End With

設置したい位置に応じて、VBAコードを使いましょう。

折れ線グラフと散布図

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

データラベルを「中央」に配置する

「折れ線グラフと散布図」の場合で、データラベルを「中央」に配置してみます。

先ほどと同じく、「.Position」を使います。

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

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

グラフを用意します

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

VBAでデータラベルを「中央」に配置できました

VBAでデータラベルを「中央」に配置できました。

折れ線と散布図のデータラベルの配置例

折れ線と散布図のデータラベルの配置について、引数は以下のものがあります。

  • 中央(xlLabelPositionCenter)
  • 左(xlLabelPositionLeft)
  • 右(xlLabelPositionRight)
  • 上(xlLabelPositionAbove)
  • 下(xlLabelPositionBelow)

折れ線と散布図のデータラベルの配置を設定するVBAコードの例です。

'折れ線グラフと散布図の場合
'1つ目の系列のデータラベル
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels
    'ラベルの位置
    .Position = xlLabelPositionCenter '中央
    .Position = xlLabelPositionLeft '左
    .Position = xlLabelPositionRight '右
    .Position = xlLabelPositionAbove '上
    .Position = xlLabelPositionBelow '下
End With

目的の配置に合わせて、VBAコードを使いましょう。

データラベルをポイント単位で設定

データラベルを「ポイント単位」で設定してみます。

ポイント単位でデータラベルの表示と非表示

「ポイント単位」でデータラベルの表示と非表示する方法です。

データラベルの「2つ目のポイント」を表示

データラベルの「2つ目のポイント」を表示してみます。

ポイント単位で表示する場合は、「.Points」を使います。

ポイント単位の場合は、「.HasDataLabel」のように「s」はつかないので注意です。

Sub TEST7()
    
    '1つ目の系列の「2つ目のポイント」のデータラベルを表示
    ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(2).HasDataLabel = True
    
End Sub

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

グラフを用意します

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

VBAでデータラベルの「2つ目のポイント」を表示できました

VBAでデータラベルの「2つ目のポイント」を表示できました。

データラベルの「2つ目のポイント」を非表示

先ほどとは反対に、データラベルの「2つ目のポイント」を非表示にしてみます。

先ほどのVBAコードで、「False」を入力します。

Sub TEST8()
    
    '1つ目の系列の「2つ目のポイント」のデータラベルを表示
    ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(2).HasDataLabel = False
    
End Sub

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

グラフを用意します

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

VBAでデータラベルの「2つ目のポイント」を非表示にできました

VBAでデータラベルの「2つ目のポイント」を非表示にできました。

データラベルの位置を数値で指定する

データラベルの位置を「数値」で指定することもできます。

データラベルを「左」に寄せる

データラベルを「数値」を使って、「左」に寄せてみます。

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

位置を指定するので、「ポイント単位」でしか設定することができません。

なので「.Points」も使うことになります。

Sub TEST9()
    
    '1つ目の系列の「2つ目のポイント」のデータラベル
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(2).DataLabel
        .Left = .Left - 10 '左寄せる
    End With
        
End Sub

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

グラフを用意します

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

VBAでデータラベルを「左」に寄せられました

VBAでデータラベルを「左」に寄せることができますた。

データラベルを「上」に寄せる

次は、データラベルを「上」に寄せてみます。

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

先ほどと同じように「ポイント単位」で設定することになります。

Sub TEST10()
    
    '1つ目の系列の「2つ目のポイント」のデータラベル
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(2).DataLabel
        .Top = .Top - 10 '上に寄せる
    End With
        
End Sub

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

VBAでデータラベルを「上」に寄せられました

VBAでデータラベルを「上」に寄せられました。

データラベルの書式設定

データラベルの書式設定をしてみます。

次の書式を設定します。

  • 系列名
  • 引き出し線
  • 文字サイズと文字色
  • 表示形式
  • 背景色

系列名

データラベルの「系列名」を設定してみます。

データラベルに「系列名」を表示

データラベルに「系列名」を表示します。

使うのは、「.ShowSeriesName」です。

Sub TEST11()
    
    '1つ目の系列のデータラベル
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels
        .ShowSeriesName = -1 '系列名の表示
    End With
    
End Sub

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

グラフを用意します

では、実行してみます。

VBAでデータラベルに「系列名」を表示できました

VBAでデータラベルに「系列名」を表示できました。

データラベルの「系列名」を非表示

データラベルの「系列名」を非表示にしてみます。

先ほどのVBAコードに「0」を入力します。

Sub TEST12()
    
    '1つ目の系列のデータラベル
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels
        .ShowSeriesName = 0 '系列名の非表示
    End With
    
End Sub

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

VBAでデータラベルの「系列名」を非表示にできました

VBAでデータラベルの「系列名」を非表示にできました。

引き出し線

次は、データラベルの「引き出し線」を設定してみます。

データラベルに「引き出し線」を表示

データラベルに「引き出し線」を表示します。

使うのは、「.HasLeaderLines」です。

Sub TEST13()
    
    '1つ目の系列のデータラベル
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
        .HasLeaderLines = True '引き出し線を表示
    End With
    
End Sub

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

グラフを用意します

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

VBAでデータラベルに「引き出し線」を表示できました

VBAでデータラベルに「引き出し線」を表示できました。

データラベルの「引き出し線」を非表示

データラベルの「引き出し線」を非表示にしてみます。

先ほどのVBAコードに「False」を入力します。

Sub TEST14()
    
    '1つ目の系列のデータラベル
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
        .HasLeaderLines = False '引き出し線を非表示
    End With
    
End Sub

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

VBAでデータラベルの「引き出し線」を非表示にできました

VBAでデータラベルの「引き出し線」を非表示にできました。

文字サイズと文字色

データラベルの「文字サイズ」と「文字色」を設定する方法です。

文字サイズは、「.Font.Size」を使います。

文字色は、「.Font.Color」です。

Sub TEST16()
    
    '1つ目の系列のデータラベル
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels
        .Font.Size = 13 'サイズを設定
        .Font.Color = RGB(255, 0, 0) '赤色
    End With
    
End Sub

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

元グラフ

グラフを用意します

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

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

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

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

表示形式

データラベルの「表示形式」を設定してみます。

データラベルの表示形式を「通貨」に設定

データラベルの表示形式を「通貨」に設定します。

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

Sub TEST17()
    
    '1つ目の系列のデータラベル
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels
        .NumberFormatLocal = "\#,##0" '表示形式
    End With
    
End Sub

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

グラフを用意します

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

VBAでデータラベルの表示形式を「通貨」に設定できました

VBAでデータラベルの表示形式を「通貨」に設定できました。

データラベルの表示形式を「標準」に設定

データラベルの表示形式を「標準」に設定してみます。

標準は、「"G/標準"」と入力します。

Sub TEST18()
    
    '1つ目の系列のデータラベル
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels
        .NumberFormatLocal = "G/標準" '表示形式
    End With
    
End Sub

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

VBAでデータラベルの表示形式を「標準」に設定できました

VBAでデータラベルの表示形式を「標準」に設定できました。

データラベルの表示形式を「セルとリンク」する

データラベルの表示形式を「セルとリンク」してみます。

セルとリンクすると表示形式の設定が簡単になります。

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

Sub TEST19()
    
    '1つ目の系列のデータラベル
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels
        .NumberFormatLinked = -1 'セルと表示形式をリンクする
    End With
    
End Sub

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

グラフを用意します

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

VBAでデータラベルの表示形式を「セルとリンク」できました

VBAでデータラベルの表示形式を「セルとリンク」できました。

背景色

データラベルの「背景色」を設定してみます。

データラベルの背景色を設定

データラベルの「背景色」を設定するVBAコードです。

「.Format.Fill.Visible = msoTrue」を使って、「塗りつぶしあり」にしておきます。

そのあとに「.Format.Fill.ForeColor.RGB」を使って、背景色を設定します。

Sub TEST20()
    
    '1つ目の系列のデータラベルの「塗りつぶし」
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels.Format.Fill
        .Visible = msoTrue '塗りつぶしあり
        .ForeColor.RGB = RGB(255, 0, 0) '赤色
        .Transparency = 0.5 '透過率
    End With
    
End Sub

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

グラフを用意します

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

VBAでデータラベルの背景色を設定できました

VBAでデータラベルの背景色を設定できました。

データラベルの背景色を「なし」にする

データラベルの背景色を「なし」にするVBAコードです。

「msoFalse」を入力することで、背景色をなしにできます。

Sub TEST21()
    
    '1つ目の系列のデータラベルの「塗りつぶし」
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).DataLabels.Format.Fill
        .Visible = msoFalse '塗りつぶしなし
    End With
    
End Sub

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

VBAでデータラベルの背景色を「なし」にできました

VBAでデータラベルの背景色を「なし」にできました。

おわりに

この記事では、グラフのデータラベルを書式設定する方法について、ご紹介しました。

データラベルの書式設定するVBAコードは、かなりたくさんありますので、全部覚えて使いこなすのは、無理ですね。

「ベース」となるグラフを作成して、グラフの一部をVBAで変更するというのが、効率的です。

データラベルの一部を変更したい場合は、今回ご紹介したVBAコードを使って、自動化していきましょう。

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

関連する記事から探す

カテゴリから探す

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

アーカイブから探す