VBAでグラフのデータポイントの色分けをしたいと考えています。
例えば:
年齢区分, 身長, 体重
20代, 180, 70
20代, 175, 68
10代, 149, 50
30代F, 160, 55
のようなデータがあって、横軸を身長、縦軸を体重として散布図を描き、年齢区分によって色を変えたいという状況です(例えば20代だけを赤のデータポイントで描く、といったように)。
基本的にはMとFをそれぞれ別の系列として描くという方法しかないのでしょうか?
また、データ範囲は可変するのでいつも決まったセル範囲に20代のデータが入力されているとは限りません。
冗長ですが
・20代のセル範囲を別範囲にコピー
・20代以外のセル範囲を別範囲にコピー
・それぞれのセル範囲のデータを取得して別系列として描く
という方法がベターでしょうか。。。
何かアイディアをください!!
No.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
回答ありがとうございます。
ChartObjectを宣言して Set myGraph = ActiveSheet.ChartObjects(1) なんて取得の仕方ができるのですか。。。 う~ん、まだ全然勉強が足りませんね(^_^;) VBAは奥が深い。。。
でも基本的には系列名を取得していって、条件にマッチしたものだけを色指定するという操作になるのですね。勉強になりました。
No.2
- 回答日時:
データ範囲を指定して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関数を使ってのこういう操作は全く知りませんでした。
No.1
- 回答日時:
描きたいグラフは想像できるのですが、その後のデータ範囲が云々についての話がイマイチわかりません。
特に冗長云々以下の話はさっぱり意味が分かりません。データ範囲が可変するということは、サンプル数が決まっていないと言う意味ですよね?
サンプル数がどれくらいかわかりませんが、散布図であれば空欄は無視されますから、40~50件程度の範囲でサンプル数が変わる可能性があるなら100件分の範囲を割り当ててしまうという手もあります。
せっかくVBAを使うのですから、Endを使ってデータ入力範囲をマクロに探させたらいかがですか?
複数のデータが同じセル範囲に混在しているのであれば、別のセル範囲にVBAでピックアップさせれば良いわけですし。
ともかくあなたが何をしたいのか、どれくらいのスキルがあるのかが良くわからないので具体的にアドバイスできません。
試しに自分でどういう処理をしたいのかVBAプログラムの文例でも掲示してくれれば、アドバイスもできると思います。
回答ありがとうございます。
たしかに例コードを提示すべきでした。ただ、私自身がどういう方法でやろうか考えている状態だったのすが、少し不親切な質問でした(^_^;)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) 条件付き書式 ある範囲で色がついているセルと同行の別のセルに色を付けたい 4 2022/04/20 07:04
- Excel(エクセル) 単価シートから単価をエクセル関数で自動取得する方法 1 2023/07/02 22:00
- Excel(エクセル) エクセルの複写について 4 2022/04/10 01:02
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2023/03/12 12:16
- Excel(エクセル) マクロ セルの選択 5 2022/08/12 22:47
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
合計3TBのデータのハッシュ値を...
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
Accessで該当データにフラグを...
-
多量のSUMIF式を軽くしたい
-
[C言語] コメント文字列を無視...
-
メモ帳(テキストデータ)をExc...
-
Excelのマクロでワードのテキス...
-
C言語プログラム変更
-
配列の勉強をしています。使用...
-
ノイズの入った波形をきれいな...
-
VBAを使ってOutlookメール本文...
-
モジュラス103の算出方法について
-
ビットシフトについて
-
win7でvbsファイルが実行できない
-
EXCELVBAでSQLserverからデータ...
-
HTMLでテキストボックスで...
-
CString型の文字列連結について
-
GETはできるがPOSTができない、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
多量のSUMIF式を軽くしたい
-
Excelのマクロでワードのテキス...
-
エクセルで2つの時系列のデー...
-
この行は既に別のテーブルに属...
-
VBAを使ってOutlookメール本文...
-
シーケンサにパソコンからアク...
-
EXCELVBAでSQLserverからデータ...
-
ブレーカー落ちで壊れたりしな...
-
[C言語] コメント文字列を無視...
-
オープンチヤットでデータ削除...
-
モジュラス103の算出方法について
-
javaでDBからデータを取ってき...
-
カンマからスラッシュに
-
VBA 毎日取得するデータを順番...
-
Android携帯をUSBメモリ代わりに
おすすめ情報