データラベルを設定する


データラベルを表示するには、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で問題なく動作します。