首页 > 解决方案 > 如何使 Excel 用户定义函数 (UDF) 接受字符串类型和范围类型的参数?

问题描述

我正在尝试创建一个函数do_something_to_string(one_arg),其中 one_arg 可以是字符串类型或范围。

在范围的情况下,我想将该范围的每个单元格连接成一个长字符串,但要进行处理。但我似乎无法制作一个可以接受字符串或 Range 作为参数的函数。

标签: excelvba

解决方案


使用可选参数或变体:

Function MyFunction1(Optional Str As String, Optional Rng As Range) As String
    Dim C As Range, S As String
    If Rng Is Nothing Then
        MyFunction1 = Str
    Else
        S = ""
        For Each C In Rng
            S = S & CStr(C.Value)
        Next
        MyFunction1 = S
    End If
End Function

Function MyFunction2(V As Variant) As String
    Dim C As Range, S As String
    If VarType(V) = vbString Then
        MyFunction2 = V
    ElseIf TypeName(V) = "Range" Then
        S = ""
        For Each C In V
            S = S & CStr(C.Value)
        Next
        MyFunction2 = S
    Else
        Err.Raise 13, , "The argument must be a String or a Range."
    End If
End Function

然后尝试:

Debug.Print MyFunction1("test")
Debug.Print MyFunction1(, Range("A1:B3"))
Debug.Print MyFunction2("test")
Debug.Print MyFunction2(Range("A1:B3"))

推荐阅读