2016-07-07 63 views
1

我需要填写具有不同颜色的一个小区作为在这张照片(3行被垂直合并和颜色被手动绘制在使用3个的矩形形状此图片):Excel中 - 填充的细胞用不同的颜色

Fill cell with different colors

我可以找到填充单元格部分的唯一方法是使用条件格式(将样式设置为数据栏并填充为实体),但它只支持一种颜色。 这是可能的有或没有VBA?

+2

据我所知在Excel中这是不可能的,至少不容易。但尝试看看Diagramm类型。这将是一个简单的解决方案。 –

+0

感谢@DoktorOSwaldo,至今我找不到任何方法。如何将环形图添加到单元格?我知道可以使用sparklines将线条或柱状图添加到单元格,但我想知道是否可以使用环形图表。 – Lati

+0

您不能直接将其添加到单元格,但可以将单元格设置为左侧和顶部。看看ChartObjects.Add - >使用ActiveSheet.ChartObjects.Add(左:=范围(“I5”)。左,_ 顶部:=范围(“I5”)顶部,_ 等等 –

回答

0

这是可能的。

我发现了两种方法可以做到这一点。 1-使用黑色方形字符(字符代码2588 - vba:ActiveSheet.Cells(1,1)= ChrW(& H2588))并根据百分比对它们着色。这个字符填满了单元格的高度,而且它们之间没有间距,这就允许完全填充单元格(当然,你应该考虑在单元格中留下缩进)。只有在这里问题,你不能在一个单元格中使用很多字符;我使用它们中的30个,并根据30比例缩放字符数(即50%红色表示15个红色字符-2588)。

2-与@Doktor Oswaldo的建议相同:在单元格中使用单元格的位置和大小(以像素为单位)插入绘图。这种方法有一个很大的优点:您可以准确地显示比率。另外,你也可以用一个模式填充数据系列。但是如果你有很多情节,你会牺牲Excel的表现。对于绘图设置,我使用以下VBA代码:

'Define var's 
Dim src As Range, targetCell As Range 
Dim chacha As ChartObject 

'Set var's 
Set src = Worksheets("Sheet1").Range("B1:B3") 
Set targetCell = Worksheets("Sheet1").Range("C2") 

'Create plot at the target cell 
Set chacha = Sheets("Sheet1").ChartObjects.Add(targetCell.Left, targetCell.Top, targetCell.Width, targetCell.Height) 

'Change plot settings to fill the cell 
With chacha.Chart 
    .ChartType = xlBarStacked 
    .SetSourceData Source:=src, PlotBy:=xlRows 
    .Axes(xlValue).MinimumScale = 0 
    .Axes(xlValue).MaximumScale = 100 
    .Axes(xlCategory).Delete 
    .Axes(xlValue).Delete 
    .Legend.Delete 
    .PlotArea.Top = -50 
    .PlotArea.Left = -50 
    .PlotArea.Width = targetCell.Width 
    .PlotArea.Height = targetCell.Height 
    .ChartGroups(1).GapWidth = 0 
End With 

chacha.Chart.SeriesCollection(1).Format.Fill.ForeColor.RGB = RGB(255, 0, 0) 
chacha.Chart.SeriesCollection(2).Format.Fill.ForeColor.RGB = RGB(0, 0, 255) 
chacha.Chart.SeriesCollection(3).Format.Fill.ForeColor.RGB = RGB(255, 255, 0) 

在代码中我手动修改了系列颜色,也可以自动化。以下是两种方法的截图。单元格“C1”填充了块字符,“C2”是图表。

FillCellPlot

注意:您可能会在该行 “.PlotArea.Top” 得到一个错误。要解决这个问题,请检查:Error setting PlotArea.Width in Excel, VBA (Excel 2010)