2012-03-14 113 views
3

我正在处理Excel项目,并试图通过相同的推理来格式化条形图的颜色(以及后来的饼图)以便基于另一范围的数据显示RED,GREENYELLOW。数据范围是...有条件地改变条形图在Excel中的条形图中的条形图基于范围

Overview

范围E15:E36

这些值百分比。根据它们之间的百分比,我希望酒吧格式化为绿色,红色或黄色。

如果之间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

看到这个链接乔恩(http://peltiertech.com/WordPress/conditional-formatting-of-excel-charts/) – 2012-03-14 14:31:50

+0

感谢您的快速反应......我见过这个,但我没有相信这将适用于动态数据集......每次数据更改时,我都必须重新安排分组。我更喜欢使用指定范围来确定颜色的动态解决方案......谢谢! – cupcakes 2012-03-14 15:32:34

+0

@Ben目前对我的问题和答案进行整理:我的尝试是否回答你的问题? – whytheq 2015-05-01 13:12:38

回答

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 2012-03-14 18:46:47

+0

到目前为止还没有爱...我会继续尝试以某种方式整合,但我可能最终只会把它放在自由职业者身上并给予奖励。我真的脱离了VBA的元素。目前这不是重中之重,但我感谢您的帮助! – cupcakes 2012-03-14 19:23:27

+0

好的 - 你的深度如何?你知道如何设置代码模块和粘贴这个函数的位置吗? – whytheq 2012-03-14 20:47:22

2

您要做的是图表类型xlBarStacked。然后给它三个系列 - 每种颜色一个。

在每个系列中,如果元素的值是在范围内,使用该值,否则series.Value元件设置为0。

由于您的范围是相互排斥的,每个条将只有一个颜色。