図のexcelグラフのデータラベルの項目名を取得したいですが、項目名のみを抽出する方法がなさそうなので、データラベル全体を取得するため、下記のコードで試みましたが、全て空白が返ってきます。
ActiveChart.SeriesCollection(1).DataLabels(1).Format.TextFrame2.TextRange.Characters.Text
もちろん、取得したいグラフをアクティブ(クリック)してから実施しています。
問題はどこでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
どのようなタイミングでどう取得したいのでしょうか。
「グラフ」といっても万人が同じものを作るわけではないです。
「前提」部分が伝わらなければ誰も答えようがないものとなります。

回答2件
0
データーラベルの3要素の内1つめ
VBA
1Sub DataLabel_1() 2 Dim n As Integer 3 Dim c As Object, a As Object, pt As Object 4 Dim dt As Variant 5 Dim DL As String 6 For Each c In ActiveChart.FullSeriesCollection 7 With c 8 Select Case .ChartType 9 Case xlPie '円 10 n = 1 11 For Each pt In .Points 12 If pt.HasDataLabel = True Then 13 With pt.DataLabel 14 If .ShowCategoryName And .ShowPercentage And .ShowValue Then 15 DL = .Text 16 dt = Split(.Text, ",") 17 Debug.Print n; " 値<"; .Text; "> "; dt(0) 18 End If 19 End With 20 n = n + 1 21 End If 22 Next 23 Case Else 24 25 End Select 26 End With 27 Next 28End Sub
すべてのラベル取得
VBA
1Sub subete() 2 3Dim a As String 4Dim b As Variant 5Dim c As Object 6Dim n As Integer 7 8For Each c In ActiveChart.FullSeriesCollection 9 With c 10 Select Case .ChartType 11 Case xlPie '円 12 a = Replace(Replace(.Formula, "=SERIES(", ""), ")", "") 13 b = Split(a, ",") 14 For n = 1 To Range(b(1)).Cells.Count 15 Debug.Print n; ">", Range(b(1)).Cells(n).Value 16 Next 17 End Select 18 End With 19Next 20 21End Sub 22
投稿2021/01/30 10:45
編集2021/02/01 12:48総合スコア392
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
ありがとうございます。ちなみにですが、同じ円グラフでもDLに値が抽出されるものとされないものがでてくるのですが、原因はわかりますでしょうか。
様式はすべて同じグラフなのですが。。。
>If .ShowCategoryName And .ShowPercentage And .ShowValue Then
ここですが データラベルオプションの
.ShowCategoryName 分類名
.ShowPercentage パーセンテージ
.ShowValue 値
に対応しています。3要素表示していれば処理しています。
表示要素数違うのであれば調整願います。
マルチに対応するなら
1. 分類名のみの場合はIF分もSplitもいらない
2.2要素以上ならSplitがいる。
とすればよい。
質問なのですが、図では、「小樽市」、「札幌市」、「函館市」とありますが、仮に分類として、「室蘭市」がデータ数0であった場合、グラフでは表示されないので、「DL = .Text」は空白になるという認識でよろしいでしょうか。
データラベルが非表示だと取得できていません、
取得するには、
1.一時的にpt.HasDataLabel を Trueにする
引き出し線付きで表示されるの、位置調整されてると崩れるかも
2.c.Formulaでセル範囲取得できるので、位置カウントして、値を拾ってくる。
2番の方が安全かな?
ありがとうございます。
2番目の方法は、seriesに記載されている式を参照し、splitで区分してカウントするということですか?
可能であれば、参照位置のカウント方法も教えていただきたいです。
ちなみにnは必要なのでしょうか
追記しました。

0
ActiveChart.SeriesCollection(1).DataLabels(1).Text
で取得できます。
参考:DataLabel オブジェクト (Excel) | Microsoft Docs
投稿2021/01/30 01:33
総合スコア364
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。