使用VBA对Excel中的单元格按色阶赋颜色

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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值