2016-07-07 62 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)