[[20190131195843]] 『データラベルで、セルの値を表示する、セルの範囲』(コリパンダ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データラベルで、セルの値を表示する、セルの範囲を取得できますか』(コリパンダ)

エクセル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


マナ様
実は初めての投稿で、回答頂けだだけで感謝しております。
実際はもうちょっと複雑な作業なので、代替え手段では対応できないと考えています。
指定範囲の取得がキーなのですが、不可なのかどうかがわかりません。
ご提案頂きありがとうございます。
(コリパンダ) 2019/02/02(土) 00:50

 >指定範囲の取得がキーなのですが、不可なのかどうかがわかりません。

 現時点では多分、不可なんじゃないですかねぇ。

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


半平太様
大変貴重資料をお教え頂き、どうもありがとうございます。
私では、返信頂いたコメントにまで至れませんでした。
現状では困難と割り切り、対応していきたいと思います。
また機会がありましたらどうぞご教授下さい。ありがとうございました。
(コリパンダ) 2019/02/03(日) 09:05

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.