Як об'єднати рядки в стовпці в одну комірку в Excel?


81

Напр

A1:I
A2:am
A3:a
A4:boy 

Я хочу об'єднати їх усі в одну комірку "Iamaboy".
Цей приклад показує, як 4 комірки об'єднуються в 1 комірку, однак у мене багато комірок (більше 100), я не можу вводити їх одну за одною, використовуючи A1 & A2 & A3 & A4те, що я можу зробити?


Чи всі вони у вертикальних групах по 4 особи? або ви хочете, щоб усі стовпці A були в одній комірці?
Alex K.

Чи можемо ми відредагувати це запитання, щоб також містити тег Excel-VBA, враховуючи прийняту відповідь у VBA? Крім того, такі запитання задаються постійно, і я хотів би позначити їх як дублікати, оскільки тут є відповідь.
bonCodigo

Відповіді:


87

Я представляю вам свою функцію ConcatenateRange VBA (дякую Жану за пораду щодо іменування!). Це займе діапазон комірок (будь-якого виміру, будь-якого напрямку тощо) і об’єднає їх у єдиний рядок. Як необов’язковий третій параметр, ви можете додати розділювач (наприклад, пробіл або сереровані коми).

У цьому випадку ви б написали це, щоб використати його:

=ConcatenateRange(A1:A4)

Function ConcatenateRange(ByVal cell_range As range, _
                    Optional ByVal separator As String) As String

Dim newString As String
Dim cell As Variant

For Each cell in cell_range
    If Len(cell) <> 0 Then
        newString = newString & (separator & cell)
    End if
Next

If Len(newString) <> 0 Then
    newString = Right$(newString, (Len(newString) - Len(separator)))
End If

ConcatenateRange = newString

End Function

2
Це не потрібно, хоча функціонального простого додавання = A1 & A2 & A3 & A4 буде достатньо, а додавання A1 & "" & A2 & "" & A3 & "" & A4 дасть вам простір між значеннями кожної комірки.
Michael Eakins

3
+1, але я б назвав це ConcatenateRange! Дурна CONCATENATEфункція Excel не приймає діапазон як вхідні дані, лише перелік окремих комірок як окремі аргументи ...
Жан-Франсуа Корбетт

10
Дякую Жан! Я прийняв вашу пропозицію! Майкл, ти пропустив сенс - робити це для сотень комірок нудно і безглуздо.
aevanko

1
ALl вам потрібно зробити це "= CocatenateRange (A1: A10, CHAR (10))", передавши CHAR (10), ви передаєте новий символ рядка. :)
aevanko

1
Чудові речі. Змінено, Else newString = newString & (separator & Space(1))оскільки мені потрібно зберегти фіксовану ширину в моєму результуючому рядку.
Сер Криспалот,

149

Якщо ви віддаєте перевагу робити це без VBA, ви можете спробувати наступне:

  1. Зберігайте свої дані в комірках A1: A999 (або такі)
  2. Встановіть для комірки B1 значення "= A1"
  3. Встановіть для комірки B2 значення "= B1 & A2"
  4. Скопіюйте комірку B2 аж до B999 (наприклад, скопіювавши B2, виділивши комірки B3: B99 і вставивши)

Осередок B999 тепер міститиме зв’язаний текстовий рядок, який ви шукаєте.


2
Якщо ви хочете скопіювати значення: - Скопіюйте (ctrl + c) останню комірку (B999), клацніть порожню комірку та на вкладці Домашня сторінка, у групі Буфер обміну, під піктограмою Вставити натисніть Вставити значення.
Канішка

9
Це марнотратно, але якось блискуче!
BH

14
Це зовсім не марнотратно для одноразової роботи (якою зазвичай є такі запитання). Це шлях, тому що він дозволяє побачити, що відбувається, плюс ви можете в подальшому легко змінити операцію приєднання (додати роздільники тощо). Для одноразових робіт VBA - це все одно, що зламати гайку кувалдою.
PeerBr

1
Це не працює з великими наборами даних. (Немає пам’яті)
Даніель

1
Це геній.
шукач

42

Усередині CONCATENATEви можете використовувати, TRANSPOSEякщо розгорнути його ( F9), а потім видалити навколишні {}дужки, як це рекомендується

=CONCATENATE(TRANSPOSE(B2:B19))

Стає

=CONCATENATE("Oh ","combining ", "a " ...)

КОНКАТЕНАТ (ПРОЗОРИТИ (B2: B19))

Можливо, вам доведеться додати власний роздільник в кінці, скажімо, створіть стовпець C і транспонуйте цей стовпець.

=B1&" "
=B2&" "
=B3&" "

2
UpПроголосуйте за вигадливу ілюстрацію .gif
N_E

24

У простих випадках ви можете використовувати наступний метод, який не вимагає створення функції або копіювання коду в кілька комірок:

  1. У будь-яку комірку напишіть наступний код

    =Transpose(A1:A9) 
    

Де A1: A9 - це комірки, які ви хотіли б об’єднати.

  1. Не виходячи з преса клітини F9

Після цього клітинка буде містити рядок:

={A1,A2,A3,A4,A5,A6,A7,A8,A9}

Джерело: http://www.get-digital-help.com/2011/02/09/concatenate-a-cell-range-without-vba-in-excel/

Оновлення: одна частина може бути неоднозначною. Не виходити з комірки означає, що ваша комірка знаходиться в режимі редактора. Крім того, ви можете натиснути F9, перебуваючи в панелі редактора комірок (зазвичай це можна знайти над таблицею)


