Excel中的条件格式可以有效的凸显数据特征,如下图中B列所示。
现在需要使用图表展现热力条形图,如下图所示。由于颜色有多个过渡色,因此手工逐个设置数据条的颜色,基本上是不可能完成的任务,使用VBA代码可以快速创建这种图表。
由于数据条是等高的,因此需要增加辅助列,如下图中C列所示。
示例代码如下。
Sub HeadMapColumnChart()Dim srcRng As Range, i As Long, oSerCol As SeriesSet srcRng = Range("C1").CurrentRegionColumns("C").InsertWith srcRng.Columns("C").Value = "1".Cells(1).Value = "CD"End WithActiveSheet.Shapes.AddChart2(201, xlColumnClustered).SelectWith ActiveChart.SetSourceData Source:=srcRng.Columns("C").Axes(xlValue).MaximumScale = 1.ChartGroups(1).GapWidth = 0.SetElement (msoElementPrimaryValueAxisNone).HasAxis(xlCategory) = TrueSet oSerCol = .FullSeriesCollection(1)End WithWith srcRng.Columns(1)oSerCol.XValues = "=" & ActiveSheet.Name & "!" & .Resize(.Rows.Count - 1).Offset(1).AddressEnd WithFor i = 2 To srcRng.Rows.CountoSerCol.Points(i - 1).Format.Fill.ForeColor.RGB = Cells(i, "B").DisplayFormat.Interior.ColorNext
End Sub
【代码解析】
第3行代码获取数据表单元格区域。
第4行代码在C列插入空白列,如果工作表中C列为空白列,那么可以省略此行代码。
第6行代码在C列插入辅助列,赋值为1,这样可以实现等高数据条。注意此处只针对数据表所在行进行赋值,并非将整个C列填充数值。
第7行代码C1单元格的值等于B1,用做图表标题。
第9行代码插入柱图。
第11行代码设置数据区域为C列。
第12行代码设置纵轴最大值为1。
第13行代码设置数据条之间宽度为0。
第14行代码隐藏纵轴。
第15行代码设置横轴为分类轴。
第16行代码获取图表系列。
第19行代码设置横轴分类标签。
第21~23行代码循环遍历数据区域,并设置数据条的填充颜色。
第22行代码设置数据条的填充色,由于B列中使用条件格式设置的颜色,因此需要使用DisplayFormat.Interior.Color
属性读取其颜色值。