Как объединить ячейки в excel с разделителем
Перейти к содержимому

Как объединить ячейки в excel с разделителем

Как объединить ячейки в Excel (простые способы)

Работа с Excel все-таки несколько отличается от других программ: в нем нельзя так просто взять и объединить несколько ячеек в одну (что бывает очень необходимо при редактировании некоторых документов). Иногда, начинающих пользователей это ставит в тупик.

Вообще, большинство типовых задач в Excel решается с помощью простых формул, в которых не сложно разобраться. И в этой заметке я попробую привести максимально наглядные примеры по объединению ячеек (рассмотрю два варианта: когда ячейки пустые, и когда в них уже есть данные).

Примечание : сразу хочу отметить, что описанные ниже способы и примеры актуальны для современных версий Excel 2013, 2016, 2019 г.

Кстати, для тех у кого нет современной версии Excel — могу порекомендовать воспользоваться его онлайн-версией: https://ocomp.info/chem-zamenit-word-i-excel.html

Способы объединения ячеек в Excel

Если ячейки пустые

Также эти способы будут актуальны, если данные в объединяемых ячейках вам не нужны.

Способ 1

И так, чтобы наиболее быстро и просто объединить любое количество ячеек, необходимо:

  • выделить мышкой нужные из них (в своем примере я выделил A1, B1, C1 и D1);
  • в разделе "Главная" нажать по инструменту "Объединить ячейки" , см. скриншот ниже.

Выделение и объединение ячеек (Excel 2019)

В эту же секунду ячейки станут объединенными ( примечание : кстати, если у вас были какие-то данные в них — то всё это удалится, кроме данных из ячейки A1) .

Задача выполнена

Обратите внимание, что ячейки можно объединять не только по горизонтали, но и по вертикали. Делается это аналогично!

Способ 2

Если на панели инструментов Excel вы не находите нужной кнопки (опции) — эту задачу можно выполнить иначе:

  • сначала также выделите необходимые ячейки;
  • затем кликните по выделенной области правой кнопкой мышки и в появившемся меню откройте пункт "Формат ячеек" .

Формат ячеек

Далее перейдите во вкладку "Выравнивание" и поставьте галочку рядом с функцией "Объединение ячеек" . Нажмите OK.

Вкладка выравнивание

Как видите на скрине ниже — задача успешно решена (и этот способ вполне рабочий, правда, вынуждает сделать 1-2 "лишних" клика мышкой) .

Задача выполнена - ячейки слиты

Задача выполнена — ячейки слиты

Если в ячейках есть данные (которые также нужно объединить)

Важная ремарка : при объединении ячеек мы будем не суммировать их содержимое, а "склеивать" (сцеплять) между собой. Т.е. если у вас в одной ячейке приводится имя, а в другой фамилия — после объединения будет одна строка с именем и фамилией; если в одной ячейке цифра "5", а в другой "3" — после объединения будет "53" (а не как при сумме: "8") .

Способ 1

В качестве примера взял список ФИО нескольких вымышленных персонажей. Задача, кстати, вполне приближена к жизни (приходилось с этим сталкиваться).

Исходные данные

Сначала необходимо выбрать одну из ячеек напротив первой строки (я взял E1) и написать в строке формул следующее выражение:

Пишем спец. формулу (СЦЕПИТЬ)

Пишем спец. формулу (СЦЕПИТЬ)

После того, как нажмете Enter, формула сцепит все перечисленные ячейки в ней. В моем случае получилось ФИО, но без пробелов (что ни есть удобно).

Для того, чтобы исправить это, просто измените частично формулу (добавьте кавычки с пробелом, как в моем примере) :

Если вам нужны пробелы (или другие символы) между объединенными данными — корректируем формулу

Разумеется, вместо пробела в кавычках можно поставить любой другой символ (дефис, например).

После, останется только растянуть формулу на другие строки, и задача будет решенной.

Растягиваем формулу на другие строки

Растягиваем формулу на другие строки

Как перенести склеенные данные в другой документ (чтобы они не зависели от формул)

Наши сцепленные строки в этом документе зависят от формул, и если слегка их изменить — то все "разъедется". В ряде случае гораздо удобнее работать не с ними, а с текстовыми строками. Попробуем перенести наши результаты в другой документ (или новый лист).

И так, сначала необходимо выделить наши сцепленные ячейки (в моем примере это столбец "E"), нажать правой кнопкой мышки по ним и выбрать функцию "Копировать" .

Копировать

Далее открыть новый документ (или лист) кликнуть правой кнопкой мышки по нужной ячейке и нажать по меню "Специальная вставка" . См. пример ниже.

Спец. вставка

