Excel 2011-如何将textJoin的输出从单元格的值更改为单元格名称,以便将其放入Sum()中添加这些值

Excel 2011-如何将textJoin的输出从单元格的值更改为单元格名称,以便将其放入Sum()中添加这些值,excel,vba,macos,excel-2011,excel-udf,Excel,Vba,Macos,Excel 2011,Excel Udf,我使用下面列出的textJoin UDF将不同行中的值合并到一个单元格中;它显示每个值。但是,我想知道我是否可以操纵这个UDF的输出,这样我就可以添加值并获得值的总和,而不是简单地显示值。或者理想情况下,如果我可以修改变量来指示它添加值。有人知道我没有创建的UDF是否可以被指示输出单元格名称A2、B2、C2,如果可以,我可以将该输出放在Sum函数中,以便它将A2+B2+C2相加吗 Function TEXTJOIN(delim As String, skipblank As Boolean, a

我使用下面列出的textJoin UDF将不同行中的值合并到一个单元格中;它显示每个值。但是,我想知道我是否可以操纵这个UDF的输出,这样我就可以添加值并获得值的总和,而不是简单地显示值。或者理想情况下,如果我可以修改变量来指示它添加值。有人知道我没有创建的UDF是否可以被指示输出单元格名称A2、B2、C2,如果可以,我可以将该输出放在Sum函数中,以便它将A2+B2+C2相加吗

Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
    Dim d As Long
    Dim c As Long
    Dim arr2()
    Dim t As Long, y As Long
    t = -1
    y = -1
    If TypeName(arr) = "Range" Then
        arr2 = arr.Value
    Else
        arr2 = arr
    End If
    On Error Resume Next
    t = UBound(arr2, 2)
    y = UBound(arr2, 1)
    On Error GoTo 0

    If t >= 0 And y >= 0 Then
        For c = LBound(arr2, 1) To UBound(arr2, 1)
            For d = LBound(arr2, 1) To UBound(arr2, 2)
                If arr2(c, d) <> "" Or Not skipblank Then
                    TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
                End If
            Next d
        Next c
    Else
        For c = LBound(arr2) To UBound(arr2)
            If arr2(c) <> "" Or Not skipblank Then
                TEXTJOIN = TEXTJOIN & arr2(c) & delim
            End If
        Next c
    End If
        TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
    End Function
似乎应该有一种方法将单元格值的输出转换为单元格名称,即C2、C3、C4等,然后将整个内容放在Sum函数中,这样就可以简单地将单元格相加。或者,是否有一个函数将放置在函数中的值作为广告,而不是使用单元格名称

我想添加高亮显示的单元格G2。我有10和20的值。似乎我应该能够使用=SumtextJoin。。。如果我能让textJoin输出单元格名称,即C2、C3


如果您希望它只是合计值,那么您可以将类似这样的内容添加到UDF的末尾

    Dim total As Long
    Dim txtPart
    For Each txtPart In Split(TEXTJOIN, delim)
        total = total + CLng(txtPart)       
    Next txtPart
    TEXTJOIN = total
范例

Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
Dim d As Long
Dim c As Long
Dim arr2()
Dim t As Long, y As Long
t = -1
y = -1
If TypeName(arr) = "Range" Then
    arr2 = arr.Value
Else
    arr2 = arr
End If
On Error Resume Next
t = UBound(arr2, 2)
y = UBound(arr2, 1)
On Error GoTo 0

If t >= 0 And y >= 0 Then
    For c = LBound(arr2, 1) To UBound(arr2, 1)
        For d = LBound(arr2, 1) To UBound(arr2, 2)
            If arr2(c, d) <> "" Or Not skipblank Then
                TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
            End If
        Next d
    Next c
Else
    For c = LBound(arr2) To UBound(arr2)
        If arr2(c) <> "" Or Not skipblank Then
            TEXTJOIN = TEXTJOIN & arr2(c) & delim
        End If
    Next c
End If
    TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
    'add the below loop to add each number together
    Dim total As Long
    Dim txtPart
    For Each txtPart In Split(TEXTJOIN, delim)
        total = total + CLng(txtPart)

    Next txtPart
    TEXTJOIN = total
End Function

如何编辑代码以使输出显示百分之一百的数字。例如,现在它四舍五入到最接近的整数,即20.55+10.22=31.000。我想把它四舍五入到最接近的百分之一,即30.77。也许我应该问这个问题?他们是。我尝试了数字、货币和会计,并将小数移到了上面。我想我必须调整代码,把它放到第一百位。它有这个信息是因为它的四舍五入正确。我认为这与此有关。我正在试图找出如何将小数输出到百分之一百。@Devil07将CLng替换为CDbl以将其转换为双精度,但请注意,如果值为10.000,Excel将删除小数,如果单元格的数字格式未设置为显示后面的小数位,则将删除零。我尝试了CDbl和CCur,但两者似乎都没有改变输出。我将以问题的形式发布,这样我可以显示屏幕截图。