Excel中对单元格赋值,可以通过Cells(row, column).Interior.Color这个属性赋值。但这是一个十进制数,范围是0-16777215. 属于long长整形。
通常对颜色赋值都是使用RGB色值,就是6个十六位数字如#EEEEEE,但Interior.Color是十进制,所以用起来很奇怪。这段时间用到了,我也大致研究了一下。
通常RGB的顺序是红绿蓝,对应的十六进制分别是FF0000;00FF00;0000FF。Excel是把这个6个数字转换成了十进制,对应的十进制是:16711680;65280;255。但试一下发现这三个颜色是的顺序是反过来的。所以RGB的十六进制应该是BGR,即的开始两位是蓝色,中间是绿色,最后是红色,合并之后再转成十进制就对了。最后对Cells(row, column).Interior.Color赋值就可以了。
赋色的问题解决了,下一步就是色阶。通过程序给单元格赋色,可以根据单元格的值的大小,使用色阶,值越大颜色越深。以由黑到白的色阶为例,其他颜色同理,函数如下:
Function GetMaxValue(nRows, nColumns) As Double
Set Rng = Range(Cells(1, 1), Cells(nRows, nColumns))
GetMaxValue = Application.WorksheetFunction.Max(Rng)
End Function
Function GetColor(nvalue As Double, nmax As Double)
Dim a As Double
a = (nvalue) ^ (1 / 2) * Int(255 / (nmax) ^ (1 / 2))
GetColor = Application.WorksheetFunction.Hex2Dec(Hex(a) & Hex(a) & Hex(a))
End Function
先需要获取区间的最大值,然后将单元格中的值,按比例压缩到0-255之间,以压缩后的值按RGB的组成拼凑为色阶。使用方法如下:
'获取最大值
max = GetMaxValue(nRows, nColumns)
'对单元格的循环
For i,j
Cells(i, j).Interior.Color = GetColor(Cells(i, j), max)