В появившемся окне настроек укажите, что вам требуется вставить только "Значения" (а не сами формулы) и нажмите OK.

Значения

Как видите на скрине ниже, в документ были вставлены текстовые значения из ранее сцепленных ячеек (а не сами формулы).

Формул нет (только текстовые строки)

Формул нет (только текстовые строки)

Способ 2

Объединять ячейки в Excel можно и без спец. формул, достаточно использовать знак "&".

Формула в этом случае будет выглядеть так:

Еще один вариант объединения ячеек с содержимым

Разумеется, чтобы добавить пробелы между объединенными значениями, нужно слегка изменить формулу:

Вставляем пробелы между данными

Вставляем пробелы между данными

Если вместо пробелов вам нужны дефисы, формула несколько преобразится:

Как будет выглядеть формула, если вместо пробелов вставим дефисы

Как будет выглядеть формула, если вместо пробелов вставим дефисы

Когда "настройка" формулы будет завершена — просто потяните мышкой за уголок и растяните ее на другие строки (столбцы). После, Excel применит ее к другим ячейкам (пример ниже).

Формула распространена на др. ячейки

Формула распространена на др. ячейки

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

На сим закруглюсь! Дополнения по теме приветствуются.

Сцепить много ячеек с указанным разделителем

Часто бывает ситуация, когда необходимо из трех разных столбцов сцепить данные в одну строку с разделителем. Допустим в А1 Фамилия, в В1 — Имя, в С1 — Отчество, а надо получить все вместе Фамилия Имя Отчество. Как обычно в Excel объединяют значения нескольких ячеек в одну? Правильно, при помощи функции СЦЕПИТЬ или при помощи амперсанда:
=СЦЕПИТЬ( A1 ;" "; B1 ;" "; C1 ;" ")
= A1 &" "& B1 &" "& C1 &" "
Это достаточно эффективно, если необходимо сцепить значения из трех-пяти ячеек. А если ячеек 50? Или того больше? Не очень удобно объединять их все описанными выше способами. А других встроенных функций в Excel для подобных операций не существует.
Поэтому я написал функцию пользователя, которая сцепляет данные из указанных ячеек в одну строку. Чем отличается от стандартной функции СЦЕПИТЬ()? Тем, что в качестве ячеек для сцепки указывается не каждая из ячеек по очереди, а сразу весь диапазон с возможностью указания разделителя между значениями каждой ячейки.

Option Explicit ‘————————————————————————————— ‘ Procedure : СцепитьМного ‘ http://www.excel-vba.ru ‘ Purpose : Функция сцепляет все указанные ячейки в одну с указанным разделителем. ‘ Аргументы функции: ‘ Диапазон — диапазон ячеек, значения которых необходимо объединить в строку. ‘ Разделитель — необязательный аргумент. ‘ Один или несколько символов, которые будут вставлены между каждым словом. ‘ По умолчанию пробел. ‘ БезПовторов — необязательный аргумент. ‘ Если указан как ИСТИНА или 1 — в результирующей строке будут значения без дубликатов. ‘ Для английской локализации данный параметр указывается как TRUE и FALSE соответственно. ‘————————————————————————————— Function СцепитьМного(Диапазон As Range, Optional Разделитель As String = " ", Optional БезПовторов As Boolean = False) Dim avData, lr As Long, lc As Long, sRes As String avData = Диапазон.Value If Not IsArray(avData) Then СцепитьМного = avData Exit Function End If For lc = 1 To UBound(avData, 2) For lr = 1 To UBound(avData, 1) If Len(avData(lr, lc)) Then sRes = sRes & Разделитель & avData(lr, lc) End If Next lr Next lc If Len(sRes) Then sRes = Mid(sRes, Len(Разделитель) + 1) End If If БезПовторов Then Dim oDict As Object, sTmpStr Set oDict = CreateObject("Scripting.Dictionary") sTmpStr = Split(sRes, Разделитель) On Error Resume Next For lr = LBound(sTmpStr) To UBound(sTmpStr) oDict.Add sTmpStr(lr), sTmpStr(lr) Next lr sRes = "" sTmpStr = oDict.keys For lr = LBound(sTmpStr) To UBound(sTmpStr) sRes = sRes & IIf(sRes <> "", Разделитель, "") & sTmpStr(lr) Next lr End If СцепитьМного = sRes End Function

Чтобы правильно использовать приведенный код, необходимо сначала ознакомиться со статьей Что такое функция пользователя(UDF)?. Вкратце: скопировать текст кода выше, перейти в редактор VBA( Alt + F11 ) -создать стандартный модуль(InsertModule) и в него вставить скопированный текст. После чего функцию можно будет вызвать из Диспетчера функций( Shift + F3 ), отыскав её в категории Определенные пользователем (User Defined Functions) .

