プロが教える店舗&オフィスのセキュリティ対策術

現在、オフィス2003で業務の時刻表を作成しています。

写真(左上)のように業務内容と所要時間ような表があり、(右上)のようなグラフにして輸送の部分だけを色付き、他を白色で塗りわけしています。

しかし(左下)のように、順番が1行でも変わると塗り分もずれてしまます。


現在、この塗り分けを自動化するためにマクロやVBAなどを考えていて、以下のようなVBAを作り実行をさせましたが、思うように表示されません。

Sub Macro2()
'
ActiveSheet.ChartObjects(1).Activate
ActiveChart.ChartArea.Select

Dim scname As String
Dim colidx As Variant
Dim i As Integer

With ActiveChart

For i = 1 To .SeriesCollection.Count

scname = .SeriesCollection(i).Name

Select Case Split(scname, " ")
Case "輸送": colidx = 4

End Select
.SeriesCollection(i).Interior.ColorIndex = colidx

Next
End With
End Sub


何かよい方法は(VBAやマクロなども踏まえて)ありますでしょうか? ご教授宜しくお願いします。

(最終的に凡例は表示させたくはありませんが、らラベルとして系列名を表示させたく思っています。)

「積み上げグラフ 系列ごとの自動塗り分け」の質問画像

A 回答 (1件)

★1の行で、Split(scname, " ")では配列になるだけです。


提示例ではSplitする必要は無いと思います。
Splitする必要があるなら
Split(scname, " ")(0)
とか番号を付けて"輸送"の部分を取り出す必要があります。
colidx = 0
With ActiveChart
For i = 1 To .SeriesCollection.Count
scname = .SeriesCollection(i).Name
'Select Case Split(scname, " ") '---★1
Select Case scname
Case "輸送": colidx = 4 '---白なら2
End Select
If colidx <> 0 Then '---場合分けする
.SeriesCollection(i).Interior.ColorIndex = colidx
colidx = 0 '---初期化する
End If
Next
End With


Select Case を使わないでも十分だと思います。

colidx = 4
With ActiveChart
For i = 1 To .SeriesCollection.Count
scname = .SeriesCollection(i).Name
If scname = "輸送" Then
.SeriesCollection(i).Interior.ColorIndex = colidx
End If
Next
End With

あと線の色がどうなるか未確認です。
    • good
    • 0
この回答へのお礼

思い通りの動作が出来ました!

まだまだ勉強不足なので、いろいろ覚えたいと思います。

本当にありがとうございましたm(__)m

お礼日時:2011/01/24 15:24

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