【问题标题】:Excel - Fill a cell with different colorsExcel - 用不同颜色填充单元格
【发布时间】:2016-07-07 09:33:43
【问题描述】:

我需要像这张图片一样用不同的颜色填充一个单元格(3行垂直合并,颜色是在这张图片中使用3个矩形手动绘制的):

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

【问题讨论】:

  • 据我所知,这在 Excel 中是不可能的,至少不容易。但是请尝试查看 Ring Diagramm 类型。这将是一个简单的解决方案。
  • 感谢@DoktorOSwaldo,到目前为止我找不到任何方法。如何将环形图添加到单元格?我知道可以使用迷你图向单元格添加线图或柱图,但我想知道环形图是否也可以。
  • 您不能直接将其添加到单元格中,但您可以将单元格设置为左侧和顶部。看看 ChartObjects.Add -> With ActiveSheet.ChartObjects.Add(Left:=Range("I5").Left, _ Top:=Range("I5").Top, _ 等等
  • @DoktorOSwaldo,谢谢。我为我的问题找到了 2 个解决方案并发布为回复。

标签: vba excel


【解决方案1】:

有可能。

我找到了两种方法。

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”是一个图表。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2013-04-17
    • 2017-01-05
    • 1970-01-01
    • 2015-08-09
    相关资源
    最近更新 更多