2017-10-04 6 views
0

初心者のVBAユーザーはここにいます。誰かが助けることを願っていますか?私はこれはおそらくかなりシンプルだと思うが、私はnoobieだ。チャートの塗りつぶし色を変更するためのVBAコード

私は、BIツールでExcelに取り込まれますチャートの2種類があると私はいくつかのルールに従ってそれらで利用可能なシリーズを着色する必要があります。

第1のチャートは、年間支出(年はシリーズ)を示し、数ヶ月から24ヶ月までさまざまな程度の歴史があります。これは私が24ヶ月のみの圧延を保つことだと来年、これは2016年、2017年、2018年に変更.......データの私の24mthsが今 2015、2016、2017年に広がっていることを意味します。

棒グラフのデータを青色で表示するには、最新の年(たとえば2017)が必要ですが、その前の年(たとえば2016年)はオレンジ色、その後は年前(たとえば2015年)灰色で

私はいつも24か月間ではない(すなわち、新しいクライアント)ことがありますので、6ヶ月しかない場合、同じ色付けロジックが適用され、最新の年は青で表示する必要があります。

Expenditure Chart

第二チャートは、私が思うより簡単です。私が持っているチャートは、パフォーマンスに基づいたシリーズ値を示しています。これらのシリーズは、「時間通り」、「許容範囲内」、「遅い」と呼ばれています。 =赤「後半」....... =ライトグリーン「寛容で」...... =「時間に」緑の半ば:

彼らの色はする必要があります。ここで

ことは、これら一連の1 又は2 又は全て3ない予測と所定のチャートで存在することができるということであるので、私はそれに応じて、色利用可能で、かつ直列決定するVBAを必要とします。

Performance Chart

私はコードで遊んでてきたが、その唯一、私は他のフィードから一緒に石畳、そしてどのような方法でから構築するための基盤ではありませんが何をしています。私はForEach型の構文を使う必要があると思います。なぜなら、それぞれのSeriesCollectionオブジェクトを使ってループを実行する必要があるということです。

誰でも助けることができれば、本当にありがとう。ここで

+0

典型的なプロットのサンプルデータとスクリーンショットを追加した場合、ヘルプを得る機会が増えます。 –

+0

あなたのアドバイスありがとうございます - 私は何を得る必要があるか、現在リンクされているピボットを示すいくつかの画像を追加しました。 –

+0

チャートを見ると、VBAが必要なようには見えません。列は常に同じ色を保持します。要件に合わせて各チャートのスタイルを変更するだけです。 – jsotola

答えて

1

は、あなたのチャートの青、オレンジ、グレーでシリーズをrecoloring、あなたの最初の質問のためのシンプルな少しのルーチンですが、デフォルトの順序を逆:ここ

Sub ReverseDefaultColors() 
    Dim iSrs As Long, nsrs As Long 

    If ActiveChart Is Nothing Then 
    MsgBox "Select a chart and try again.", vbExclamation, "No Active Chart" 
    Else 
    With ActiveChart 
     nsrs = .SeriesCollection.Count 
     ' work backwards from last series 
     For iSrs = nsrs To 1 Step -1 
     Select Case nsrs - iSrs 
      Case 0 ' last series 
      .SeriesCollection(iSrs).Format.Fill.ForeColor.ObjectThemeColor = _ 
       msoThemeColorAccent1 
      Case 1 ' next to last series 
      .SeriesCollection(iSrs).Format.Fill.ForeColor.ObjectThemeColor = _ 
       msoThemeColorAccent2 
      Case 2 ' etc. 
      .SeriesCollection(iSrs).Format.Fill.ForeColor.ObjectThemeColor = _ 
       msoThemeColorAccent3 
     End Select 
     Next 
    End With 
    End If 
End Sub 

は緑、光を着色、あなたの2番目の質問のために別のです緑、赤をシリーズ名に基づいて調整します(必要に応じてRGBを調整します)。いくつかの人々(男性の約8%、女性の1%未満)が緑と赤の区別に問題があるかもしれないことに注意してください。この理由から、青とオレンジはしばしば好ましい配色として使用されます。

Sub ColorGreenToRed() 
    Dim iSrs As Long, nSrs As Long 
    If ActiveChart Is Nothing Then 
    MsgBox "Select a chart and try again.", vbExclamation, "No Active Chart" 
    Else 
    With ActiveChart 
     nSrs = .SeriesCollection.Count 
     For iSrs = 1 To nSrs 
     ' only format series whose names are found 
     Select Case LCase$(.SeriesCollection(iSrs).Name) 
      Case "on time" 
      .SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = _ 
       RGB(0, 176, 80) ' Green 
      Case "in tolerance" 
      .SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = _ 
       RGB(146, 208, 80) ' Light Green 
      Case "late" 
      .SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = _ 
       RGB(255, 0, 0) ' Red 
     End Select 
     Next 
    End With 
    End If 
End Sub 
関連する問題