Синтаксис функции:
=СцепитьМного(A2:A100;", ";ИСТИНА)

Диапазон — диапазон ячеек, значения которых необходимо объединить в строку.
Разделитель — необязательный аргумент. Один или несколько символов, которые будут вставлены между каждым словом. По умолчанию пробел.
БезПовторов — необязательный аргумент. Если указан как ИСТИНА или 1 — в результирующей строке будут значения без дубликатов. Например, из значений Сидоров, Петров, Сидоров, Иванов в результат попадут только Сидоров, Петров, Иванов. Если ЛОЖЬ или 0 — будут выведены все значения. Для английской локализации данный параметр указывается как TRUE и FALSE соответственно.

Tips_Macro_CoupleCells.xls (54,0 KiB, 10 478 скачиваний)

Если необходимо объединять значения ячеек из "рваных"(несмежных) диапазонов(выделенных через Ctrl), то код нужно немного изменить:

Option Explicit ‘————————————————————————————— ‘ Procedure : СцепитьМного ‘ http://www.excel-vba.ru ‘ Purpose : Функция сцепляет все указанные ячейки в одну с указанным разделителем. Допускается указание несмежных диапазонов ‘ Аргументы функции: ‘ Диапазон — диапазон ячеек, значения которых необходимо объединить в строку. ‘ Разделитель — необязательный аргумент. ‘ Один или несколько символов, которые будут вставлены между каждым словом. ‘ По умолчанию пробел. ‘ БезПовторов — необязательный аргумент. ‘ Если указан как ИСТИНА или 1 — в результирующей строке будут значения без дубликатов. ‘ Для английской локализации данный параметр указывается как TRUE и FALSE соответственно. ‘————————————————————————————— Function СцепитьМного(диапазон As Range, Optional разделитель As String = " ", Optional БезПовторов As Boolean = False) Dim avData, lr As Long, lc As Long, sRes As String Dim ra As Range For Each ra In диапазон.Areas avData = ra.Value If Not IsArray(avData) Then ReDim avData(1 To 1, 1 To 1) avData(1, 1) = ra.Value End If For lc = 1 To UBound(avData, 2) For lr = 1 To UBound(avData, 1) If Len(avData(lr, lc)) Then sRes = sRes & разделитель & avData(lr, lc) End If Next lr Next lc Next If Len(sRes) Then sRes = Mid(sRes, Len(разделитель) + 1) End If If БезПовторов Then Dim oDict As Object, sTmpStr Set oDict = CreateObject("Scripting.Dictionary") sTmpStr = Split(sRes, разделитель) On Error Resume Next For lr = LBound(sTmpStr) To UBound(sTmpStr) oDict.Add sTmpStr(lr), sTmpStr(lr) Next lr sRes = "" sTmpStr = oDict.Keys For lr = LBound(sTmpStr) To UBound(sTmpStr) sRes = sRes & IIf(sRes <> "", разделитель, "") & sTmpStr(lr) Next lr End If СцепитьМного = sRes End Function

Однако в таком случае слегка изменится и синтаксис — такие диапазоны обязательно надо будет записывать в скобках:
Синтаксис функции:
=СцепитьМного(( A2:A100 ; F4:F60 ; Y2:Z43 );", ";ИСТИНА)
Иначе функция просто не сработает и выдаст ошибку #ЗНАЧ! (#VALUE!)

И еще одна реализация — в ней допускается указывать не только отдельные диапазоны, но и вообще все что угодно(ячейки, отдельный текст, числа и т.п.). Единственная проблема — в этой функции иначе организован порядок аргументов: сначала указывается разделитель, а уже потом значения для сцепления. Более подробно эта функция рассмотрена в статье Что такое функция пользователя(UDF)?. Так же эта функция не убирает дубли, что впрочем, не так сложно добавить, ориентируясь на функции выше.

Function ОбъединитьВсеСРазделителем(Разделитель As String, ParamArray Значения()) As String Dim result As String, arg, x, rc As Range For Each arg In Значения Select Case TypeName(arg) Case "Range" ‘это диапазон ‘цикл по всем ячейкам For Each rc In arg.Cells If result = "" Then result = rc.Value Else result = result & Разделитель & rc.Value End If Next Case "Variant()" ‘это произвольный массив(<"а";"б";"в">) ‘цикл по всем ячейкам For Each x In arg If result = "" Then result = x Else result = result & Разделитель & x End If Next Case Else ‘это любой другой тип ‘суммируем If result = "" Then result = arg Else result = result & Разделитель & arg End If End Select Next ОбъединитьВсеСРазделителем = result End Function

Статья помогла? Поделись ссылкой с друзьями!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *