CONCATENATE и ЕСЛИ функциональные проблемы - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь взять столбец данных, который содержит либо информацию о курсе (с текстом), либо просто число 0, и объединить значения, которые НЕ равны 0 из этого столбца, ТОЛЬКО в одну ячейку на другой вкладке.

Пример:

[*COLUMN A*]
COURSE B8001
COURSE B8002
0
0
COURSE B8003

^ Я хочу взять этот столбец ...
и превратить его в этот ...

Ячейка 1: COURSE B8001, COURSE B8002, COURSE B8003(все в одном столбце, только в одной ячейке)

Я использую сцепление, и если функции бесполезны, и я застрял.

Ценю любую помощь

1 Ответ

0 голосов
/ 13 февраля 2019

Если у вас Office 365 Excel, вы можете использовать эту формулу массива:

=TEXTJOIN(",",TRUE,IF(A1:A100<>0,A1:A100,""))

Будучи формулой массива, ее необходимо подтвердить с помощью Ctrl-Shift-Enter вместо Enter при выходе из режима редактирования


Если у вас нет Office 365 Excel, вам понадобится вспомогательный столбец или vba.

Помощник, поместите его в B1 и перетащите длину данных:

=IF(A1<>0,A1&","&B2,B2)

И ваше каскадное утверждение появится в B1

vba. Поместите это в модуль, прикрепленный к книге:

Function TEXTJOINIFS(rng As Range, delim As String, ParamArray arr() As Variant)
    Dim rngarr As Variant
    rngarr = Intersect(rng, rng.Parent.UsedRange).Value

    Dim condArr() As Boolean
    ReDim condArr(1 To Intersect(rng, rng.Parent.UsedRange).Rows.Count) As Boolean


    Dim i As Long
    For i = LBound(arr) To UBound(arr) Step 2
        Dim colArr() As Variant
        colArr = Intersect(arr(i), arr(i).Parent.UsedRange).Value
        Dim j As Long
        For j = LBound(colArr, 1) To UBound(colArr, 1)

            If Not condArr(j) Then
                Dim charind As Long
                charind = Application.Max(InStr(arr(i + 1), ">"), InStr(arr(i + 1), "<"), InStr(arr(i + 1), "="))
                Dim opprnd As String
                If charind = 0 Then
                    opprnd = "="
                Else
                    opprnd = Left(arr(i + 1), charind)
                End If
                Dim t As String
                t = """" & colArr(j, 1) & """" & opprnd & """" & Mid(arr(i + 1), charind + 1) & """"
                If Not Application.Evaluate(t) Then condArr(j) = True
            End If
        Next j
    Next i

    For i = LBound(rngarr, 1) To UBound(rngarr, 1)
        If Not condArr(i) Then
            TEXTJOINIFS = TEXTJOINIFS & rngarr(i, 1) & delim
        End If
    Next i

    TEXTJOINIFS = Left(TEXTJOINIFS, Len(TEXTJOINIFS) - Len(delim))

End Function

Затем назовите его как SUMIFS:

=TEXTJOINIFS(A:A,",",A:A,"<>0")

enter image description here

...