2012-03-14 8 views
3

私はExcelプロジェクトで作業していますが、棒グラフ(および後で同様の推論で円グラフ)の色を整形しようとしています別の範囲のデータに基づいてREDGREEN、またはYELLOWを表示します。これらの値はパーセンテージであるE15:E36ExcelのVBで棒グラフの色を条件付きで変更する

Overview

範囲:データ範囲は...

シートです。何パーセントの間にあるかに基づいて、バーを緑、赤または黄色にフォーマットしたいと思います。

もし100の間 - 90、グリーン もし89の間 - 70、イエロー 69の間であれば - 以下(棒グラフの場合)、このポイントに私のコードです

レッド、1:

Sub Macro2() 
     ActiveSheet.Shapes.AddChart.Select 
     ActiveChart.ChartType = xlColumnClustered 
     ActiveChart.SetSourceData Source:=Sheets("Overview").Range("A15:A36") 
     ActiveChart.SetSourceData Source:=Sheets("Overview").Range("A15:A36,B15:B36") 
     ActiveChart.ApplyLayout (2) 
     ActiveSheet.ChartObjects("Chart 3").Activate 
     ActiveChart.Legend.Select 
     Selection.Delete 
     ActiveSheet.ChartObjects("Chart 3").Activate 
     ActiveChart.ChartTitle.Select 
     ActiveSheet.ChartObjects("Chart 3").Activate 
     ActiveChart.ChartTitle.Text = "Rating Site Distribution" 
    End Sub 

ご協力いただければ幸いです!私はVBAに精通しておらず、この部分について私の要素から完全に感じていません...

また、同じ機能によって、同じパラメータで色を定義する円グラフが機能しますか?

ありがとうございます!

+0

このリンクを参照してくださいJon(http://peltiertech.com/WordPress/conditional-formatting-of-excel-charts/) –

+0

私はこれを見ましたが、私はしませんこれは動的なデータセットで動作すると信じています...データが変更されるたびにグループ分けを再配置する必要があります。私は色を決定するために指定された範囲を使用する動的なソリューションを好むだろう...ありがとう! – cupcakes

+0

@Benは現在、私の質問と回答の整頓をしています:私の試みはあなたの質問に答えましたか? – whytheq

答えて

2

ここではvba関数を使用して、負のバーを反転させて赤色にします。多分これは適合させることができる。

機能は、このようなワークブック内のモジュール内のサブ・ルーチンから呼び出されます。

Sub FixTheGraph() 
    FormatGraph("Overview") 
End Sub 

ここで関数です。サブルーチンの下に貼り付けることができます:

Function FormatGraph(myWorksheet As String) 

Excel.Sheets(myWorksheet).Select 

Dim myChartObject As ChartObject 
For Each myChartObject In Excel.ActiveSheet.ChartObjects 
    myChartObject.Select 

    Dim myPoint As Integer, valArray 

    With Excel.ActiveChart.SeriesCollection(1) 
     valArray = .Values 
     For myPoint = 1 To .Points.Count 
      'myVal = valArray(myPoint) 
      Select Case valArray(myPoint) 
       Case 0.9 To 1 
        With .Points(myPoint) 
         .Interior.ColorIndex = 1 '<change colour to suit 
        End With 
       Case 0.7 To 0.9 
        With .Points(myPoint) 
         .Interior.ColorIndex = 5 '<change colour to suit 
        End With 
       Case Is < 0.7 
        With .Points(myPoint) 
         .Interior.ColorIndex = 3 
        End With 
       End Select 
     Next 
    End With 

Next myChartObject 
Excel.Sheets(myWorksheet).Cells(1, 1).Select 

End Function 
+0

私は今すぐそれを適応させようとしています...私がどこかに行くと私はポストバックします...助けてくれてありがとう! – cupcakes

+0

これまでのところ愛はありません...私は何とかこれを統合しようとしていますが、私はフリーランサーにそれを置いて、それに賞金をかけてしまうかもしれません。私は本当にVBAの要素から外れています。現時点では優先順位は高くありませんが、私はあなたの助けに感謝します! – cupcakes

+0

ok - あなたの深みはどうですか?コードモジュールを設定する方法と、この関数をどこに貼り付けるのか知っていますか? – whytheq

2

あなたがしたいのは、グラフタイプxlBarStackedです。それから3つのシリーズ - 各色ごとに1つを与えます。各シリーズにおいて

、要素の値が範囲内であれば、あなたの範囲が相互に排他的であるので、それ以外のときは0

にseries.Value要素を設定し、値を使用し、各バーは一色のみを有することになります。

関連する問題