Dim oLABEL As DataLabel
グラフのデータラベルオブジェクトに対して表示フィールドの追加
oLABEL.Format.TextFrame2.TextRange _
.InsertChartField msoChartFieldFormula, "=Sheet1!$C$7"
で、シートのセルとリンクさせる、そんなテスト動画です。
youtu.be
https://youtu.be/JzNQfoIUF5I
目次
00:00 0.やりたいこと
01:21 2番目のラベルにセルの値C7を表示
03:22 二回InsertChartFieldするバグ候補のテスト
04:06 シート名指定が無いとエラー発生
05:08 データラベルが無い初期状態だとDataLabelsでエラー発生
06:20 2.ラベルを削除してから、セルとリンクさせる
09:25 %表示のテスト msoChartFieldPercentage
10:55 3.ループで複数のラベルとリンクさせる
16:09 4.棒グラフでもテスト
18:27 セルの計算式 と ラベル
0.やりたいこと
グラフのラベルとセルをリンクさせる。
まず、手作業、手動を見せてから、
VBA マクロの方法を説明する
1.テストで、円グラフの2番目のラベルにセルの値C7を表示させてみます
グラフのラベルに対して
.InsertChartField
で、セルを指定できました。
Dim oLABEL As DataLabel 'グラフのラベル Set oLABEL = oCHART.Chart.SeriesCollection(1).DataLabels(2) 'テストなので、↑系列1の二番目のラベルデータと決め打ちしました 'データラベルに表示フィールドの追加 oLABEL.Format.TextFrame2.TextRange _ .InsertChartField msoChartFieldFormula, "=Sheet1!$C$7"
※ラベルなしの初期の時、エラー。チェックを調べる
2.ラベルを削除してから、セルとリンクさせる
'データラベルをまずクリアする(前の設定を消す) oLABEL.Delete '少し怖いけど.Deleteで削除、削除後のObjに↓可能なのが不思議?まぁ気にしない 'データラベルに値の表示を追加 'msoChartFieldValue 5 データ フィールドの値を指定します。 oLABEL.Format.TextFrame2.TextRange _ .InsertChartField msoChartFieldValue '↑その他、円グラフなら%表示などもあります 'msoChartFieldPercentage 3 値の割合を指定します。 'データラベルに表示フィールドの追加 これで値+セルのラベルが作れる oLABEL.Format.TextFrame2.TextRange _ .InsertChartField msoChartFieldFormula, "=Sheet1!$C$7"
3.ループでラベルの行とリンクさせる
いつもの、.Countでラベル数がわかるので、
SeriesCollection(1).DataLabels.Count
ループさせてみました。
'系列1 SeriesCollection(1).DataLabels の ラベル数分繰り返す For n = 1 To oCHART.Chart.SeriesCollection(1).DataLabels.Count Set oLABEL = oCHART.Chart.SeriesCollection(1).DataLabels(n) '↑系列1のn番目のラベルデータを代入 'データラベルをまずクリアする(前の設定を消す) oLABEL.Delete '少し怖いけど.Deleteで削除、削除後のObjに↓可能なのが不思議?まぁ気にしない 'データラベルに値の表示を追加 'msoChartFieldValue 5 データ フィールドの値を指定します。 oLABEL.Format.TextFrame2.TextRange _ .InsertChartField msoChartFieldValue 'データラベルに表示フィールドの追加 これで値+セルのラベルが作れる '"=Sheet1!$C$7"の文字列を作る strADDRESS = "=" & ActiveSheet.Name & "!" & r.Offset(0, n).Address oLABEL.Format.TextFrame2.TextRange _ .InsertChartField msoChartFieldFormula, strADDRESS Next n
4.棒グラフでもテスト
棒グラフのラベルに対して、テストしてみました。
シート2の棒グラフでテストする。
5.終わりのあいさつ
Excel グラフ ラベルの処理で参考となれば幸いです。
テストコードをアレンジして使ってみてください。
ソースコード
00:00 0.やりたいこと
01:21 2番目のラベルにセルの値C7を表示
03:22 二回InsertChartFieldするバグ候補のテスト
04:06 シート名指定が無いとエラー発生
05:08 データラベルが無い初期状態だとDataLabelsでエラー発生
06:20 2.ラベルを削除してから、セルとリンクさせる
09:25 %表示のテスト msoChartFieldPercentage
10:55 3.ループで複数のラベルとリンクさせる
16:09 4.棒グラフでもテスト
18:27 セルの計算式 と ラベル
Option Explicit Sub Macro1円グラフラベル初期化() ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.FullSeriesCollection(1).Select 'データラベル 値を表示 マクロ記録より ActiveChart.FullSeriesCollection(1).ApplyDataLabels xlDataLabelsShowNone '↑一回、xlDataLabelsShowNoneで消してから、再度↓表示で初期化もどき ActiveChart.FullSeriesCollection(1).ApplyDataLabels 'フォントのサイズも初期化されたので大きくした ActiveChart.FullSeriesCollection(1).DataLabels.Select Selection.Format.TextFrame2.TextRange.Font.Size = 24 Range("D8").Select End Sub 'ラベルの追加テスト '2番目のデータラベルでセルの値を参照するようにセットしてみた Sub test1ラベルにセル参照を追加20221012() Range("a1").Select Dim oCHART As ChartObject 'グラフ、チャート Set oCHART = ActiveSheet.ChartObjects("グラフ 1") '代入してから使ってみた Dim oLABEL As DataLabel 'グラフのラベル Set oLABEL = oCHART.Chart.SeriesCollection(1).DataLabels(2) 'テストなので、↑系列1の二番目のラベルデータと決め打ちしました 'データラベルに表示フィールドの追加 oLABEL.Format.TextFrame2.TextRange _ .InsertChartField msoChartFieldFormula, "=Sheet1!$C$7" '↑.InsertChartFieldなので、二回繰り返すと、 '当然、追加で追記で増えていきます。※不具合候補 'んっ?ラベルの値が消えるのは?追記なの?じゃないの?どっち? '注意2 "=Sheet1!$C$7" で、シート名が無いとエラーになった '他の指定方法が無いか、チェックする MsgBox "ラベルを設定終了、確認してください" End Sub 'ラベルの追加テスト 'ラベルを消してから、値とセル参照を追加してみた '2番目のデータラベルでセルの値を参照するようにセットしてみた Sub test2ラベルを消してからセル参照を追加20221012() Dim oCHART As ChartObject 'グラフ、チャート Set oCHART = ActiveSheet.ChartObjects("グラフ 1") '代入してから使ってみた Dim oLABEL As DataLabel 'グラフのラベル Set oLABEL = oCHART.Chart.SeriesCollection(1).DataLabels(2) 'テストなので、↑系列1の二番目のラベルデータと決め打ちしました 'データラベルをまずクリアする(前の設定を消す) oLABEL.Delete '少し怖いけど.Deleteで削除、削除後のObjに↓可能なのが不思議?まぁ気にしない 'データラベルに値の表示を追加 'msoChartFieldValue 5 データ フィールドの値を指定します。 oLABEL.Format.TextFrame2.TextRange _ .InsertChartField msoChartFieldValue '↑その他、円グラフなら%表示などもあります 'msoChartFieldPercentage 3 値の割合を指定します。 'データラベルに表示フィールドの追加 これで値+セルのラベルが作れる oLABEL.Format.TextFrame2.TextRange _ .InsertChartField msoChartFieldFormula, "=Sheet1!$C$7" '注意2 "=Sheet1!$C$7" で、シート名が無いとエラーになった '他の指定方法が無いか、チェックする MsgBox "ラベルを設定終了、確認してください" End Sub 'ラベルの追加テスト '複数のラベルに対して、 'データラベルでセルの値を参照するようにセットしてみた Sub test3複数ラベルにセル参照を追加20221012() Dim oCHART As ChartObject 'グラフ、チャート Set oCHART = ActiveSheet.ChartObjects("グラフ 1") '代入してから使ってみた Dim oLABEL As DataLabel 'グラフのラベル Dim strADDRESS As String 'シート!$A$1 の番地を作る Dim n As Integer 'n番目のラベル Dim r As Range '基準のセル、ここから左のセルをラベルとリンクさせる Set r = Range("A7") 'A7を基準、B7..をリンクさせる '系列1 SeriesCollection(1).DataLabels の ラベル数分繰り返す For n = 1 To oCHART.Chart.SeriesCollection(1).DataLabels.Count Set oLABEL = oCHART.Chart.SeriesCollection(1).DataLabels(n) '↑系列1のn番目のラベルデータを代入 'データラベルをまずクリアする(前の設定を消す) oLABEL.Delete '少し怖いけど.Deleteで削除、削除後のObjに↓可能なのが不思議?まぁ気にしない 'データラベルに値の表示を追加 'msoChartFieldValue 5 データ フィールドの値を指定します。 oLABEL.Format.TextFrame2.TextRange _ .InsertChartField msoChartFieldValue 'データラベルに表示フィールドの追加 これで値+セルのラベルが作れる '"=Sheet1!$C$7"の文字列を作る strADDRESS = "=" & ActiveSheet.Name & "!" & r.Offset(0, n).Address oLABEL.Format.TextFrame2.TextRange _ .InsertChartField msoChartFieldFormula, strADDRESS Next n MsgBox "ラベルを複数設定終了、確認してください" End Sub
XlDataLabelsType 列挙 (Excel)
learn.microsoft.com
適用するデータ ラベルの種類を指定します。
名前 値 説明
xlDataLabelsShowBubbleSizes 6 絶対値に対するバブルのサイズを表示します。
xlDataLabelsShowLabel 4 データ要素の属する分類名。
xlDataLabelsShowLabelAndPercent 5 全体のパーセンテージと要素の項目名。 円グラフとドーナツ グラフだけに指定できます。
xlDataLabelsShowNone -4142 データ ラベルなし。
xlDataLabelsShowPercent 3 全体のパーセンテージ。 円グラフとドーナツ グラフにだけ指定できます。
xlDataLabelsShowValue 2 データ要素の属する既定値 (この引数が指定されていない場合)。
TextRange2.InsertChartField メソッド (Office)
learn.microsoft.com
式。InsertChartField (ChartFieldType, Formula, Position)
パラメーター
名前 必須 / オプション データ型 説明
ChartFieldType 必須 MsoChartFieldType データ ラベルに挿入するグラフ フィールドの種類を指定します。
Formula 省略可能 String ChartFieldType パラメーターに msoChartFieldFormula 定数が渡される場合は、セル (またはセル範囲) を指定 します。
MsoChartFieldType 列挙 (Office)
learn.microsoft.com
グラフのデータ ラベルに挿入するデータ フィールドの種類を指定します。
名前 値 説明
msoChartFieldBubbleSize 1 データ ポイントのバブル サイズを指定します。
msoChartFieldCategoryName 2 データ ポイントのカテゴリ名のサイズを指定します。
msoChartFieldFormula 6 データ ポイントで使用する数式を指定します。
msoChartFieldPercentage 3 値の割合を指定します。
msoChartFieldSeriesName 4 データ系列名を指定します。
msoChartFieldValue 5 データ フィールドの値を指定します。
msoChartFieldRange 7 データ範囲の値を指定します。