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

VBAにて等高線グラフの線の色を変更するための方法がうまくいかずに困ってます。
マクロで作成した「ワイヤーフレーム等高線グラフ」に対して、線の色を大きい順に1つ1つ違う色を付けようとしております。
他の質問やサイトを参考に下記のとおり組んでみました。

ActiveSheet.ChartObjects("等高線図").Activate
with ActiveChart.Legend
.Select
.Font.Size = 14
.LegendEntries(1).LegendKey.Interior.Color = RGB(165, 0, 33)
.LegendEntries(2).LegendKey.Interior.Color = RGB(204, 0, 0)
.LegendEntries(3).LegendKey.Interior.Color = RGB(255, 0, 0)
.LegendEntries(4).LegendKey.Interior.Color = RGB(255, 102, 0)
.LegendEntries(5).LegendKey.Interior.Color = RGB(255, 153, 51)
.LegendEntries(6).LegendKey.Interior.Color = RGB(255, 204, 0)
.LegendEntries(7).LegendKey.Interior.Color = RGB(204, 204, 0)
.LegendEntries(8).LegendKey.Interior.Color = RGB(153, 204, 0)
.LegendEntries(9).LegendKey.Interior.Color = RGB(51, 204, 51)
.LegendEntries(10).LegendKey.Interior.Color = RGB(0, 204, 153)
end with

凡例項目数は結果によって変わるため、10個未満も10個以上もありえます。
10個以上であれば、それ以降は10番目の色(RGB(0, 204, 153))を使いたいです。

上記を実行すると、エラーは出ませんが、等高線の色も変わりません。
同時に変更している文字サイズは正常に反映されます。
どうか宜しくお願いします。

質問者からの補足コメント

  • ActiveChart.Legend.LegendEntries(1).Select
    が不足している点に気づきましたが、それでも色は変わりませんでした。

    また、どういうことがしたいか、手作業で作った完成イメージを貼っておきます。
    引き続き、宜しくお願いします。

    「【VBA】Excel等高線グラフの線の色」の補足画像1
      補足日時:2016/12/14 14:38
  • 作業環境についての情報が漏れておりました
    OS: Windows10
    バージョン:Excel2010

      補足日時:2016/12/14 15:11

A 回答 (6件)

ANo3です



>しかしながら、等高線の色は変わってくれませんでした。
調べようと思ったら、ANo5様がすでに回答なさっていましたね。

ANo3は面で表示するグラフを想定していたので、塗色を変更する処理にしていました。
補足でご提示のグラフは線構成のグラフですね。その場合は、

ANo3の
 L.Item(i).LegendKey.Format.Fill.ForeColor.RGB = Color(index)
   ↓ ↓
 L.Item(i).LegendKey.Format.Line.ForeColor.RGB = Color(index)
でいけるはずと思います。


ついでながら、
>LegendEntries(i).Select』を追加したりと試したりしたのですが~
大抵の処理は、SelectやActivateなどを用いずに記述することが可能です。
上記の記述を用いると、処理が遅くなったり、画面がチラついたりする原因となるので、やむを得ない場合を除き、極力排除する考えの方がよろしいように思います。
    • good
    • 0
この回答へのお礼

無事に理想通りの実行をすることができました。
幾度と確認や回答をいただきありがとうございました。
自分では解決できなかったと思いますし、大変感謝しております。
このたびはありがとうございました。
コードを使わせて頂いたという点からベストアンサーとさせて頂きます。

*どうやら凡例項目を数値の小さいほうから順に処理が行われる仕様のようでしたので、下記のとおり一部を改変して使わせて頂きました。
Dim ii As Long
ii = 0
For i = L.Count To 1 Step -1
ii = ii + 1
index = lb + ii - 1
If index > ub Then index = ub
L.Item(i).LegendKey.Format.Line.ForeColor.RGB = Color(index)
Next i

お礼日時:2016/12/15 10:35

グラフの線の色を変えるには、系列の.Format.Line.ForeColor.RGB を変更する操作が必要な筈だから・・・系列1は。


ActiveSheet.ChartObjects("等高線図").Activate
ActiveChart.Legend.Select
ActiveChart.Legend.LegendEntries(1).Select
ActiveChart.SeriesCollection(1).Select
With Selection.Format.Line
  .ForeColor.RGB = RGB(165, 0, 33)
End With

又は、フル階層で書くと、系列1は
ctiveSheet.ChartObjects("等高線図").Chart.SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(165, 0, 33)
    • good
    • 1
この回答へのお礼

お二方の回答を元に、無事理想の実行をすることができました。
数ヶ月解決できなかった部分だったので、とても助かりました。

これまでInterior/Line/Fill/Fontなど意味を理解せずに書かれているがまま使っていた節がありました。
そういったところを勉強できたのはとても大きかったです。
かなりお時間と手間をかけていただいたかと思い、感謝しております。

お礼日時:2016/12/15 10:26

ANo3です。



作成している間に、補足の図が追加されたようです。

テストしていたグラフの種類が違っていました。(汗)
(私は、透視図風の等高線グラフで試していました)

多分、そのままでもいけるのではないかと・・・

一応、テスト環境は以下です。
Windows 7、 Offis 2010
    • good
    • 0
この回答へのお礼

コードを用意していただきありがとうございます。
色を格納してから振り分ける形にしていただけたので、このコードをベースに作っていこうと思います。

しかしながら、等高線の色は変わってくれませんでした。
変数には全く問題ありませんでしたので、
『L.Item(i).LegendKey.Format.Fill.ForeColor.RGB = Color(index)』
この部分にはワイヤーフレーム等高線グラフ用の何等かの指定がいるのでしょうか・・・。
もしやと思って『~.LegendEntries(i).Select』を追加したりと試したりしたのですがうまくいきませんでした。

もしもまだお付き合いいただけるようでしたら、引き続きご教授いただければ幸いです。

お礼日時:2016/12/14 18:04

こんにちは



グラフはほとんど使ったことがないのでほとんどわかりませんが、マクロの記録から作成してみました。(笑)
(マクロの記録では、そのままでもエラーを吐く記録を作成してくれましたが・・・)

以下の例は、凡例の塗色を変更する処理だけのサンプルです。
色の数は少なめにしてありますが、データを追加するだけで対応可能です。

Sub TestSample()
Dim L As Object, Color, d
Dim ub As Integer, lb As Integer
Dim i As Integer, index As Integer

Const g_name = "等高線図"
Color = Array( _
 "165,0,33", "204,0,0", "255,0,0", "255,102,0" _
)

ub = UBound(Color)
lb = LBound(Color)
Set L = ActiveSheet.ChartObjects(g_name).Chart.Legend.LegendEntries

For i = lb To ub
 d = Split(Color(i), ",")
 Color(i) = RGB(d(0), d(1), d(2))
Next i

For i = 1 To L.Count
 index = lb + i - 1
 If index > ub Then index = ub
 L.Item(i).LegendKey.Format.Fill.ForeColor.RGB = Color(index)
Next i

End Sub
    • good
    • 0

excelのバージョンは幾つですか?


2003までなら、font.ColorIndex=数値、で数値は1:黒、3:赤、などと指定する必要がありますが・・・。

少なくともInteriorはセルの背景(文字などの背景)です。
    • good
    • 0
この回答へのお礼

OS: Windows10
バージョン:Excel2010
になります。
Interiorは意味が違ったのですね。
Interiorから先をFont.ColorIndex=数値としても
『オブジェクトは、このプロパティまたはメソッドをサポートしていません』
のエラーとなってしまいました。
まだ何が間違ってるかわかっていない状態です。
よろしければ引き続き、お願い致します。

お礼日時:2016/12/14 15:18

.LegendEntries(1).LegendKey.font.Color = RGB(165, 0, 33)


では駄目ですか?
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございます。
InteriorをFontに変えて試したところ、『オブジェクトは、このプロパティまたはメソッドをサポートしていません』のエラーとなりました。
独学でやってるにすぎないので、理解足らずによるものでしたすみません

お礼日時:2016/12/14 12:27

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