Search code examples
vbaexcelexcel-formulaexcel-2013

TextJoin UDF For Excel 2013


I am trying to utilize a UDF version of TextJoin since I am using Excel 2013 - but this function is not properly returning the accurate data.

My data-set in Excel looks like this

saleID      Item
5           PRE2323
6           Pre2323223
6           OX12321
6           RI132
9           TN23
9           LSR12

And my desired output is

saleID     Items
5          Pre2323
6          Pre2323223, OX12321, RI132
9          TN23, LSR12

And this is the UDF I Have that is not functioning as it should

    Option Explicit
Function TEXTJOIN(delimiter As String, ignore_empty As String, ParamArray textn() As Variant) As String
    Dim i As Long
    For i = LBound(textn) To UBound(textn) - 1
        If Len(textn(i)) = 0 Then
            If Not ignore_empty = True Then
                TEXTJOIN = TEXTJOIN & textn(i) & delimiter
            End If
        Else
            TEXTJOIN = TEXTJOIN & textn(i) & delimiter
        End If
    Next
    TEXTJOIN = TEXTJOIN & textn(UBound(textn))
End Function

And I am calling it in the cell like this

=TEXTJOIN(", ",1,INDEX(REPT(B$2:B$100,A$2:A$100=ROWS(C$2:C2)),0))

And I get an error of #VALUE!


Solution

  • If your data is in columns A and B, this code should work.

    Sub TEXTJOIN()
    Dim i As Long, str As String, k As Long
    Columns("A:B").Sort key1:=Range("A2"), order1:=xlAscending, Header:=xlYes
    str = Cells(2, 2)
    k = 2
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        If Cells(i, 1) = Cells(i + 1, 1) Then
            str = str & "," & Cells(i + 1, 2)
        Else
            Cells(k, 4) = Cells(i, 1)
            Cells(k, 5) = str
            k = k + 1
            str = Cells(i + 1, 2)
        End If
    Next i
    End Sub
    

    enter image description here

    I leave the part to you to convert this to an UDF.