Що б це не було, це була акуратна ідея, однак у мене це не працювало. Я припускаю, що в моєму тексті було багато спеціальних символів, він не поєднав їх у правильний результат. Я закінчив вручну набирати a1 & b1 & c1 & ......
Кріс Марісіч

1
Кріс, дивною частиною цього рішення є те, що перед натисканням клавіші F9 ти повинен залишатись зосередженим на клітині. І під "тримати фокус" я маю на увазі те, що ви редагуєте курсор редактора та зможете продовжувати друкувати текст.
y.selivonchyk

1
Натискання F9 не працює на Mac версії Excel.
Адам Еберлін,

15

Використовуйте вже існуючу Joinфункцію VBA . Функції VBA не доступні в Excel, тому я обгортаю Joinвизначену користувачем функцію, яка забезпечує її функціональність. Найпростіша форма:

Function JoinXL(arr As Variant, Optional delimiter As String = " ")
    'arr must be a one-dimensional array.
    JoinXL = Join(arr, delimiter)
End Function

Приклад використання:

=JoinXL(TRANSPOSE(A1:A4)," ") 

введено як формулу масиву (з використанням Ctrl- Shift- Enter).

введіть тут опис зображення


Тепер JoinXLприймає лише одновимірні масиви як вхідні дані. В Excel діапазони повертають двовимірні масиви. У наведеному вище прикладі TRANSPOSEперетворює двовимірний масив 4 × 1 у одновимірний масив із 4 елементів (це задокументована поведінка, TRANSPOSEколи він подається одновимірним двовимірним масивом).

Для горизонтального діапазону вам доведеться зробити подвійне TRANSPOSE:

=JoinXL(TRANSPOSE(TRANSPOSE(A1:D1)))

Внутрішній TRANSPOSEперетворює двовимірний масив 1 × 4 у двовимірний масив 4 × 1, який зовнішній TRANSPOSEпотім перетворює в очікуваний 4-елементний одновимірний масив.

введіть тут опис зображення

Це використання TRANSPOSE- добре відомий спосіб перетворення 2D-масивів у 1D-масиви в Excel, але це виглядає жахливо. Більш елегантним рішенням було б приховати це у функції JoinXLVBA.


1
У великій таблиці ця функція набагато швидша, ніж функція @aevanko.
Ricidleiv Tondatto

9

Для тих, хто має Excel 2016 (і я припускаю наступні версії), тепер існує безпосередньо функція CONCAT , яка замінить функцію CONCATENATE .

Тож правильний спосіб зробити це в Excel 2016:

=CONCAT(A1:A4)

який дасть:

Я хлопець

Для користувачів старших версій Excel інші відповіді актуальні.


1
У мене встановлений Office 2016 ProPlus для Windows, і CONCATфункція
НІЯКА

Microsoft заявляє, що CONCAT доступний в Excel 365 та 2019: support.microsoft.com/en-us/office/…
Рей Вудкок,

4

Для Excel 2011 на Mac все інше. Я зробив це як триступеневий процес.

  1. Створіть стовпець значень у стовпці А.
  2. У стовпці B, праворуч від першої комірки, створіть правило, яке використовує функцію конкатенати для значення стовпця та ",". Наприклад, якщо припустити, що A1 є першим рядком, формула для B1 є =B1. Для наступного рядка до рядка N формула =Concatenate(",",A2). У підсумку ви отримаєте:
QA
, Секулі
, Тестування
, Applitools
, Візуальне тестування
, Автоматизація тестів
, Селен
  1. У стовпці C створіть формулу, яка об'єднує всі попередні значення. Оскільки це добавка, ви отримаєте все в кінці. Формула для клітини С1 така =B1. Для всіх інших рядків до N формула має формулу =Concatenate(C1,B2). І ви отримуєте:
QA, Секулі
QA, Sekuli, Тестування
QA, Sekuli, Testing, Applitools
QA, Sekuli, тестування, Applitools, візуальне тестування
QA, Sekuli, тестування, Applitools, візуальне тестування, автоматизація тестів
QA, Sekuli, тестування, Applitools, візуальне тестування, автоматизація тестів, селен

Останньою коміркою списку буде те, що ви хочете. Це сумісно з Excel у Windows або Mac.


можна об’єднати три значення в одній формулі. У мене є значення в стовпці A, B1 - це копія A1 і B2 з формулою типу =CONCATENATE(B1;",";A2). Потім вам потрібно перетягнути праву крапку вниз у клітинку для всіх рядків, і результатом буде останнє значення
oleksa

2

Я використовую CONCATENATEметод, щоб взяти значення стовпця і обернути навколо них лапки зі стовпцями між ними, щоб швидко заповнити WHERE IN ()речення оператора SQL.

Я завжди просто набрати , =CONCATENATE("'",B2,"'",",")а потім вибрати , що і перетягніть його вниз, що створює =CONCATENATE("'",B3,"'",","), =CONCATENATE("'",B4,"'",",")і т.д. , то виділіть всю цю колонку, скопіюйте вставити в текстовий редактор і вставити назад , якщо це необхідно, таким чином , позбавивши поділ рядків. Це працює, але знову ж таки, як одноразова угода, це не є гарним рішенням для тих, хто постійно потребує цього.


0

Я знаю, що це справді давнє запитання, але я намагався зробити те саме, і натрапив на нову формулу в Excel, яка називається "TEXTJOIN".

Для питання наступна формула вирішує проблему

=TEXTJOIN("",TRUE,(a1:a4))

Підпис "TEXTJOIN" пояснюється як TEXTJOIN (роздільник, ignore_empty, text1, [text2], [text3], ...)


Microsoft заявляє, що TEXTJOIN доступний для Excel 365 і 2019: support.microsoft.com/en-us/office/…
Рей Вудкок,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.