2015-10-10 3 views
-1

У меня есть большой список имен в Excel и вы хотите объединить их по восьмеркам. Пример:Объединить определенное количество строк

 1. Mark 
2. Cindy 
3. Deb 
4. Mary 
5. Bill 
6. Roxy 
7. Bobby 
8. Richard

То, что я хочу, чтобы это выглядело как:

1. Mark Cindy Deb Mary Bill Roxy Bobby Richard 

Пожалуйста, имейте в виду, я делаю это на большой таблицы, так что я хочу в каждой клетке восемь.

+0

http://www.xlorate.com/vba-examples.html#Concatenate – Davesexcel

ответ

0

Если у вас есть все данные в столбце «A» и вы хотите объединить их в столбце «B», здесь у вас есть простой макрокод, который будет группировать его на 8, пока не найдет пустую ячейку.

Sub Macro1()  
i = 1 
    Do Until Cells(i, 1) = "" 
    Cells(i, 2) = Cells(i * 8 - 7, 1) & " " & Cells(i * 8 - 6, 1) & " " & Cells(i * 8 - 5, 1) & " " & Cells(i * 8 - 4, 1) & " " & _ 
     Cells(i * 8 - 3, 1) & " " & Cells(i * 8 - 2, 1) & " " & Cells(i * 8 - 1, 1) & " " & Cells(i * 8 - 0, 1) 

    i = i + 1 
    Loop 
End sub 
-1

Вы пробовали формулы массива? Звучит идеально для вашей ситуации. Объедините его с CONCATENATE, и было бы легко достичь решения.

Некоторые образцы здесь:

https://support.office.com/en-us/article/Guidelines-and-examples-of-array-formulas-7d94a64e-3ff3-4686-9372-ecfd5caa57c7

+0

извините, Я сделал ошибку. Возможно, возможно использование некоторых макросов, потому что функция concatenate не может конкатенировать матрицу. Если вы не хотите писать собственный макрос, вы можете использовать и надстройку, которая добавляет функцию MCONCAT в Excel. Yoy можно проверить здесь: http://www.mrexcel.com/forum/excel-questions/365691-concatenate-multiple-cells-array-formula.html – Tomamais

0

Предполагая, что Mark в A2, пожалуйста, попробуйте в row2, скопирована вниз костюм:

=IF(INT((ROW()-2)/8)<>INT((ROW()-3)/8),OFFSET(A2,0,)&" "&OFFSET(A2,1,)&" "&OFFSET(A2,2,)&" "&OFFSET(A2,3,)&" "&OFFSET(A2,4,)&" "&OFFSET(A2,5,)&" "&OFFSET(A2,6,)&" "&OFFSET(A2,7,),"") 

Если это устраивает, то вы можете выбрать результаты, Копировать, Вставить специальные ..., Значения сверху, а затем привести в порядок.

0

Как вы включили VBA я предлагаю этот код:

Это имеет то преимущество, что он может быть установлен ярлык активирован макрос, и пользователи могут обеспечить начальную ячейку списка в момент инициирования макрокоманды. Существует также возможность жесткого кода начальной ячейки в коде (см. Комментарии в коде).

Sub List_Combine_By() 
Const kBy As Byte = 8 
Dim CllSource As Range 
Dim sNames As String 
Dim lIn As Long, lOut As Long 
Dim b As Byte 

    Rem USE THIS LINE IF ACTIVATED BY A SHORTCUT 
    Rem Users provide Starting Cell 
    Set CllSource = Selection.Cells(1) 

    Rem OTHERWISE USE THIS LINE TO DEFINE THE STARTING CELL 
    'Set CllSource = Range("B3") 

    With CllSource 
     lOut = 0 
     For lIn = 1 To .Worksheet.Rows.Count Step 8 

      Rem Validate for Completness 
      If .Cells(lIn, 1).Value2 = Empty Then Exit For 

      Rem Clear Prior Results 
      .Offset(lOut, 2).Resize(8, 1).ClearContents 

      Rem Concatenate Names By 
      sNames = Empty 
      For b = 1 To kBy 
       sNames = sNames & " " & .Cells(-1 + lIn + b, 1).Value2 
      Next 

      Rem Write Results 
      .Offset(lOut, 2).Value = sNames 
      lOut = 1 + lOut 

    Next: End With 

End Sub 
0

Если имена начинаются в A1, попробуйте это, начиная с B1 и скопирована вниз: -

=INDEX(A:A,ROWS(A1:A$1)*8-7)&" "&INDEX(A:A,ROWS(A1:A$1)*8-6)&" "&INDEX(A:A,ROWS(A1:A$1)*8-5)&" "&INDEX(A:A,ROWS(A1:A$1)*8-4)&" "&INDEX(A:A,ROWS(A1:A$1)*8-3)&" "&INDEX(A:A,ROWS(A1:A$1)*8-2)&" "&INDEX(A:A,ROWS(A1:A$1)*8-1)&" "&INDEX(A:A,ROWS(A1:A$1)*8) 
Смежные вопросы