我正在尝试创建管道调查数据的热图作为条形图,仅显示瞬态颜色。
我有一个位置和电流密度值列表,我已将其有条件地格式化为色标。
我尝试了很多Excel函数。我只能将热图显示为电子表格而不是条形图。数据可以覆盖 1000 行,因此我希望将其显示为图表,作为显示密度的一种视觉表示形式。
注意:当数据源发生变化时,图表中条形的颜色不会自动更新。
微软文档:
Option Explicit
Sub HeadMapColumnChart()
Dim srcRng As Range, i As Long, oSerCol As Series
Set srcRng = Range("C1").CurrentRegion
Columns("C").Insert
With srcRng.Columns("C")
.Value = "1"
.Cells(1).Value = "CD"
End With
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
With ActiveChart
.SetSourceData Source:=srcRng.Columns("C")
.Axes(xlValue).MaximumScale = 1
.ChartGroups(1).GapWidth = 0
.SetElement (msoElementPrimaryValueAxisNone)
.HasAxis(xlCategory) = True
Set oSerCol = .FullSeriesCollection(1)
End With
With srcRng.Columns(1)
oSerCol.XValues = "=" & ActiveSheet.Name & "!" & .Resize(.Rows.Count - 1).Offset(1).Address
End With
For i = 2 To srcRng.Rows.Count
oSerCol.Points(i - 1).Format.Fill.ForeColor.RGB = Cells(i, "B").DisplayFormat.Interior.Color
Next
End Sub
您可以使用属性
.DisplayFormat.Interior.Color
来读取条件格式给出的单元格的真实颜色。使用它,我将制作一个所有列的值为 1 的条形图,然后使用 VBA 代码来格式化图表的每个条形。
Sub ColorChart()
Dim loData As ListObject
Dim myRng As Range
Dim i As Integer
Set loData = ThisWorkbook.Sheets(1).ListObjects("tblChartData")
For i = 1 To loData.DataBodyRange.Rows.Count
Set myRng = loData.ListColumns("CD").DataBodyRange(i)
ThisWorkbook.Sheets(1).ChartObjects("Chart 1").Activate
ActiveChart.FullSeriesCollection(1).Points(i).Select
Selection.Format.Fill.ForeColor.RGB = myRng.DisplayFormat.Interior.Color
Next i
End Sub
我将其基于表格,因为它让我更有信心图表与我们读取以获得颜色的值具有相同的范围。
看起来像这样: 条形图格式与表格颜色相同