機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA > Excel 2007以降のグラフ

棒グラフにデータラベルを設定する



データラベルを表示するには、2つの方法があります。
まず、系列(Seriesオブジェクト)のHasDataLabelsプロパティを使うやり方から。

方法1:HasDataLabelsプロパティ


Sub Sample()
    Dim i As Long
    With ActiveSheet.ChartObjects(1).Chart
        For i = 1 To .SeriesCollection.Count
            .SeriesCollection(i).HasDataLabels = True
        Next i
    End With
End Sub



HasDataLabelsプロパティは、系列全体を表すSeriesCollectionコレクションのプロパティではなく、単体の系列を表すSeriesオブジェクトのプロパティです。したがって、上記のようにすべての系列に対して設定してやります。

系列の表示を設定する


HasDataLabelsプロパティにTrueを設定するとデータラベルが表示されます。データラベルに表示する内容には「系列名」「分類名」「値」の3種類があり、また、表示する位置には「中央」「内側上」「内側軸寄り」「外側上」を指定できます。

表示するデータラベルの種類を指定するには、次のプロパティにTrueまたはFalseを指定します。

プロパティ名 意味
 ShowSeriesName  Trueを設定すると 系列名 を表示します
 ShowCategoryName  Trueを設定すると 分類名 を表示します
 ShowValue  Trueを設定すると 値 を表示します

Sub Sample()
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(3)
        .HasDataLabels = True
        .DataLabels.ShowSeriesName = True
        .DataLabels.ShowCategoryName = True
        .DataLabels.ShowValue = True
    End With
End Sub



データラベルに複数の内容を表示するとき、それぞれの内容を区切る記号を指定できます。区切り記号は、DataLabelsコレクションのSeparatorプロパティに文字列形式で指定します。次のコードは、データラベルをスペースで区切ります。

Sub Sample()
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(3)
        .HasDataLabels = True
        .DataLabels.ShowSeriesName = True
        .DataLabels.ShowCategoryName = True
        .DataLabels.ShowValue = True
        .DataLabels.Separator = " "
    End With
End Sub



区切り文字には複数の文字列や、日本語を指定することも可能です。

Sub Sample()
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(3)
        .HasDataLabels = True
        .DataLabels.ShowSeriesName = True
        .DataLabels.ShowCategoryName = False
        .DataLabels.ShowValue = True
        .DataLabels.Separator = "は"
    End With
End Sub



棒グラフでは、データラベルの位置に、次の4種類を指定できます。



データラベルの位置は、Positionプロパティに、次の定数を指定します。

定数 意味
 xlLabelPositionCenter   -4108   中央 
 xlLabelPositionInsideBase   4   内側上 
 xlLabelPositionInsideEnd   3   内側軸寄り 
 xlLabelPositionOutsideEnd   2   外側上 

Sub Sample()
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(3)
        .HasDataLabels = True
        .DataLabels.ShowValue = True
        .DataLabels.Position = xlLabelPositionCenter
    End With
End Sub



方法2:SetElementメソッド


Excel 2007で追加されたSetElementメソッドを使って、データラベルを表示することもできます。

Sub Sample()
    With ActiveSheet.ChartObjects(1).Chart
        .SetElement msoElementDataLabelOutSideEnd
    End With
End Sub



SetElementメソッドは、引数に指定する定数によって、さまざまな設定が行えます。SetElementメソッドで設定できるのは、グラフツール[レイアウト]タブの[ラベル]グループ、[軸]グループ、[分析]グループから実行できるすべてのコマンドに対応しています。



SetElementメソッドの引数には、次の定数を指定できます。

