MS Excel - Concat with a delimiter

前端 未结 3 1907
忘掉有多难
忘掉有多难 2020-12-17 10:16

I\'ve got a long spreadsheet with numbers.

I need to get them in one string delimited by ; eg. 4364453;24332432;2342432

I know I can do:

=con         


        
相关标签:
3条回答
  • Use TRANSPOSE function:

    =TRANSPOSE(A1:A200)
    

    Select the formula and hit F2 and you will get a long string with a default delimiter ',' which can be replaced with your required delimiter.

    0 讨论(0)
  • 2020-12-17 10:59

    If you're like me and your work computer has an old version of Excel that does not have TEXTJOIN, you can use a macro. Here's something quick I mocked up that will do either a single column or a single row. Just click where you want the resulting string to be placed, then run the macro.

    Note that this will only handle one row or one column, like in your example data. If you wanted to do something like concatenate A1:C3 you'd need different logic.

    Sub ConcatenateRange()
    
    Dim resultCell As Range
        Set resultCell = Selection
    
    Dim concatRange As Range
        Set concatRange = Application.InputBox("Select a range", "Obtain Range Object", Type:=8)
    
    Dim optionalSeparator As String
        optionalSeparator = Chr(34) & InputBox("Any Separator?") & Chr(34)
    
    Dim outputString As String
        outputString = "=TRIM(CONCATENATE("
    
    Dim rangeSize As Integer
        rangeSize = concatRange.Columns.count + concatRange.Rows.count
    
    For Each item In concatRange
        outputString = outputString & item.Address(RowAbsolute:=False, ColumnAbsolute:=False)
    
        rangeSize = rangeSize - 1
    
        If (rangeSize > 1) Then
            outputString = outputString & ", " & optionalSeparator & ", "
        Else
            outputString = outputString & "))"
        End If
    Next
    
    resultCell.formula = outputString
    
    End Sub
    
    0 讨论(0)
  • 2020-12-17 11:02

    Use TEXTJOIN() instead:

    =TEXTJOIN(";",TRUE,A1:A2000)
    

    For those who do not have OFFICE 365 Excel then use this UDF that mimics the TEXTJOIN Function.

    Put this in a module attached to the workbook and use the formula above to call.

    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
    
    0 讨论(0)
提交回复
热议问题