- ベストアンサー
ExcelVBAでグラフの色を設定
- VBAでグラフのデータポイントの色分けをしたいと考えています。年齢区分によって色を変えたい状況です。
- MとFを別の系列として描く方法以外にも、20代のデータを別範囲にコピーする方法も考えられます。
- ベターな方法やアイディアを求めています。ExcelVBAを使ってグラフの色を設定する方法に詳しい方、ご教示いただけませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
徒然なるままにやってみました。 既存の相関図の「点」を分類に応じて色分けします。 X軸のデータの左隣の列に分類のデータがあるとします。 なお、xl2000で試しております。ご参考まで。 Sub test() Dim myGraph As ChartObject Dim mySeries As Series Dim xValueRange As Range Dim myFormula As String Dim i As Long, myColorIndex As Long Dim colorChangeFlag As Boolean Set myGraph = ActiveSheet.ChartObjects(1) 'Indexの数字は実情に合わせて調整して下さい。 Set mySeries = myGraph.Chart.SeriesCollection(1) '同上 myFormula = Split(mySeries.Formula, ",")(1) Set xValueRange = Sheets(Split(myFormula, "!")(0)).Range(Split(myFormula, "!")(1)) For i = 1 To xValueRange.Cells.Count Select Case xValueRange.Cells(i).Offset(0, -1).Value Case "10代" colorChangeFlag = True myColorIndex = 3 Case "20代" colorChangeFlag = True myColorIndex = 5 ’以下必要に応じて場合分けを記述して下さい。 End Select If colorChangeFlag Then With mySeries.Points(i) .MarkerBackgroundColorIndex = myColorIndex .MarkerForegroundColorIndex = myColorIndex End With End If colorChangeFlag = False Next i End Sub
その他の回答 (2)
- end-u
- ベストアンサー率79% (496/625)
データ範囲を指定してLoopし、年齢区分の内容によって色づけ処理する感じでしょうか。 ついでに、散布図系列よりデータ範囲を取得するところから始めるとすれば 下記のようなコードになります。 Sub test() Dim sr As Series Dim s() As String Dim r As Range Dim i As Long With ActiveSheet.ChartObjects(1).Chart .HasLegend = False Set sr = .SeriesCollection(1) End With sr.MarkerBackgroundColor = vbBlue sr.MarkerForegroundColor = vbBlue s = Split(sr.Formula, ",") '系列のSERIES関数をカンマで区切ってXValuesの範囲を取得して _ 左に1列Offsetした範囲をLoopして調べる For Each r In Excel.Range(s(1)).Offset(, -1) i = i + 1 With sr.Points(i) Select Case r.Value Case "20代" .MarkerBackgroundColor = vbRed .MarkerForegroundColor = vbRed End Select End With Next Set sr = Nothing End Sub
お礼
回答ありがとうございます。 グラフの操作をVBAでやったことがなかったのですが、Seriesという型の変数で参照範囲を取得するようなことができるのですね!? なるほど、Splits関数を使ってのこういう操作は全く知りませんでした。
- NURU_osan
- ベストアンサー率50% (297/593)
描きたいグラフは想像できるのですが、その後のデータ範囲が云々についての話がイマイチわかりません。特に冗長云々以下の話はさっぱり意味が分かりません。 データ範囲が可変するということは、サンプル数が決まっていないと言う意味ですよね? サンプル数がどれくらいかわかりませんが、散布図であれば空欄は無視されますから、40~50件程度の範囲でサンプル数が変わる可能性があるなら100件分の範囲を割り当ててしまうという手もあります。 せっかくVBAを使うのですから、Endを使ってデータ入力範囲をマクロに探させたらいかがですか? 複数のデータが同じセル範囲に混在しているのであれば、別のセル範囲にVBAでピックアップさせれば良いわけですし。 ともかくあなたが何をしたいのか、どれくらいのスキルがあるのかが良くわからないので具体的にアドバイスできません。 試しに自分でどういう処理をしたいのかVBAプログラムの文例でも掲示してくれれば、アドバイスもできると思います。
お礼
回答ありがとうございます。 たしかに例コードを提示すべきでした。ただ、私自身がどういう方法でやろうか考えている状態だったのすが、少し不親切な質問でした(^_^;)
お礼
回答ありがとうございます。 ChartObjectを宣言して Set myGraph = ActiveSheet.ChartObjects(1) なんて取得の仕方ができるのですか。。。 う~ん、まだ全然勉強が足りませんね(^_^;) VBAは奥が深い。。。 でも基本的には系列名を取得していって、条件にマッチしたものだけを色指定するという操作になるのですね。勉強になりました。