Excel 2011 - Как изменить вывод textJoin со значения ячейки на имя ячейки, чтобы я мог поместить его в Sum(), чтобы добавить эти значения

Я использую UDF textJoin, указанный ниже, для объединения значений из разных строк в одну ячейку; он отображает каждое значение. Однако я хочу знать, могу ли я манипулировать выводом этой UDF, чтобы вместо простого отображения значений я мог добавлять значения и получать сумму значений. Или в идеале, если бы я мог просто изменить переменные, чтобы указать ДОБАВИТЬ значения. Кто-нибудь знает, можно ли указать этой UDF (которую я не создавал) для вывода имен ячеек (A2, B2, C2), и если да, то могу ли я поместить этот вывод в функцию Sum(), чтобы он добавил A2 +В2+С2?

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. Кажется, я должен иметь возможность использовать =Sum(textJoin(...)) если я могу получить textJoin для вывода имен ячеек (т.е. C2, C3).

введите здесь описание изображения


person Devil07    schedule 06.07.2017    source источник


Ответы (1)


если вы хотите, чтобы он просто суммировал значения, вы можете добавить что-то подобное в конец 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
person Sorceri    schedule 06.07.2017
comment
Как отредактировать код, чтобы на выходе отображались цифры с точностью до сотых. Например, сейчас он округляется до ближайшего целого числа, так что 20,55 + 10,22 = 31 000. Я хочу округлить до ближайших сотых (т.е. 30,77). Может быть, я должен задать это как вопрос? - person Devil07; 07.07.2017
comment
Они есть. Я попробовал число, валюту и учет и передвинул десятичные дроби. Я думаю, что мне нужно настроить код, чтобы вывести его на сотые места. У него есть информация, потому что он округляет ее правильно. - person Devil07; 07.07.2017
comment
@ Devil07 Замените CLng на CDbl, чтобы преобразовать их в двойные, но обратите внимание, что если значение равно 10 000, Excel удалит десятичные дроби и нули, если числовой формат ячейки не настроен для отображения конечных десятичных знаков. - person Sorceri; 07.07.2017
comment
Я пробовал CDbl и CCur, и ни один из них, похоже, не меняет вывод. Я опубликую как вопрос, чтобы я мог показать скриншот. - person Devil07; 07.07.2017