データラベルを表示するには、2つの方法があります。
まず、系列(Seriesオブジェクト)の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
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で、データラベルを表示する操作をマクロ記録すると、次のコードが記録されます。
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で問題なく動作します。