作者:iamlaosong

1、单元格颜色的设置

背景颜色用属性Interior,字体颜色用属性Font。颜色的值,可以用Colorindex,这种方法只有Excel规定的56中颜色,如下图所示:

也可以用RGB()函数,这样就可以设置成任何颜色。RGB()函数函数实际是返回一个颜色值,因此,也可以直接赋值,只是这个值不直观而已。其实这个值就是RGB()函数的值,用十进制表示:

RGB(R,G,B)=B*256*256+G*256+R

其中R、G、B是红绿蓝三种颜色十进制值。

用十六进制表示颜色值就非常直观了,最低两位表示红色,最高两位表示蓝色,中间两位表示绿色,就是上图表格中十六进制值,只是红蓝调换一下位置,即:

&HBBGGRR,其中RR、GG、BB是红绿蓝三种颜色十六进制值。

如红色(ColorIndex=3)即RGB(255,0,0)可以用16进制数表示为&H0000FF

2、颜色设置方法

改变单元格的背景色用:     range.Interior.ColorIndex=
改变单元格的字体的颜色:   range.font.ColorIndex=

3、颜色设置代码和效果

'设置单元格背景颜色
Sub setColor()'黑色Range("A1") = "黑色"Range("A2").Interior.ColorIndex = 1Range("A3").Interior.Color = RGB(0, 0, 0)Range("A4").Interior.Color = 0Range("A5").Interior.Color = &H0'红色Range("B1") = "红色"Range("B2").Interior.ColorIndex = 3Range("B3").Interior.Color = RGB(255, 0, 0)Range("B4").Interior.Color = 255Range("B5").Interior.Color = &HFF'绿色Range("C1") = "绿色"Range("C2").Interior.ColorIndex = 4Range("C3").Interior.Color = RGB(0, 255, 0)Range("C4").Interior.Color = 65280      '255*256=65280Range("C5").Interior.Color = &HFF00'蓝色Range("D1") = "蓝色"Range("D2").Interior.ColorIndex = 5Range("D3").Interior.Color = RGB(0, 0, 255)Range("D4").Interior.Color = 16711680   '255*256*256=16711680Range("D5").Interior.Color = &HFF0000
End Sub

这个C5单元格颜色有点奇怪,明明设置的是绿色(用十六进制值&HFF00) ,结果却是这个颜色。设置完毕,再测试这个单元格的颜色值,居然是8号颜色,十六进制值&HFFFF00,如下图:

这是什么情况?难道16进制表示有什么问题吗?将该语句换成:

Range("C5").Interior.Color = &HFFFF00

效果完全相同。

之所以这样,应该和十六进制数据转换有关系,&HFF00被系统认为是整型(整型数据范围: -32768 ~ 32767,16bit),但是为负数(-256),按补码规则,扩充到长整型时(长整型数据范围:-2147483648 ~ 2147483647,32bit)时高位补1,我试了一下用&HFFFF赋值,结果是白色,和&HFFFFFF完全相同。我想用&H00FF00赋值,但是开发环境立即优化,去掉前面的00,看来用十六进制表示颜色值是不保险的(十进制没有问题但不直观),还是用RGB()函数吧。

那么有没有解决办法呢?办法还是有的,既然开发环境会优化掉数字前面的00,那么只要不写00就行了,所以,只要将语句改成下面的形式就行了(后6位是颜色值):

Range("C5").Interior.Color = &H100FF00 - &H1000000

进一步研究发现,后面的H1000000减不减效果是一样的,也就是说,颜色赋值,只关心后面的24bit,高位是什么内容,没有关系。

VBA没有无符号整数,所以用VBA处理无符号整数(比如移位),会碰到与上面类似的问题,这一点要注意。真要处理,就用Byte类型吧。

最后,完整的看下效果吧。为了统一并防止出错,十六进制值都用CC开头,后跟6位颜色代码(用什么十六进制数开头都可以,只要不是0就行,用CC是因为颜色的英文是C开头)。代码如下:

Sub setColor()'黑色Range("A1") = "黑色"Range("A2").Interior.ColorIndex = 1Range("A3").Interior.Color = RGB(0, 0, 0)Range("A4").Interior.Color = 0Range("A5").Interior.Color = &HCC000000'红色Range("B1") = "红色"Range("B2").Interior.ColorIndex = 3Range("B3").Interior.Color = RGB(255, 0, 0)Range("B4").Interior.Color = 255Range("B5").Interior.Color = &HCC0000FF'绿色Range("C1") = "绿色"Range("C2").Interior.ColorIndex = 4Range("C3").Interior.Color = RGB(0, 255, 0)Range("C4").Interior.Color = 65280     '255*256Range("C5").Interior.Color = &HCC00FF00'蓝色Range("D1") = "蓝色"Range("D2").Interior.ColorIndex = 5Range("D3").Interior.Color = RGB(0, 0, 255)Range("D4").Interior.Color = 16711680     '255*256*256Range("D5").Interior.Color = &HCCFF0000'黄色Range("E1") = "黄色"Range("E2").Interior.ColorIndex = 6Range("E3").Interior.Color = RGB(255, 255, 0)Range("E4").Interior.Color = 65535     '255*256+255Range("E5").Interior.Color = &HCC00FFFF'金色Range("F1") = "金色"Range("F2").Interior.ColorIndex = 44Range("F3").Interior.Color = RGB(255, 204, 0)Range("F4").Interior.Color = 52479     '204*256+255Range("F5").Interior.Color = &HCC00CCFFEnd Sub

