アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel VBA で、2次元散布図グラフの、特定の系列 i を選択し、現状把握の為(後に系列の外観を VBA 経由で変更する為)に、その情報を抽出したいです。特に今回の質問では、マーカーの背景色のカラー値 (long) を取得したいです。

しかし ActiveChart.SeriesCollection(i).MarkerBackgroundColor や ActiveChart.SeriesCollection(i).MarkerBackgroundColorIndex で取得しようとすると、マーカーの背景色(塗りつぶし色)を手動で設定している時は、きちんと Color 値が表示されますが、『自動』にしていると、
1. マーカーの設定全体を『自動』にしている時は -2
2. マーカーの形式は『組み込み』であるが塗りつぶし色だけ『自動』の時は -1
が返って来てしまい、色を調べる事ができません。

(線の色の場合は、『自動』にしていても、きちんと ActiveChart.SeriesCollection(i).Format.Line.ForeColor で値が取得できるのに。)


『自動』の時は activeworkbook.colors(j) で指定したいのですが、j に何を入れたら良いのかが分からず困っています。何らか XlThemeColor 列挙から選ぶ事になるのでしょうが、

1. 散布図を作成
2. 系列の順序を入れ替え
などの操作をしてしまうと、系列 1 が常に xlThemeColorAccent1 とは限らないのです。

『自動』設定のマーカー背景色の、カラー値 (long) でも良いですし XlThemeColor 列挙値でも良いので、調べる方法は無いでしょうか?

A 回答 (1件)

こんにちは



回答にはなっていませんが、ヒントにでもなれば。

グラフをVBAで扱ったことがありませんので、8割方はご質問内容の後追い確認になってしまいました。
ご説明の通り、系列のカラーを取得できそうなプロパティを調べてみても、msoNotThemeColor(=0)やmsoThemeColorMixed(-2)などが返されるだけで、実際の色に関する情報は出てこないようです。
(ただし、RGB値が返されないということから、自動設定の色になっていることは判別可能そうですね)

ということで、まず、自動設定の色はどうなっているのかを調べるために、添付図で左側の単純な表(A~Zの26系列)で、色設定を調べてみました。(添付図が盛りだくさんなので、判別しにくいかも知れませんがご容赦)
テーマカラーのAccentはリボンの色のところに表示されるパレットの、右側の6列(6色)がこれに当たっています。
(添付図の下に拡大して塗り分けています)

表の系列(例ではA2:A27)の順に、xlThemeColorAccent1~6を繰り返して割り当てているようです。
1巡目は基本色、2巡目は(黒50%)、3巡目は(白40%)・・・というように、添付図の下段の左側、①~⑤の順になっているようです。
参考までに、カラーの下に表示している数値はAccentの基本色のRGB値です。( =((B*256)+G)*256+R )

>activeworkbook.colors(j) で指定したいのですが
>j に何を入れたら良いのかが分からず困っています。
特にcolors()のこだわる必要は無いように思いますが、「j」はインデックスなので1~56です。
参考までに、添付図の一番右にcolors()のデフォルトの56色を縦2列に並べてみました。(パレットは変更可能なので環境依存です。テーマの概念が採用される以前のカラーパレットの色ではないかと推測します)
https://msdn.microsoft.com/ja-jp/library/microso …
マーカーの色をXlThemeColorで指定したいような場合は、ObjectThemeColorプロパティにmsoThemeColorAccent1などを設定すれば良いようです。もちろん、RGB値で直接指定することも可能です。


> 系列の順序を入れ替えなどの操作をしてしまうと、
>系列 1 が常に xlThemeColorAccent1 とは限らないのです
これも確認できました。けっこう厄介ですね。

少々回りくどい方法になってしまいますが、思いついたのは、系列を選択した際に数式バーに表示される関数値(=SERIES(~~))を利用する方法です。
この式は、Series.Formula で文字列として取得することができます。
https://msdn.microsoft.com/ja-jp/vba/excel-vba/a …

添付図では、元はA,B,C,D,E・・・の順の系列を、最初の3つだけ入れ替えて、C,B,A,D,E・・・の順に変えていますが、その際の最初の系列となるC系列(元データでは3番目)のFormulaを取得してみると
 =SERIES(Sheet1!$A$4,Sheet1!$B$1:$D$1,Sheet1!$B$4:$D$4,1)
のようになります。
最後の1の数字が順序を示していますが、元データのインデックスの3であることを期待しましたが、そうではなく添字と一致するように変更されてしまっています。
しかしながら、第一引数が系列ラベルのセル位置を示していますので、A4セルが系列名であることから、系列軸からこれを検索すれば元の表では何番目のデータであるかがわかり、その順序から自動で割り当てられる色も判別できるものと思います。
もしも、元データの範囲が固定ならば、検索するまでもなくラベルの行位置を調べるだけで順序はわかりますね。

・・・とは言っても、かなりまわりくどい方法ですので、もっと簡単な方法がありそうな気がしますが、残念ながらこの方法以外に見つけることができませんでした。(…ですので、ご参考までです)
「Excel VBA マーカー背景色の取得」の回答画像1
    • good
    • 0
この回答へのお礼

御丁寧に、ありがとうございました。

系列の順序を入れ替えると、系列インデックスは入れ替わってもテーマカラーは不変なので、どこかしらテーマカラーを保持しているプロパティがあるような気がするのですが、もどかしいところです。

お礼日時:2018/06/12 00:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!