根据范围有条件地更改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 项目,并尝试格式化条形图的颜色(以及后来的饼图),以显示 RED
、GREEN
或 YELLOW
,基于另一个数据范围。数据范围是...
表格: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中条形图中各个条形的颜色的主要内容,如果未能解决你的问题,请参考以下文章
访问 VBA - 在大范围内更改 Excel 单元格值的更快方法?