🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

4941閲覧

excelグラフのデータラベルの取得

pulim

総合スコア15

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/01/29 15:29

編集2021/01/30 00:30

イメージ説明
図のexcelグラフのデータラベルの項目名を取得したいですが、項目名のみを抽出する方法がなさそうなので、データラベル全体を取得するため、下記のコードで試みましたが、全て空白が返ってきます。

ActiveChart.SeriesCollection(1).DataLabels(1).Format.TextFrame2.TextRange.Characters.Text

もちろん、取得したいグラフをアクティブ(クリック)してから実施しています。

問題はどこでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/01/29 22:19

どのようなタイミングでどう取得したいのでしょうか。 「グラフ」といっても万人が同じものを作るわけではないです。 「前提」部分が伝わらなければ誰も答えようがないものとなります。
guest

回答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
sinzou

総合スコア392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pulim

2021/01/31 09:24

ありがとうございます。ちなみにですが、同じ円グラフでもDLに値が抽出されるものとされないものがでてくるのですが、原因はわかりますでしょうか。 様式はすべて同じグラフなのですが。。。
sinzou

2021/01/31 10:29

>If .ShowCategoryName And .ShowPercentage And .ShowValue Then ここですが データラベルオプションの .ShowCategoryName 分類名 .ShowPercentage    パーセンテージ .ShowValue      値 に対応しています。3要素表示していれば処理しています。 表示要素数違うのであれば調整願います。 マルチに対応するなら 1. 分類名のみの場合はIF分もSplitもいらない 2.2要素以上ならSplitがいる。 とすればよい。
pulim

2021/01/31 10:41

質問なのですが、図では、「小樽市」、「札幌市」、「函館市」とありますが、仮に分類として、「室蘭市」がデータ数0であった場合、グラフでは表示されないので、「DL = .Text」は空白になるという認識でよろしいでしょうか。
sinzou

2021/01/31 13:42 編集

データラベルが非表示だと取得できていません、 取得するには、 1.一時的にpt.HasDataLabel を Trueにする   引き出し線付きで表示されるの、位置調整されてると崩れるかも 2.c.Formulaでセル範囲取得できるので、位置カウントして、値を拾ってくる。 2番の方が安全かな?
pulim

2021/01/31 14:38 編集

ありがとうございます。 2番目の方法は、seriesに記載されている式を参照し、splitで区分してカウントするということですか? 可能であれば、参照位置のカウント方法も教えていただきたいです。
pulim

2021/02/01 02:30

ちなみにnは必要なのでしょうか
sinzou

2021/02/01 12:48

追記しました。
guest

0

ActiveChart.SeriesCollection(1).DataLabels(1).Text
で取得できます。
参考:DataLabel オブジェクト (Excel) | Microsoft Docs

投稿2021/01/30 01:33

Usirow

総合スコア364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pulim

2021/01/31 10:10

ありがとうございます。ちなみにですが、同じ円グラフでも値が抽出されるものとされないものがでてくるのですが、原因はわかりますでしょうか。 様式はすべて同じグラフなのですが(コピーしたもの)。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問