龙空技术网

更新:Excel VBA 自定义函数/根据颜色名称中英文取得颜色值/

Excel活学活用 124

前言:

而今各位老铁们对“二值代码”大约比较注意,你们都需要分析一些“二值代码”的相关知识。那么小编同时在网摘上汇集了一些有关“二值代码””的相关知识,希望看官们能喜欢,兄弟们快快来学习一下吧!

本文于2023年3月7日首发于本人同名公众号:Excel活学活用,敬请关注!

前天分享了一篇Excel VBA 自定义函数/取得颜色值/GetColor/ChatGPT来帮忙,由于时间匆忙,未及仔细推敲,今天发现还是有点问题,主要是颜色名称不全,还有就是觉得这么多颜色,用字典的方式会不会影响速度?有没有其他办法?

于是,今天花了一点时间,进一步完善了一下,重新分享给大家。

主要更新有:

1、颜色数量,相对较全

2、自定义函数代码修改:

(1)增加一张“颜色表",存放颜色名称与值

(2)在代码中增加是否存在“颜色表“的判断,如果存在,则读取内容到数组,在数组中匹配颜色名称与值,否则,将一批颜色与名称的值加入字典,再从字典中查找匹配。如上图所示,两者的速度还是有点差距的。

主要代码如下:

在模块1:

Function ColorByName(colorName As String) As Long    Dim colorDict As Object    Dim ColortableExists As Boolean    Set colorDict = CreateObject("Scripting.Dictionary")    Dim Sht As Worksheet    Dim arrColor()    Dim iRow As Integer    For Each Sht In ThisWorkbook.Worksheets        If Sht.Name = "颜色表" Then             ColortableExists = True            Exit For        End If     Next    If ColortableExists Then        iRow = Sheets("颜色表").UsedRange.Rows.Count           arrColor = Sheets("颜色表").Range("A1:C" & iRow).Value            For i = 1 To iRow            If LCase(arrColor(i, 1)) = LCase(colorName) Then                ColorByName = arrColor(i, 3)                Exit For            End If            ColorByName = RGB(255, 255, 255)        Next    Else         '中文颜色名称        colorDict("爱丽丝蓝") = RGB(240, 248, 255)        colorDict("爱丽丝蓝色") = RGB(240, 248, 255)        colorDict("暗板岩蓝") = RGB(72, 61, 139)        colorDict("暗板岩蓝色") = RGB(72, 61, 139)        colorDict("暗淡灰") = RGB(105, 105, 105)        colorDict("暗淡灰色") = RGB(105, 105, 105)        colorDict("暗橄榄绿") = RGB(85, 107, 47)        colorDict("暗橄榄绿色") = RGB(85, 107, 47)        colorDict("暗海洋绿") = RGB(143, 188, 143)        colorDict("暗海洋绿色") = RGB(143, 188, 143)        colorDict("暗黄褐") = RGB(189, 183, 107)        colorDict("暗黄褐色") = RGB(189, 183, 107)        colorDict("暗灰蓝") = RGB(72, 61, 139)        ......        colorDict("Yellow") = RGB(255, 255, 0)        colorDict("YellowGreen") = RGB(154, 205, 50)        colorName = LCase(colorName)        For Each dictKey In colorDict.keys            If LCase(dictKey) = colorName Then                ColorValue = colorDict(dictKey)                Exit For            End If            ColorValue = RGB(255, 255, 255)         '如果没有则为白色        Next           ColorByName = ColorValue    End If End Function

这里有个对工作表是否存在的判断,可以单独列出来作为一个自定义函数来用,另外,加入字典的颜色以“整理”这张表为准,有新的颜色需要添加的,可以在“颜色表“中相应添加,注意第3列颜色值。

这份文件也可以作为一个颜色对照表来使用。

这个自定义函数也许没有太多的实际意义,你有一张颜色值对照表就可以了,按图索骥。但其中的一些写代码的方法与思路还是有点用处的。比如生成添加到字典的字符串,如果不用代码,几百条记录一条一条输入的话,效率太差,准确性也得不到保证,希望能对你有所帮助。

其他不多说了,请自行探索,有疑问与建议请留言。文件下载地址:

链接: 提取码:eodd

本文于2023年3月7日首发于本人同名公众号:Excel活学活用,敬请关注!

标签: #二值代码