![2e119cc0f64eb106560a43421e17dd3c.png](https://i-blog.csdnimg.cn/blog_migrate/3e2d4237f5f2bbeef1a15f0e5f05c28f.jpeg)
今天好友向我求助,让我这个Excel大神(误)帮他把颜色代码全部以可视化的形式展现出来
我说你自己去网站查颜色不就好了?
他说有几千个呢……几千个………………
emmmmmmm……
好吧,本着“你不会去查百度啊”的精神,这种需求不可能只有他才需要
所以给了他关键字,让自生自灭去了
还真给找着了
![2fd55dd6319b764becde3154bdd75c71.png](https://i-blog.csdnimg.cn/blog_migrate/0cccf2a74e5407844425430ab52d05e0.png)
于是我简单的看了一下这个答案……好吧,只能说这名网友是有根基的,但是对色彩貌似并没有什么概念,按RGB格式排列的AF0000怎么可能会呈现蓝色呢……
对,像极了我的一个下属,写完代码编译没报错就告诉我“老大这个做好了”然后内测的时候全是错的……
![1a440f50245dc4c26a2719cbbd47230e.png](https://i-blog.csdnimg.cn/blog_migrate/d238cf803291eb1b3501f350a8f20cc3.jpeg)
![0794ff5ef7a586cf8fca6009f1f68293.png](https://i-blog.csdnimg.cn/blog_migrate/c5789b0c82db4aa8baceb11ea4cb8e77.jpeg)
接下来进入正题
Excel的颜色标记并不是我们平时使用的RGB,而是BGR
这就意味着我们平时所熟知的纯红色#FF0000在EXCEL中被识别为了纯蓝色,而#0000FF也对应变成了纯红色。
所以在EXCEL中进行颜色标记时,需要把三原色的位置对调过来。
将宏代码改为使用RGB的方式进行排列
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then '获取第一列的值
For Each cell In Target
If cell = "" Then
cell.Offset(0, 2).Interior.Pattern = xlNone 'Offset(单元格行偏移(Y轴), 单元格列偏移(X轴)),当第一列无有效值时设置为无底色
Exit Sub
Else
'以RGB的格式进行获取,固定六位数以每两位进行截断并转换为对应的十进制,就可以以平时的RGB形式展现
cell.Offset(0, 2).Interior.Color = RGB(Application.Hex2Dec(Mid(cell, Len(cell) - 5, 2)), Application.Hex2Dec(Mid(cell, Len(cell) - 3, 2)), Application.Hex2Dec(Right(cell, 2)))
End If
Next
End If
End Sub
最后呈现效果
![1b6bd0dda0f26f71a68d51cdfcae7ef4.png](https://i-blog.csdnimg.cn/blog_migrate/1a5f75f881c99a74f388efbfaa01fd71.jpeg)
如果有尝试不成功的,来找我
原百度提问
excel中颜色16进制转换为rgb,单元格底色变为该颜色_百度知道zhidao.baidu.com![7a1e3de34729726229781c115909d1f8.png](https://i-blog.csdnimg.cn/blog_migrate/e2e08b55f13d1271fe3f3c84885d75e8.png)