Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Excel-用不同的颜色填充单元格_Vba_Excel - Fatal编程技术网

Vba Excel-用不同的颜色填充单元格

Vba Excel-用不同的颜色填充单元格,vba,excel,Vba,Excel,我需要用不同的颜色填充一个单元格,如图中所示(3行垂直合并,颜色在此图中使用3个矩形手动绘制): 我能找到的填充单元格部分的唯一方法是使用条件格式(将样式设置为数据栏,填充为实体),但它只支持一种颜色。 有或没有VBA这是可能的吗?这是可能的 我找到了两种方法 1-使用黑色方形字符(字符代码2588–vba:ActiveSheet.Cells(1,1)=ChrW(&H2588))并根据百分比为其着色。这个字符填充了单元高度,而且它们之间没有间距,从而完全填充了一个单元(当然,您应该在单元格中考

我需要用不同的颜色填充一个单元格,如图中所示(3行垂直合并,颜色在此图中使用3个矩形手动绘制):

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

这是可能的

我找到了两种方法

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”行可能会出现错误。要解决此问题,请检查:

这是可能的

我找到了两种方法

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”行可能会出现错误。要解决此问题,请检查:

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