我正在基于以下数据(在左列中的标签,在右列中的值)下的数据在Excel 2010中制作几个饼图,并且我想确保每个部分的填充颜色与标签相对应的饼形图被绘制为特定颜色。两个警告:
(1)有很多图,所以我希望通过VBA或类似方法自动化此过程。
(2)每个图形中仅出现所有标签的子集,因此仅使用设置的调色板将不起作用。
(例如,如果我有标签A,B,C和D并且它们都显示在每个图表中,则可以按照此顺序设置Excel调色板。但是,在我的数据中,我们可能得到一个只包含A,B和D的图形,另一个包含B和C的图形-在这种情况下,默认情况下,Excel将在第二个图形中为B着色,就像在第一个图形中将A着色一样,默认情况下,这不是我想要的。)
我想到的第一个解决方案是建立一个看起来像这样的子例程(下面仅是伪代码):
For each worksheet in workbook.sheets
For each chart in worksheet.charts
Get list of xvalues(labels)
Map labels to fill colors(this mapping could be in an Excel matrix)
Change fill colors based on list of fill colors generated above
关于如何最好地实现这一点的任何想法?
答案 0 :(得分:0)
这可能会有所帮助。
Sub FormatPieChart()
Dim ws As Worksheet, cht As Chart, srs As Series, p As Integer
For Each ws In Worksheets
If ws.Name <> "ColorMap" Then
For i = 1 To ws.ChartObjects.Count
Set cht = ws.ChartObjects(i).Chart
If cht.ChartType = xlPie Then
Set srs = cht.SeriesCollection(1)
For p = 1 To srs.Points.Count
srs.Points(p).Format.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent & MapColor(srs.XValues(p))
Next p
End If
Next i
End If
Next ws
End Sub
Function MapColor(xval As Variant) As Integer
MapColor = WorksheetFunction.VLookup(xval, Worksheets("ColorMap").Range("A1:B5"), 2, False)
End Function
注释
ColorMap
上,我有一个标签和颜色值列表(A1:B5)msoThemeColorAccent
设置的。 msoThemeColorAccent
值。