在vba excel中使用udf用于多个单元格

时间:2014-08-05 11:48:33

标签: excel vba

我在excel中使用的用户定义函数

Function Hex2RGB(hex As String) As String

    Red = Val("&H" & Mid(hex, 1, 2))
    Green = Val("&H" & Mid(hex, 3, 2))
    Blue = Val("&H" & Mid(hex, 5, 2))

  Debug.Print RGB(Red, Green, Blue)
    Hex2RGB = RGB(Red, Green, Blue)

End Function

我有一个10倍10矩阵的工作表,该函数需要用于该范围内的每个单元格。必须有一些方法,我不必点击每个单元格并手动输入= Hex2RGB("值")? 当我写价值时,我指的是像OD62A2 ......这是颜色而不是以excel格式转换

2 个答案:

答案 0 :(得分:0)

使用范围参数代替值,如下所示。手动将函数设置为第一个单元格(例如矩阵中的左上单元格),然后将其复制并粘贴到矩阵中 - 范围将更改

Public Function Hex2RGB(r As Range) As String
    Dim hex As String: r.Value
    Red = Val("&H" & Mid(hex, 1, 2))
    Green = Val("&H" & Mid(hex, 3, 2))
    Blue = Val("&H" & Mid(hex, 5, 2))

  Debug.Print RGB(Red, Green, Blue)
    Hex2RGB = RGB(Red, Green, Blue)

End Function

答案 1 :(得分:0)

第1步:添加以下宏。这个宏将迭代所选范围内的单元格,并根据自己的值替换它们,我认为这是你想要做的。

Sub GetHexValues()
    Dim rng as Range
    Dim cl as Range
    Set rng = Range(Selection.Address)
    For each cl in rng.Cells
        cl.Formula = "=Hex2RGB(" & Chr(34) & cl.Value & Chr(34) & ")"
    Next
End Sub

第2步确保您的功能是:

Public Function Hex2RGB(hex) As String
    Red = Val("&H" & Mid(hex, 1, 2))
    Green = Val("&H" & Mid(hex, 3, 2))
    Blue = Val("&H" & Mid(hex, 5, 2))

    Debug.Print RGB(Red, Green, Blue)
    Hex2RGB = RGB(Red, Green, Blue)

End Function

第3步: 选择矩阵范围。 (注意:通常我建议不要使用Select但是作为用户输入的一种方式,我认为这样做是可以的。)

一般来说,没有办法使用UDF工作表函数以您描述的方式操作一系列单元格。 UDF通常不能改变单元格/范围的许多属性和值,除了调用该函数的单元格。这是为了避免循环引用/等。 (这个限制有变通方法,但通常接受的规则是使用子程序来操作工作表对象。)