【问题标题】:Conditionally change colors of individual bars in bar chart in Excel VB based on range根据范围有条件地更改Excel VBA中条形图中各个条形的颜色
【发布时间】:2012-03-31 00:09:03
【问题描述】:

我正在处理一个 Excel 项目,并尝试格式化条形图的颜色(以及后来的饼图),以显示 REDGREENYELLOW,基于另一个数据范围。数据范围是...

表格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 完全不熟悉,并且完全不了解 VBA...

另外,饼图是否可以使用相同的函数来通过相同的参数定义颜色?

提前致谢!!

【问题讨论】:

  • 查看 Jon (peltiertech.com/WordPress/…) 的此链接
  • 感谢您的快速响应......我已经看到了,但我不相信这将适用于动态数据集......我每次都必须重新安排分组数据改变了。我更喜欢使用指定范围来确定颜色的动态解决方案......谢谢!
  • @Ben 目前正在整理我的问题和答案:我的尝试回答了你的问题吗?

标签: vba excel formatting conditional


【解决方案1】:

这里有一个 vba 函数,我用它来反转负条,因此它们是红色的。也许这可以适应:

函数从工作簿中 a 模块中的子例程调用,如下所示:

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

【讨论】:

  • 我正在尝试适应它...我会在我到达某个地方时回帖...感谢您的帮助!
  • 到目前为止还没有爱...我会继续尝试以某种方式整合它,但我最终可能只是将它放在 Freelancer 上并对其进行赏金。我真的不适合 VBA。目前这不是一个高优先级,但我感谢您的帮助!
  • 好的 - 你的深度如何?你知道如何设置代码模块以及将这个函数粘贴到哪里吗?
  • 我已经编辑了我的原始帖子,但我真的需要在 xl 中测试它 - 不记得 colorIndexes 是什么......我们需要更改 Excel.xlAutomatic 的位
  • 刚刚在 vba 上进行了最新测试并在小测试图上工作
【解决方案2】:

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

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

由于您的范围是互斥的,因此每个条形图只有一种颜色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    相关资源
    最近更新 更多