作者: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. 应用程序 mysql 连接_学生信息管理系统之四:实现应用程序与数据库的连接
  2. VTK:可视化之ElevationBandsWithGlyphs
  3. PHP的xdebug安装步骤以及遇到的坑
  4. 西澳大学商科专业排名_澳洲西澳大学优势专业排名多少
  5. 广东职业教育信息化研究会2019年会暨区块链专题研讨会
  6. 关于多线程编程您不知道的 5 件事 有关高性能线程处理的微妙之处
  7. 作者:李海林,博士,华侨大学信息管理系副教授、硕士生导师。
  8. 从Hadoop到ClickHouse,现代BI系统有哪些问题?如何解决?
  9. 0元包邮 | 知识图谱学习导图
  10. 划分字母区间c语言,LeetCode(#763):划分字母区间
  11. PHP安装OPENSSL扩展模块
  12. 南方cass计算表面积_CASS在工程中的应用“计算表面积”的方法
  13. postman本地测试post接口
  14. Java 用NIO实现一个聊天室(多人聊天、单人聊天)
  15. C++重温笔记(一): C++再初识
  16. Oracle sql语句整理合集
  17. WordPress支持ppt一键上传
  18. React——基础(笔记)
  19. RIP协议;OSPF协议;BGP协议
  20. 安卓开发中ToggleButton按钮的使用

热门文章

  1. datagridview固定列宽_C# DataGridView 如何设置列宽
  2. echarts柱状图柱形修改为三角形
  3. 表维护视图的F4增强
  4. 官方的 Share 分享网站
  5. 小米手机系统升级到MIUI8,Android studio真机调试须知
  6. 【经验分享】打开CAD文件提示:图形文件无效
  7. ECharts数据可视化学习笔记和应用
  8. 安卓手机如何投屏到电视上_创维电视怎么投屏?图文讲解安卓和苹果手机投屏到电视方法...
  9. OpenCV3之Mat类的类型type和深度depth
  10. 微信小程序 onReachBottom 上拉滚动到底部加载更多问题