[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データラベルで、セルの値を表示する、セルの範囲を取得できますか』(コリパンダ)
エクセルVBAに関する質問です。
散布図に表示されている点には、データラベル追加できます。データラベルは、「X値」のようなの値だけでなく、「セルの値」で範囲を指定すれば、セル内のテキストも表示できます。
範囲を指定するこの手順をマクロで記録すると、例えば下記の様になります。ここでは「セルの値」の「範囲」に"=sheet1!$H$17:$H$33"を指定しています。
ActiveChart.FullSeriesCollection(2).DataLabels.Select
ActiveChart.FullSeriesCollection(2). _
DataLabels.Format.TextFrame2.TextRange. _
InsertChartField msoChartFieldRange, "=sheet1!$H$17:$H$33", 0
では、すでに表示されているラベルがあるとして、そのラベルに選択された範囲、上の例であれば "=sheet1!$H$17:$H$33" を、VBA上で取得することはできるのでしょうか?
よろしくお教えください。お願いします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
(マナ) 2019/01/31(木) 22:22
お試し頂き、ありがとうございました。
使用例ですが、例えばラベルと含むグラフAの書式情報をマクロで読み取り、その書式で別のセル範囲のデータ数でグラフB〜多数を新たに自動で作成する、などです。ラベルフォントの設定などは取得できるのですが、範囲の取得ができないのため、範囲の設定だけマニュアルにしてマクロを組んでいます。
ラベルに使うフォントなどは、下記で設定と取得が可能です。
設定
ActiveChart.FullSeriesCollection(2).DataLabels.Format _
.TextFrame2.TextRange.Font.Name= "Times New Roman"
取得
Debug.Print ActiveChart.FullSeriesCollection(2).DataLabels.Format _
.TextFrame2.TextRange.Font.Name
ところがラベルの範囲の設定に使う.InsertChartFieldは、3つの値の設定を","で区切って一度にしているため、個々の設定値の取得方法が分からないのです。
1つ msoChartFieldRange, 2つ "=sheet1!$H$17:$H$33", 3つ 0
(それぞれChartFieldType, Formula, Position)
なにかそれ用のコマンドがあるように思ったのですが、きちんとVBAを学んでいないための不徳で分かりません。よろしければご教授ください。お願いします。
(コリパンダ) 2019/02/01(金) 12:28
そういうことであれば、取得できなくても設定できればよいのでは?
グラフAを複製して、データ範囲を再設定することではだめなのでしょうか。
(マナ) 2019/02/01(金) 21:55
>指定範囲の取得がキーなのですが、不可なのかどうかがわかりません。
現時点では多分、不可なんじゃないですかねぇ。
https://stackoverflow.com/questions/50376322/replace-value-from-cells-in-chart-data-labels-using-vba
そこのAnswerに と有ります。 ↓ >You can use VBA to set the chart field using InsertChartField, >but you can't use VBA to read what is in an existing chart field.
>Just another shortcoming of the VBA Object Model for Excel charts.
目的は指定範囲の取得なんでしょうけど、もし、どんなラベル名になっているかが分かればいいだけなら、 DataLabelsから一つずつラベルを調べて、そのTextプロパティを分解すれば出来そうな気がします。
どうしても指定範囲の形で知る必要があるなら、 上で求めたラベル名の元がどこのセル範囲に存在しているかFindで調べるしかないと思います。・・けど面倒そう・・
(半平太) 2019/02/02(土) 18:14
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.