根据范围有条件地更改Excel VBA中条形图中各个条形的颜色

Posted

技术标签:

【中文标题】根据范围有条件地更改Excel VBA中条形图中各个条形的颜色【英文标题】:Conditionally change colors of individual bars in bar chart in Excel VB based on range 【发布时间】: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 目前正在整理我的问题和答案:我的尝试回答了你的问题吗? 【参考方案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。

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

【讨论】:

以上是关于根据范围有条件地更改Excel VBA中条形图中各个条形的颜色的主要内容,如果未能解决你的问题,请参考以下文章

更改 ggplot2 中条形图和图例的默认颜色

访问 VBA - 在大范围内更改 Excel 单元格值的更快方法?

seaborn中条形图条和误差条的美学

使用VBA进行颜色填充,有条件地使用单元格值

自动调整 ggplot 中条形图的大小,以实现多个图形 R 的一致性

EXCEL VBA:根据值范围格式化现有数字单元格