定数 意味
 msoElementChartFloorNone   1200   グラフの床面を表示しません 
 msoElementChartFloorShow   1201   グラフの床面を表示します 
 msoElementChartTitleAboveChart   2   グラフの上にタイトルを表示します 
 msoElementChartTitleCenteredOverlay   1   タイトルを中央揃えで重ねて表示します 
 msoElementChartTitleNone   0   グラフタイトルを表示しません 
 msoElementChartWallNone   1100   グラフの壁面を表示しません 
 msoElementChartWallShow   1101   グラフの壁面を表示します 
 msoElementDataLabelBestFit   210   データラベルを自動調整します 
 msoElementDataLabelBottom   209   データラベルを下に表示します 
 msoElementDataLabelCenter   202   データラベルを中央に表示します 
 msoElementDataLabelInsideBase   204   データラベルを内側の底部に表示します 
 msoElementDataLabelInsideEnd   203   データラベルを内側の末尾に表示します 
 msoElementDataLabelLeft   206   データラベルを左側に表示します 
 msoElementDataLabelNone   200   データラベルを表示しません 
 msoElementDataLabelOutSideEnd   205   データラベルを外側の末尾に表示します 
 msoElementDataLabelRight   207   データラベルを右側に表示します 
 msoElementDataLabelShow   201   データラベルを表示します 
 msoElementDataLabelTop   208   データラベルを上に表示します 
 msoElementDataTableNone   500   データテーブルを表示しません 
 msoElementDataTableShow   501   データテーブルを表示します 
 msoElementDataTableWithLegendKeys   502   凡例マーカー付きでデータテーブルを表示します 
 msoElementErrorBarNone   700   誤差範囲を表示しません 
 msoElementErrorBarPercentage   702   誤差範囲をパーセンテージで表示します 
 msoElementErrorBarStandardDeviation   703   誤差範囲を標準偏差で表示します 
 msoElementErrorBarStandardError   701   標準の誤差範囲を表示します 
 msoElementLegendBottom   104   凡例を下に表示します 
 msoElementLegendLeft   103   凡例を左に表示します 
 msoElementLegendLeftOverlay   106   凡例を左に重ねて配置します 
 msoElementLegendNone   100   凡例を表示しません 
 msoElementLegendRight   101   凡例を右に表示します 
 msoElementLegendRightOverlay   105   凡例を右に重ねて配置します 
 msoElementLegendTop   102   凡例を上に表示します 
 msoElementLineDropHiLoLine   804   降下線/高低線を表示します 
 msoElementLineDropLine   801   降下線を表示します 
 msoElementLineHiLoLine   802   高低線を表示します 
 msoElementLineNone   800   線を表示しません 
 msoElementLineSeriesLine   803   区分線を表示します 
 msoElementPlotAreaNone   1000   プロットエリアを表示しません 
 msoElementPlotAreaShow   1001   プロットエリアを表示します 
 msoElementPrimaryCategoryAxisBillions   374   主項目軸の単位に十億を使用します 
 msoElementPrimaryCategoryAxisLogScale   375   主項目軸に対数目盛を使用します 
 msoElementPrimaryCategoryAxisMillions   373   主項目軸の単位に百万を使用します 
 msoElementPrimaryCategoryAxisNone   348   主項目軸を表示しません 
 msoElementPrimaryCategoryAxisReverse   351   主項目軸を逆順で表示します 
 msoElementPrimaryCategoryAxisShow   349   主項目軸を表示します 
 msoElementPrimaryCategoryAxisThousands   372   主項目軸の単位に千を使用します 
 msoElementPrimaryCategoryAxisTitleAdjacentToAxis   301   主項目軸の横に軸ラベルを表示します 
 msoElementPrimaryCategoryAxisTitleBelowAxis   302   主項目軸の下に軸ラベルを表示します 
 msoElementPrimaryCategoryAxisTitleHorizontal   305   主項目軸の軸ラベルを水平に表示します 
 msoElementPrimaryCategoryAxisTitleNone   300   主項目軸の軸ラベルを表示しません 
 msoElementPrimaryCategoryAxisTitleRotated   303   主項目軸の軸ラベルを回転します 
 msoElementPrimaryCategoryAxisTitleVertical   304   主項目軸の軸ラベルを垂直に表示します 
 msoElementPrimaryCategoryAxisWithoutLabels   350   主項目軸を軸ラベルなしで表示します 
 msoElementPrimaryCategoryGridLinesMajor   334   主項目軸に沿って目盛線を表示します 
 msoElementPrimaryCategoryGridLinesMinor   333   主項目軸に沿って補助目盛線を表示します 
 msoElementPrimaryCategoryGridLinesMinorMajor   335   主項目軸に沿って目盛線と補助目盛線の両方を表示します 
 msoElementPrimaryCategoryGridLinesNone   332   主項目軸に沿って目盛線を表示しません 
 msoElementPrimaryValueAxisBillions   356   主数値軸の単位に十億を使用します 
 msoElementPrimaryValueAxisLogScale   357   主数値軸に対数目盛を使用します 
 msoElementPrimaryValueAxisMillions   355   主数値軸の単位に百万を使用します 
 msoElementPrimaryValueAxisNone   352   主数値軸を表示しません 
 msoElementPrimaryValueAxisShow   353   主数値軸を表示します 
 msoElementPrimaryValueAxisThousands   354   主数値軸の単位に千を使用します 
 msoElementPrimaryValueAxisTitleAdjacentToAxis   306   主数値軸の横に軸ラベルを配置します 
 msoElementPrimaryValueAxisTitleBelowAxis   308   主数値軸の下に軸ラベルを配置します 
 msoElementPrimaryValueAxisTitleHorizontal   311   主数値軸の軸ラベルを水平に表示します 
 msoElementPrimaryValueAxisTitleNone   306   主数値軸の軸ラベルを表示しません 
 msoElementPrimaryValueAxisTitleRotated   309   主数値軸の軸ラベルを回転します 
 msoElementPrimaryValueAxisTitleVertical   310   主数値軸の軸ラベルを垂直に表示します 
 msoElementPrimaryValueGridLinesMajor   330   主数値軸に沿って目盛線を表示します 
 msoElementPrimaryValueGridLinesMinor   329   主数値軸に沿って補助目盛線を表示します 
 msoElementPrimaryValueGridLinesMinorMajor   331   主数値軸に沿って目盛線と補助目盛線の両方を表示します 
 msoElementPrimaryValueGridLinesNone   328   主数値軸に沿って目盛線を表示しません 
 msoElementSecondaryCategoryAxisBillions   378   第2項目軸の単位に十億を使用します 
 msoElementSecondaryCategoryAxisLogScale   379   第2項目軸に対数目盛を使用します 
 msoElementSecondaryCategoryAxisMillions   377   第2項目軸の単位に百万を使用します 
 msoElementSecondaryCategoryAxisNone   358   第2項目軸を表示しません 
 msoElementSecondaryCategoryAxisReverse   361   第2項目軸を逆順で表示します 
 msoElementSecondaryCategoryAxisShow   359   第2項目軸を表示します 
 msoElementSecondaryCategoryAxisThousands   376   第2項目軸の単位に千を使用します 
 msoElementSecondaryCategoryAxisTitleAdjacentToAxis   313   第2項目軸の横に軸ラベルを表示します 
 msoElementSecondaryCategoryAxisTitleBelowAxis   314   第2項目軸の下に軸ラベルを表示します 
 msoElementSecondaryCategoryAxisTitleHorizontal   317   第2項目軸の軸ラベルを水平に表示します 
 msoElementSecondaryCategoryAxisTitleNone   312   第2項目軸の軸ラベルを表示しません 
 msoElementSecondaryCategoryAxisTitleRotated   315   第2項目軸の軸ラベルを回転します 
 msoElementSecondaryCategoryAxisTitleVertical   316   第2項目軸の軸ラベルを垂直に表示します 
 msoElementSecondaryCategoryAxisWithoutLabels   360   第2項目軸を軸ラベルなしで表示します 
 msoElementSecondaryCategoryGridLinesMajor   342   第2項目軸に沿って目盛線を表示します 
 msoElementSecondaryCategoryGridLinesMinor   341   第2項目軸に沿って補助目盛線を表示します 
 msoElementSecondaryCategoryGridLinesMinorMajor   343   第2項目軸に沿って目盛線と補助目盛線の両方を表示します 
 msoElementSecondaryCategoryGridLinesNone   340   第2項目軸に沿って目盛線を表示しません 
 msoElementSecondaryValueAxisBillions   366   第2数値軸の単位に十億を使用します 
 msoElementSecondaryValueAxisLogScale   367   第2数値軸に対数目盛を使用します 
 msoElementSecondaryValueAxisMillions   365   第2数値軸の単位に百万を使用します 
 msoElementSecondaryValueAxisNone   362   第2数値軸を表示しません 
 msoElementSecondaryValueAxisShow   363   第2数値軸を表示します 
 msoElementSecondaryValueAxisThousands   364   第2数値軸の単位に千を使用します 
 msoElementSecondaryValueAxisTitleAdjacentToAxis   319   第2数値軸の横に軸ラベルを表示します 
 msoElementSecondaryValueAxisTitleBelowAxis   320   第2数値軸の下に軸ラベルを表示します 
 msoElementSecondaryValueAxisTitleHorizontal   323   第2数値軸の軸ラベルを水平に表示します 
 msoElementSecondaryValueAxisTitleNone   318   第2数値軸の軸ラベルを表示しません 
 msoElementSecondaryValueAxisTitleRotated   321   第2数値軸の軸ラベルを回転します 
 msoElementSecondaryValueAxisTitleVertical   322   第2数値軸の軸ラベルを垂直に表示します 
 msoElementSecondaryValueGridLinesMajor   338   第2数値軸に沿って目盛線を表示します 
 msoElementSecondaryValueGridLinesMinor   337   第2数値軸に沿って補助目盛線を表示します 
 msoElementSecondaryValueGridLinesMinorMajor   339   第2数値軸に沿って目盛線と補助目盛線の両方を表示します 
 msoElementSecondaryValueGridLinesNone   336   第2数値軸に沿って目盛線を表示しません 
 msoElementSeriesAxisGridLinesMajor   346   系列軸に沿って目盛線を表示します 
 msoElementSeriesAxisGridLinesMinor   345   系列軸に沿って補助目盛線を表示します 
 msoElementSeriesAxisGridLinesMinorMajor   347   系列軸に沿って目盛線と補助目盛線の両方を表示します 
 msoElementSeriesAxisGridLinesNone   344   系列軸に沿って目盛線を表示しません 
 msoElementSeriesAxisNone   368   系列軸を表示しません 
 msoElementSeriesAxisReverse   371   系列軸を逆順に表示します 
 msoElementSeriesAxisShow   369   系列軸を表示します 
 msoElementSeriesAxisTitleHorizontal   327   系列軸の軸ラベルを水平に表示します 
 msoElementSeriesAxisTitleNone   324   系列軸の軸ラベルを表示しません 
 msoElementSeriesAxisTitleRotated   325   系列軸の軸ラベルを回転します 
 msoElementSeriesAxisTitleVertical   326   系列軸の軸ラベルを垂直に表示します 
 msoElementSeriesAxisWithoutLabeling   370   ラベルなしで系列軸を表示します 
 msoElementTrendlineAddExponential   602   指数近似曲線を追加します 
 msoElementTrendlineAddLinear   601   線形近似曲線を追加します 
 msoElementTrendlineAddLinearForecast   603   線形予測を追加します 
 msoElementTrendlineAddTwoPeriodMovingAverage   604   2区間の移動平均を追加します 
 msoElementTrendlineNone   600   近似曲線を表示しません 
 msoElementUpDownBarsNone   900   ローソクを表示しません 
 msoElementUpDownBarsShow   901   ローソクを表示します 

Excel 2003のコードは動くか


Excel 2003で、データラベルを表示する操作をマクロ記録すると、次のコードが記録されます。

Sub Macro()
    ActiveSheet.ChartObjects(1).Activate
    ActiveChart.ChartArea.Select
    ActiveChart.ApplyDataLabels AutoText:=True, LegendKey:=False, _
        HasLeaderLines:=False, ShowSeriesName:=False, ShowCategoryName:=False, _
        ShowValue:=True, ShowPercentage:=False, ShowBubbleSize:=False
End Sub



このコードは、Excel 2007でも問題なく動作します。



とはいえ、まさか、マクロ記録したコードをそのまま使うような人はいないでしょうから、Excel 2003までは、次のようにしてデータラベルを表示していたと思います。

Sub Macro()
    With ActiveSheet.ChartObjects(1).Chart
        .ApplyDataLabels ShowValue:=True
    End With
End Sub

もちろん、このコードも、Excel 2007で問題なく動作します。



このエントリーをはてなブックマークに追加