【问题标题】:excel pass cell content to udf as range argumentexcel将单元格内容作为范围参数传递给udf
【发布时间】:2017-12-01 03:38:29
【问题描述】:

我目前正在尝试将单元格的内容作为参数传递给 excel 中的用户定义函数。

也就是说,我计算了我对单元格感兴趣的范围,在那里我得到了类似“sheet1!X17:X37”的内容。

现在我想将此单元格(例如 A1)传递给 udf。例如,我希望在 B1 中使用“=myfunction(A1)”而不是“=myfunction(sheet1!X17:X37)。

有什么想法吗?

我的功能是这样的:

Public Function ConcatItNoDuplicities(ByVal cellsToConcat As Range) As String
    ConcatItNoDuplicities = ""
    If cellsToConcat Is Nothing Then Exit Function
    Dim oneCell As Range
    Dim result As String
    For Each oneCell In cellsToConcat.Cells
        Dim cellValue As String
        cellValue = Trim(oneCell.Value)
        If cellValue <> "" Then
            If InStr(1, result, cellValue, vbTextCompare) = 0 Then _
                result = result & cellValue & ","
        End If
    Next oneCell
    If Len(result) > 0 Then _
        result = Left(result, Len(result) - 1)
    ConcatItNoDuplicities = result
End Function

最好的 T

【问题讨论】:

  • 嗯...也许我遗漏了一些东西,但是一个单元格的串联就是那个单元格,不是吗?所以这和=A1 不一样
  • 实际上 A1 包含我想要连接的范围,我想在我的函数中使用 A1 的内容作为参数,而不是连接 A1。

标签: excel vba user-defined-functions


【解决方案1】:

间接使用:

=ConcatItNoDuplicities(INDIRECT(A1))

【讨论】:

  • 非常感谢!太简单了……不敢相信我花了多少时间。
  • @theodorcarp 请通过单击答案旁边的复选标记将其标记为正确。
【解决方案2】:

另一种方法。

A1 包含看起来像单元格地址的文本。这个小小的 UDF() 对目标进行了简单的连接:

Public Function TakeOneStepBeyond(rng1 As Range) As String
    Dim rng2 As Range, r As Range

    Set rng2 = Range(rng1.Value)

    TakeOneStepBeyond = ""
    For Each r In rng2
        TakeOneStepBeyond = TakeOneStepBeyond & r.Value
    Next r
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    相关资源
    最近更新 更多