【VBA研究】关于单元格颜色值的十六进制赋值相关推荐

  1. Excel vba开发 合并单元格拆分自动填充功能、在每一条数据后面插入空白行、将地理坐标的经纬度转换成度等功能

    写在前面: 最近老大丢给我一个数据量比较大,比较复杂的表,让我用VB去处理,刚被分到这个任务的时候一脸茫然,对Excel VB开发一点都不了解,所以就自己研究并查资料,最后终于解决了. 一.Excel ...

  2. vba 循环读取单元格_利用VBA打开顺序文件,并读取

    大家好,疫情施虐,国外各地更有爆发的迹象,但无论怎样,我们一定要坚信,疫情终将会过去,曙光一定会到来.后疫情时代将会是一个全新的世界,很多理念都将被打破,大多数人不会再享受体制内的保护,对于我们每个人 ...

  3. vba 判断目标单元格内容改变的代码_【VBA小代码】批量改变单元格部分字符格式...

    有朋友问:能不能批量将单元格中的部分字符改变格式,比如改变字体,字号,改变颜色--举个例子,如下图所示,将"领导"两个字--字体变成15号,红色加粗--干了这碗毒鸡汤,天黑就闭眼- ...

  4. Excel利用VBA实现去掉单元格两边空格

    直接贴代码,方便大家学习. '清除所有sheet页中单元格两端的空格 Public Sub trimCell()Dim sheetCount, columnCount, rowCount, tempR ...

  5. excel之vba快速合并单元格

    前言 平时工作中经常会用到excel的功能, 难免有一些操作不能批量处理, 比如说某一列有100w的数据需要合并单元格, 手动去点的话, 费时费力, 又不能保证准确性. 此时一般有三种办法, 1.请出 ...

  6. 使用VBA程序进行单元格颜色填充

    1. 打开Excel表格,点击[开发工具],[Visual Basic],打开VBA工程窗口. 2. 双击VBA工程资源管理器里面的"Sheet1(Sheet1)",在代码窗口里面 ...

  7. VBA Excel实践如何系列(三)vba如何设置单元格边框、字体

    vba设置单元格字体,以下是设置给定单元格内字体的加粗,单元格填充灰色等,参数是Range对象 Sub font_sty(Rng As Range)Rng.SelectSelection.Font.B ...

  8. Excel_通过VBA高亮选择单元格的行列

    WPS有一个比较有意思的功能叫十字光标,就是可以亮显选择单元格的行列,数据量比较多的时候可以方便查看数据,可惜Excel原生并没有类似的功能,网上搜索了一下,发现可以通过VBA完成类似的功能,便尝试了 ...

  9. Excel VBA:插入新单元格或区域——Range.Insert 方法

    Range.Insert 方法 在工作表或宏表中插入一个单元格或单元格区域,其他单元格相应移位以腾出空间. 语法 表达式.Insert(Shift, CopyOrigin) 表达式   一个代表 Ra ...

最新文章

  1. 【Qt】Qt容器总结
  2. 照抄不翻车:抗住千万流量的大型分布式系统架构设计
  3. 机器学习中的集成学习模型实战完整讲解
  4. Hdu 4738 Caocao's Bridges (连通图+桥)
  5. PHP版本的自动生成有规则的订单号(或编号)
  6. HttpContext.Current.Request.Url 地址:获取域名
  7. Error creating bean with name ‘org.springframework.security.oauth2.config.annotation.web.configurati
  8. 玩转oracle 11g(36):rman备份-控制文件丢失恢复
  9. 熟悉HTML基本标签的分类测试分析 1218
  10. Transformer又又来了,生成配有音乐的丝滑3D舞蹈,开放最大规模数据集AIST++
  11. bzoj4448 SCOI2015 情报传递 message
  12. Java设计模式学习总结(14)——结构型模式之代理模式
  13. java毕业设计房屋租赁管理系统Mybatis+系统+数据库+调试部署
  14. OneApiConnect通讯demo,fins欧姆龙协议实现
  15. Java 笔试练习 01: T1~19
  16. 信息安全技术 代码安全审计规范
  17. mac如何安装vue(简单明了)
  18. 古之成大事者必经三境界--王国维《人间词话》
  19. 【数学建模入门】时间序列|山猫数量预测
  20. 驾考:科一知识点总结

热门文章

  1. 梁静茹产后气色好 小手拉大手称好幸福
  2. Romberg(龙贝格)求积公式求解数值积分时的注意事项
  3. c++ vs2015 播放音乐_快捷指令(20)自动化-计时播放指定音乐(三种自动化的应用:短信、iwatch、充电)...
  4. echarts 图例文字添加背景
  5. electron中使用axios网络请求失败404错误
  6. 微博移动版 URL 如何转成电脑网页版 URL?
  7. android关联符号,在Android数据绑定中找不到符号BR
  8. 实时虚拟现实技术理论(课堂笔记六)
  9. 当当api 详情接口
  10. 所有勒索病毒种类收集,谨防中招!