2017-02-10 6 views
0

У меня длинная электронная таблица с числами.MS Excel - Конкат с разделителем

Мне нужно получить их в одной строке, ограниченной; например. 4364453; 24332432; 2342432

Я знаю, что я могу сделать:

=concat(A1:A2000) 

но это будет объединить его в одну строку без разделителей - я не могу найти вариант для разделителя при указании ассортимент.

Спасибо

+0

Какую версию Excel вы используете? – CallumDA

+0

Последнее для Office365 для образования - я думаю, что это версия 2016 года. – Wasteland

ответ

3

Используйте TEXTJOIN() вместо:

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

Для тех, кто не имеет OFFICE 365 Excel затем использовать эту пользовательскую функцию, которая имитирует TEXTJOIN функции.

Поместите это в модуль, прикрепленный к книге, и используйте приведенную выше формулу для вызова.

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 
    TEXTJOIN2 = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim)) 
End Function 
+0

Это сделало трюк. Спасибо – Wasteland

0

Если вы похожи на меня, и рабочий компьютер имеет старую версию Excel, которая не имеет TEXTJOIN, вы можете использовать макрос. Вот что-то быстрое, что я издевался над тем, что будет делать либо один столбец, либо одну строку. Просто нажмите, где вы хотите, чтобы результирующая строка была помещена, затем запустите макрос.

Обратите внимание, что это будет обрабатывать только одну строку или один столбец, как в ваших данных примера. Если вы хотите сделать что-то вроде concatenate A1: C3, вам понадобится другая логика.

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 
+1

Если OP имеет CONCAT(), тогда OP имеет TEXTJOIN(), когда они выходили в одно и то же время. –

+0

Вы уверены? Я нахожусь на своем рабочем компьютере, и у меня определенно есть CONCATENATE в Excel 2010, но у меня нет TEXTJOIN – Joe

+0

CONCAT <> CONCATENATE - это две разные функции. –