将Excel堆积条形图的点着色与表中指定的值相关联

时间:2013-06-05 11:17:08

标签: excel-vba charts excel-2010 vba excel

我正在尝试使用堆积条形图在Excel 2010中创建路线图/时间线。我在下面提供了一个图片链接,可以解释我对图表的意图。我希望在图表中展示不同的事件,并且应该根据它们的持续时间来绘制它们。事件越长,其各自的条形越长。

我设法构建了一个创建我喜欢的图表的宏。但是,我希望为它添加另一个功能。从下图可以看出,原始表中有一个名为“Type”的列。它代表事件的状态,无论是完成,取消还是计划。我的目标是让图表通过将条纹着色为红色(如果已取消),绿色(如果已完成)或蓝色(如果已计划)来表示此数据,具体取决于特定事件在其“类型”行中的值。

下面是“创建新事件视图”按钮使用的宏背后的代码。我想知道如何实现着色,最好是在这个非常相同的宏中,这样用户只需要点击按钮即可。

Sub CreateEventTable()

Dim timespan_start As Date
Dim timespan_end As Date
timespan_start = Application.InputBox("Type start date:")
timespan_end = Application.InputBox("Type end date:")

ActiveSheet.Shapes.AddChart(xlBarStacked, Range("E2").Left, Range("E2").Top).Select

With ActiveChart
  .SetSourceData Source:=Range("$A$1:$B$12, $D$1:$D$12"), PlotBy:=xlColumns
  .SeriesCollection(1).Values = Range("B2:B12")
  .SeriesCollection(1).XValues = Range("A2:A12")
  .SetElement msoElementLegendNone
  .ChartGroups(1).GapWidth = 31
  .SeriesCollection(2).ApplyDataLabels
  .SeriesCollection(2).DataLabels.ShowCategoryName = True
  .SeriesCollection(2).DataLabels.ShowValue = False
  .SeriesCollection(1).Format.Fill.Visible = msoFalse
  .Axes(xlValue).MinimumScale = timespan_start
  .Axes(xlValue).MaximumScale = timespan_end

End With
End Sub

这是图像的链接,希望能够解释整体结构:

http://i.imgur.com/XzPoMiY.jpg

感谢您的宝贵帮助!如果认为有必要,我很乐意提供更多细节。

1 个答案:

答案 0 :(得分:0)

这里的最佳解决方案不是VBA。您需要为图表创建多个系列,使它们重叠,并使用公式填充它们是否符合条件。自动更改,并且非常易于维护。

正如Skip Intro所说,Jon Peltier是图表大师。

此链接将帮助您开始正确的方向。

http://peltiertech.com/WordPress/conditional-formatting-of-excel-charts/