Хитрости »
5 Август 2013 151261 просмотров
Сцепить много ячеек с указанным разделителем
Часто бывает ситуация, когда необходимо из трех разных столбцов сцепить данные в одну строку с разделителем. Допустим в А1 Фамилия, в В1 — Имя, в С1 — Отчество, а надо получить все вместе Фамилия Имя Отчество. Как обычно в Excel объединяют значения нескольких ячеек в одну? Правильно, при помощи функции СЦЕПИТЬ или при помощи амперсанда:
=СЦЕПИТЬ(A1;» «;B1;» «;C1;» «)
=A1&» «&B1&» «&C1&» «
Это достаточно эффективно, если необходимо сцепить значения из трех-пяти ячеек. А если ячеек 50? Или того больше? Не очень удобно объединять их все описанными выше способами. А других встроенных функций в Excel для подобных операций не существует. С момента написания статьи Microsoft порадовал нас новыми функциями и теперь в составе функций есть функция ОБЪЕДИНИТЬ(TEXTJOIN), которая способна решить задачу без лишних телодвижений.
=ОБЪЕДИНИТЬ(«, «;ИСТИНА;A2:A100)
=TEXTJOIN(«, «,TRUE,A2:A100)
-
Разделитель(«, «) — разделитель, с которым объединять текст из указанных ячеек
Пропускать пустые(ИСТИНА) — указывает пропускать ли пустые ячейки. Т.е. если указано ИСТИНА или 1(а так же если аргумент вовсе не указан) — пустые ячейки будут пропускаться и не попадут в общую строку сцепки. Если указано ЛОЖЬ — сцепляться будут все ячейки, независимо от их содержимого. Например, если указать три ячейки A1:A3 в которых А2 пустая, то при указании ИСТИНА результат будет таким: «один, два». Если указать ЛОЖЬ, то пустая ячейка тоже попадет в сцепку: «один, , два».
Так же этот аргумент удобен, если неизвестен заранее размер диапазона сцепления. Можно указать ячейки чуть с запасом(A1:A300) и тогда сцепляться будут только ячейки заполненного диапазона.
Текст(A2:A100) — указывается непосредственно диапазон либо текст для сцепления. Этот аргумент расширяемый — т.е. можно указать не один диапазон, а несколько или просто текст: =ОБЪЕДИНИТЬ(«, «;ИСТИНА;A2:A100;B2:B70;»текст»)
Правда и здесь не все так радужно: эта функция доступна только пользователям версий 2019 и выше, а так же офиса 365.
Поэтому я написал функцию пользователя, которая сцепляет данные из указанных ячеек в одну строку и использовать её можно в любой версии офиса. Чем отличается от стандартной функции СЦЕПИТЬ()? Тем, что в качестве ячеек для сцепки указывается не каждая из ячеек по очереди, а сразу весь диапазон с возможностью указания разделителя между значениями каждой ячейки. Так же, в функции сразу заложен алгоритм пропуска пустых ячеек и возможность сцеплять исключительно уникальные значения — т.е. в результате будут сцепляться только те ячейки, значения которых ранее еще не были добавлены в сцепку.
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 oDict As Object, sTmpStr Set oDict = CreateObject("Scripting.Dictionary") oDict.comparemode = 1 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) If БезПовторов Then If Not oDict.exists(avData(lr, lc)) Then oDict.Add avData(lr, lc), 0& End If End If End If Next lr Next lc If Len(sRes) Then sRes = Mid(sRes, Len(Разделитель) + 1) End If If БезПовторов Then 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) -создать стандартный модуль(Insert —Module) и в него вставить скопированный текст. После чего функцию можно будет вызвать из Диспетчера функций(Shift+F3), отыскав её в категории Определенные пользователем (User Defined Functions).
Синтаксис функции:
=СцепитьМного(A2:A100;», «;ИСТИНА)
Диапазон — диапазон ячеек, значения которых необходимо объединить в строку.
Разделитель — необязательный аргумент. Один или несколько символов, которые будут вставлены между каждым словом. По умолчанию пробел.
БезПовторов — необязательный аргумент. Если указан как ИСТИНА или 1 — в результирующей строке будут значения без дубликатов. Например, из значений Сидоров, Петров, Сидоров, Иванов в результат попадут только Сидоров, Петров, Иванов. Если ЛОЖЬ или 0 — будут выведены все значения. Для английской локализации данный параметр указывается как TRUE и FALSE соответственно.
Скачать пример
СцепитьМного.xls (52,5 KiB, 11 996 скачиваний)
Если необходимо объединять значения ячеек из «рваных»(несмежных) диапазонов(выделенных через 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
Также см.:
Сцепить_МН
Как сцепить несколько значений в одну ячейку по критерию? СцепитьЕсли
Что такое функция пользователя(UDF)?
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Ранее уже рассказывал о замечательной функции в программе Excel, которая называется «СЦЕПИТЬ».
Функция довольно удобная, не есть у нее один большой недостаток ячейки для сцепки нужно указывать по одной, выделение диапазона не работает или работает некорректно.
Для больших объемов сцепки (слияния текста) требуются значительные трудозатраты.
Достойных аналогов этой функции, к сожалению, найти не удалось.
На помощь пришел язык VBA для написания макросов в «Excel».
Ниже приведу простейший макрос, который позволяет соединять между собой значения ячеек в выделенном диапазоне. (Производить их слияние. )
Макрос слияния выглядит следующим образом:
- Sub Sliyanie()
- Dim txt As String ‘Объявляем переменную ТХТ
- txt = «» ‘присваиваем объявленной переменной пустое значение
- Dim cell
- For Each cell In Selection ‘ для всех ячеек в выделении выполняем следующие действия
- txt = txt + cell.text ‘к значению переменной txt добавляем значение ячейки
- Next
- MsgBox (txt) ‘выводим итоговое значение
- End Sub
Это самый простой вариант макроса слияния текстовых значений ячеек в выделенном диапазоне.
Его можно усложнить и оптимизировать под выполнение Вашей конкретной задачи.
Например:
Добавить форму UserForm с двумя полями TextBox. В одном поле указывать разделитель ( «/», «;», «.», и т.д.) а в другое поле выводить результат для удобства копирования.
Можно на форму UserForm вывести кнопки активации макроса «Соединить» и для ленивых кнопку «Копировать» — для копирования содержимого поля с результатом в буфер обмена.
Макрос копирования по ссылке: http://ruexcel.ru/ctrlc/
Можно добавить чек бокс (checkbox) для выбора учитывать пустые ячейки или пропускать их.
Вариаций очень много и их набор зависит только от задачи, которую будет выполнять макрос слияния ячеек.
amix_6 0 / 0 / 0 Регистрация: 31.01.2016 Сообщений: 16 |
||||
1 |
||||
Сцепить диапазон по столбцам31.03.2018, 15:42. Показов 3426. Ответов 6 Метки нет (Все метки)
Добрый день! Подскажите, пожалуйста, как сцепить диапазон ячеек по столбцам (вертикально). В интернете нашла отличный вариант через vba, но в нем только построчно. Excel 2013
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
31.03.2018, 15:42 |
6 |
Заблокирован |
||||
31.03.2018, 17:36 |
2 |
|||
Решениеamix_6, попробуйте —
1 |
0 / 0 / 0 Регистрация: 31.01.2016 Сообщений: 16 |
|
01.04.2018, 10:45 [ТС] |
3 |
Спасибо огромное, это то что надо!
0 |
Аксима 6076 / 1320 / 195 Регистрация: 12.12.2012 Сообщений: 1,023 |
||||
01.04.2018, 11:38 |
4 |
|||
Улучшил предложенную выше функцию: теперь в ее параметрах можно задавать отдельно разделитель строк и отдельно — разделитель столбцов.
С уважением,
1 |
0 / 0 / 0 Регистрация: 31.01.2016 Сообщений: 16 |
|
01.04.2018, 11:55 [ТС] |
5 |
Здравствуйте. Здорово
0 |
Аксима 6076 / 1320 / 195 Регистрация: 12.12.2012 Сообщений: 1,023 |
||||||||||||
01.04.2018, 17:55 |
6 |
|||||||||||
Решение
если ячейка пустая разделитель все равно ставится Если это вам не нравится, то предлагаю такой вариант:
Правда, для меня загадка, как в таком случае вы будете различать массивы:
и
поскольку результат для них будет одинаковым — «1; 1; 1».
1 |
0 / 0 / 0 Регистрация: 31.01.2016 Сообщений: 16 |
|
02.04.2018, 09:21 [ТС] |
7 |
Спасибо огромное! Последний вариант для меня подошел идеально, тк в моем случае не бывает пустых столбцов между заполненными, данные заносятся подряд.
0 |
Работа с функцией СЦЕПИТЬ в Microsoft Excel
Смотрите также String Dim ra End FunctionСцепитьМного. Update а также получить: Всем привет! ячеек, содержимое которых РазделительСтрок As String сравниваются значения ячеекЧто потом с скорости вызова простейшей версиях 20003/2007 это но задавать полностью / CurrentRegion /» «Если Вы никогдаС помощью функции этом вручную добавитьОдной из интересных функций As Range For
2017-10-19 Option Explicit универсальный вариант для
Применение оператора СЦЕПИТЬ
Подскажите, пожалуйста, есть хотим склеить = «, «, из п.5 такой ячейкой планируете функции в VBScript делается очень криво. столбцы, когда много UsedRange)– символ пробела прежде не использовалиСЦЕПИТЬ пробел не получится, приложения Microsoft Excel Each ra In ‘————————————————————————————————————————————————————————————————— ‘ Procedure большого количества столбцов. ли решение задачи:Например: _ Optional ByValи т.д. следующие делать? и VBA.
Поэтому просто добавил пустых ячеек, будет
- количеству критериев
в кавычках функции Excel, томожно быстро объединять а только через является функция диапазон.Areas avData = : СцепитьМного ‘_Boroda_
Способ 1: объединение данных в ячейках
Нужно собрать данныеЭто универсальный и компактный РазделительСтолбцов As String условия аналогично п.п.ЦитатаА сортировку иУ меня VBA пример использования, который слишком роскошно. Впрочем, для сцепки (отF16 можете обратиться к данные нескольких колонок редактирование формулы.СЦЕПИТЬ
- ra.Value If Not http://www.excel-vba.ru ‘ Purpose: Вы рассуждаете верно. по условию в способ сцепки, работающий = «; «) 5,6,7 разбивку по строкам оказалась быстрее в
- виден в мастере могу добавить подрезку 3 до 0,(Product) – наименование разделу в одну.Урок:. Её основной задачей IsArray(avData) Then ReDim : Функция сцепляет Везде, кроме фразы одну ячейку при абсолютно во всех
- Dim c AsВсе условия работают выполняет мой примитивный 21 раз (0.4 функций. до последней используемой т.е. просто сцепить)Введите вот такую формулуФормулы и функцииС ячейками первой строкиМастер функций в Excel
является соединение содержимого avData(1 To 1, все указанные ячейки . Формульный массив помощи формулы массива. версиях Excel. Range, v As по И-логике (And) макрос.Может, нужно было секунды) чем VBScriptВот встроенную справку строки листа.- ограничениям на в ячейкенашего самоучителя по объединяемых колонок проделываемСуществуют возможности исправить данный двух или нескольких 1 To 1) в одну с получится сцепить вместе
- Пример во вложении.Для Variant, t AsПример вызова функции: сразу в одном (9.5 секунды) для данной функции3. Так будет тип данных (числа,E19 Excel для начинающих, на выбор те недочет, вставив пробелы ячеек в одной. avData(1, 1) = указанным разделителем. ‘ или посимвольным перебором,
Спасибо!суммирования
Способ 2: применение функции с пробелом
String, s As=Concat(A:A; «,»; 1;1; (нашем) макросе все
- Option Explicit Dim было бы сделать плохо, потому что
- текст, даты): где представлена серия действия, которые указаны
- между аргументами оператора. Данный оператор помогает ra.Value End If Аргументы функции: ‘ что даст ВамP.S. ЮПД несодержимого нескольких ячеек String, lr As B:B;»=»;3; C:C;»>=»;20; D:D;»=»;»text3″) это и сделать?
objScript As Object
- разумнее, но это даты придется задавать- способу указания=CONCATENATE(F17,» «,F16) уроков на эту
во втором иВыполняем задачу по тому решить некоторые задачи, For lc = Диапазон — диапазон
Способ 3: добавление пробела через окно аргументов
формулу гораздо больше хочется использовать, так используют знак плюс Long, lc AsAcid BurnAcid Burn ‘ Сравнение скорости требует немало времени, текстом, а Excel разделителей, диапазонов, критериев=СЦЕПИТЬ(F17;» «;F16) тему. третьем способе применения же алгоритму, который которые с помощью 1 To UBound(avData,
- ячеек, значения которых моей (в которой, же как и « Long lr =: ZVI, в коде: Точно, что-то я выполнения простейшей функции попробуйте сделать сами тогда может произвольно и операторов сравненияУсложним задачу! Предположим, чтоПредположим, у нас есть
- аргумента. Правда, если описан выше. других инструментов воплотить 2) For lr необходимо объединить в кстати, обратите внимание дополнительные ячейки. Если+ Len(РазделительСтрок) + 1: есть небольшая неточность: не подумал… Такая в VBScript и и подключить через поменять местами месяц (=, >/ По мы хотим получить: таблица с контактной вы решили воспользоватьсяДвойным щелчком левой кнопки невозможно. Например, с = 1 To строку. ‘ Разделитель на то, как без этого ни», а для lc = Len(РазделительСтолбцов)
- Критерий Должно быть ситуация в реальных VBA Sub Time_Test() Application.MacroOptions. и число, если мере необходимости подгружаешьWe have 25 apples информацией, где имена способом с пустой мыши по ячейке его помощью удобно UBound(avData, 1) If — необязательный аргумент. ищет ПОИСК и как не решитьсклеивания + 1 If По факту (0, условиях вряд ли Const N& =ZVI ему так захочется
то одну, то(У нас есть и фамилии находятся ячейкой, то ссылку с формулой активируем производить процедуру объединения Len(avData(lr, lc)) Then
‘ Один или в чем отличие задачу, то подскажитесодержимого ячеек используют Диапазон.Rows.Count = 1 0) Все, без встретится. 1000000 Dim i&,: По поводу того,nerv другую UDF. 25 яблок). Для в разных столбцах. на неё нужно её для редактирования.
Способ 4: объединение колонок
ячеек без потерь. sRes = sRes несколько символов, которые от Вашего ПОИСКа), плз любой вариант.
- знак « Then For Each сорт. + (1,Извиняюсь. t1!, t2!, ok чтобы в Excel: можно заИ в итоге этого нужно добавить Мы хотим связать будет сделать абсолютной.Между каждым аргументом записываем Рассмотрим возможности данной & разделитель & будут вставлены между или макросом._Boroda_& v In Диапазон 0) Уникал., безЦитатаМожет, нужно было As Boolean Debug.Print 2013 работало быстрее,e val сам начинаешь путаться еще один аргумент их и получить Для этого, перед выражение в виде функции и нюансы avData(lr, lc) End каждым словом. ‘Не, если хотите,: Если столбцов 5
- » (расположен на большинстве If v <> сорт. Все, сорт. сразу в одном «N = « специально не старался,ить немного в них, а – фразу «We полное имя для
- каждым знаком координат пробела, ограниченного с её применения. If Next lr
По умолчанию пробел. пробуйте, никто ж и без допячеек
Способ 5: добавление дополнительных символов
клавиатур на цифре «» Then s (0, 1) Все, (нашем) макросе все & N t1 просто всю обработкуПравда в этом файл — тормозить have»: каждого человека. На по горизонтали и
- двух сторон кавычками.Скачать последнюю версию Next lc Next ‘ БезПовторов — не запрещает. Я и без UDF «7»). При его = s & с сорт. Уникал., это и сделать?Если = Timer For сделал в VBA-массивах. случае вряд ли при пересчёте.=CONCATENATE(«We have «,F17,» «,F16) рисунке ниже Вы вертикали этой ячейки После внесения каждого
- Excel If Len(sRes) Then необязательный аргумент. ‘ думаю, что в
(Вы это имели использовании необходимо помнить, РазделительСтолбцов & v без сорт. (1, можно будет включать i = 1 Это стандартный метод будетМожет кто-нибудь сможет=СЦЕПИТЬ(«We have «;F17;» «;F16) видите имена в ставим знак доллара такого значения ставимФункция sRes = Mid(sRes,
Если указан как
lumpics.ru
Функция СЦЕПИТЬ – скотч для Excel
свое время через в виду, написав что: Next Else For 1) Уникал., с и отключать эти To N ok ускорения обработки дляЦитатаAcid Burn пишет: написать / найтиПри желании можно добавлять столбце($) точку с запятой.СЦЕПИТЬ
Len(разделитель) + 1) ИСТИНА или 1 это прошел каждый ЮПД?), то вотЭтот символ надо ставить Each c In сорт. + опции, и это = Foo1(i, «Text3») всех версий.быструю UDFбыструю UDF еще больше аргументов,B. Естественно, что лучше
Общий вид добавленныхотносится к группе End If If — в результирующей из нас. Также, так в каждой точке Диапазон.Columns t =Т.е. (1, 0) не вызовет разрастания Next t1 =Еще для операторов
Связываем имена
ЦитатаZVI пишет:для сцепки любых чтобы создать более, а фамилии в всего это сделать выражений должен быть текстовых операторов Excel. БезПовторов Then Dim строке будут значения как и через=ПСТР(ЕСЛИ(ЕЧИСЛО(ПОИСК(«, «&M$1&»,»;», «&A2&»,»));», «&A$1;»»)&ЕСЛИ(ЕЧИСЛО(ПОИСК(«, соединения, т.е. на «» For Each и (0, 1) кода и трудностей Timer — t1 заменил сравнение текста»куда правильнее»Я формулировку данных по 3 сложное выражение. Главное
столбце в самом начале, следующий: Её основная задача oDict As Object, без дубликатов. ‘ попытку засунуть виртуальный «&M$1&»,»;», «&B2&»,»));», «&B$1;»»)&ЕСЛИ(ЕЧИСЛО(ПОИСК(«, всех «стыках» текстовых v In c.Value работают с точностью в реализации… То Debug.Print «VBScript», Round(t1,
сравнением с числами, изменил, если что критериям, которые можно помните, что синтаксисA чтобы в другие» «; — объединение в sTmpStr Set oDict Для английской локализации диапазон в Проверку
- «&M$1&»,»;», «&C2&»,»));», «&C$1;»»)&ЕСЛИ(ЕЧИСЛО(ПОИСК(«, строк также, как If v <>
- до наоборот. было бы отлично 3) & «
- это тоже выполняется ) Теперь это задавать по необходимости.
формулы должен быть. Наша формула будет поля, где содержитсяДля того, чтобы вывести одной ячейке содержимого
= CreateObject("Scripting.Dictionary") sTmpStr
данный параметр указывается
данных. «&M$1&»,»;», «&D2&»,»));», «&D$1;»»)&ЕСЛИ(ЕЧИСЛО(ПОИСК(«, вы ставите несколько «» Then tБуду благодарен, еслиnerv sec» t2 = быстрее. можно
Примерно такого вида предельно точен, иначе в ячейке этот адрес, пользователь результат на экран, нескольких ячеек, а = Split(sRes, разделитель) как TRUE иJack Famous
«&M$1&»,»;», «&E2&»,»));», «&E$1;»»);3;999) плюсов при сложении = t & подправите (сам пока: вообще-то я ничего Timer For i
ZVIZVI=СЦЕПКА(Разделитель; Диапазон сцепки; она может неE2 мог копировать его, жмем на кнопку также отдельных символов.
On Error Resume FALSE соответственно. ‘:На каждый новый нескольких чисел (2+8+6+4+8) РазделительСтрок & v не понял, как не предлагаю решать) = 1 To
Связываем числа и текст
: Александр, хотелось бы: Александр, да, тогда Optional Диап. усл._1; заработать. В большой. как содержащий постоянныеEnter Начиная с версии Next For lr Update 2017-10-19: http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=97166&TITLE_SEO=97166-stsepit-yacheyki-v-nesmezhnom-rvanom-diapazoneДоброго утра, Планетяне! столбец добавляете кусокЕсли нужно приклеить произвольный Next If t)… Я только высказываю N ok = в теме автора будет медленнее, как
Оператор_1 & Условие_1; формуле легко допустить
- Прежде, чем мы начнем абсолютные ссылки. В.
- Excel 2016, вместо = LBound(sTmpStr) To ‘ Изменения: работает
- Есть замечательная UDF типа
текст (даже если <> «» Thenamix_6 свое мнение о
Foo2(i, "Text3") Next
решать проблемы автора.
плата за универсальность. Optional Диап. усл._2; ошибку! вводить формулу, поймите остальных полях оставляемКак видим, на месте данного оператора используется UBound(sTmpStr) oDict.Add sTmpStr(lr), в несмежных диапазонах.
от Дмитрия Щербакова
Код&ЕСЛИ(ЕЧИСЛО(ПОИСК(", "&M$1&",";", "&E2&","));",
это всего лишь s = s: Добрый день! Подскажите, том, что у t2 = TimerУ меня естьВстроенная функция СУММЕСЛИМН() Оператор_2 & Условие_2;Урок подготовлен для Вас важный момент: функция относительные ссылки. Как
вставки пробелов с функция
sTmpStr(lr) Next lr
При этом первый
«СцепитьМного». Сцепляет данные
office-guru.ru
Объединение значений нескольких ячеек в одну текстовую строку в EXCEL
«&E$1;»») точка или пробел, & РазделительСтолбцов &
пожалуйста, как сцепить одного автора одни — t2 Debug.Print правило: решая проблему использует аналогичные моему
Optional Диап. усл._3; командой сайта office-guru.ruСЦЕПИТЬ всегда, после выполнения кавычками в ячейке
СЦЕП sRes = «» аргумент(рваные диапазоны) надо в диапазоне черезЕще в файле
не говоря уж Mid(t, lr) Next диапазон ячеек по критерии отбора «VBA», Round(t2, 3)
сначала убедиться, проблема варианту простые операторы Оператор_3 & Условие_3)
Источник: http://www.gcflearnfree.org/excel-tips/concatenate-excels-duct-tape/fullбудет связывать только процедуры, жмем на появились разделения между
. Но в целях sTmpStr = oDict.Keys будет передавать обязательно разделитель. Пропускает пустые покрасия нужные ячейки о целом слове), End If СцепитьДиапазон2 столбцам (вертикально). ВЦитата=, >/ a & » sec» ли это вообще. и этого хватаетОчень надеюсь наПеревел: Антон Андронов то, что Вы
кнопку словами. сохранения обратной совместимости For lr = заключив в скобки ячейки и контролирует Условным форматированием то этот текст = Mid(s, lc) интернете нашла отличный
* 2 > Debug.Print «VBA isА автор темы для большинства случаев. Вашу помощь иАвтор: Антон Андронов укажете и ничего«OK»Конечно, если преобразуемых значений оператор LBound(sTmpStr) To UBound(sTmpStr) (добавить их вручную): дубликаты.Ячейку М1 можно надо заключать в End FunctionПравда, для вариант через vba, b — 1 faster in «
не озвучивал проблему,
Acid Burn понимание.Объединим значения из нескольких
более. Если необходимо,. не много, тоСЦЕПИТЬ sRes = sRes
excel2.ru
Универсальная функция Сцепить
=СцепитьМного((A2;A3;A4;A5);»-«) ‘—————————————————————————————————————————————————————————————————- FunctionВсё хорошо, но, менять
кавычки. В предыдущем меня загадка, как но в нем ‘или такое a & Round(t1 / которые Вы предлагаете
: To ZVI.Заранее огромное спасибо! ячеек в одной чтобы в ячейке
Устанавливаем курсор в нижний вышеприведенный вариант разрыватоже оставлен, и & IIf(sRes <>
СцепитьМного(диапазон As Range, часто приходится сцеплятьLogotip примере с функцией
в таком случае только построчно. Excel / 2 +
t2, 0) & решать.> 1. Не понялPS: Мои поздравления ячейке. появились знаки пунктуации, правый угол элемента
склейки прекрасно подойдет. его можно использовать «», разделитель, «») Optional разделитель As «рваный» диапазон, то
: Да, именно UDF СЦЕПИТЬ о кавычках вы будете различать 2013 a — b » times» EndЧто тормозит -
вопроса…
по поводу переходаПредположим, что имеется диапазон пробелы или что-то с формулой. Появляется Но его будет наравне со & sTmpStr(lr) Next
String = « есть ячейки, идущие имел ввиду.
заботится сам Excel
массивы:Спасибо огромное!в Вашу функцию
Sub ‘ VBScript
проверьте, конечно. ЯЯ имел ввиду, на современный движок. имен, необходимо, чтобы еще, добавьте их значок, имеющий вид затруднительно быстро воплотить,
СЦЕП
lr End If «, Optional БезПовторов НЕ подряд. ТакихСпасибо большое за
— в этом
1 11иPublic Function СЦЕПИТЬДИАПАЗОН(ByRef просто так не
function Function Foo1(a, когда-то проверял. что, если заменитьСтало намного лучше!
все имена были в аргументы функции. крестика, который называется если существуют множество
. СцепитьМного = sRes As Boolean =
«зон/областей» может быть решение.
же случае их
11 1поскольку результат ДИАПАЗОН As Excel.Range,
запишешь, придется лезть b) If objScriptНо тот факт,
C1:C6;»=»;3 на C1:C6;»>»;3,ZVI выведены подряд в
В данном примере мы маркером заполнения. Зажимаем ячеек, которые нужноСинтаксис этого оператора выглядит End FunctionПри этом False) Dim avData,
много (у меня
А можно как-то надо ставить вручную. для них будет Optional ByVal РАЗДЕЛИТЕЛЬ
в код. Т.о.
Is Nothing Then что и JScript то функция выдаёт
: Приложил вариант функции одной ячейке. хотим, чтобы между
левую кнопку мыши объединить. Тем более, следующим образом:
первый аргумент(рваные диапазоны) lr As Long, до 20 бывает,
решить эту задачуВот, например, как можно
одинаковым — «1; As String = если потребуется n Set objScript = и VBScript могут
#Cond1? Concat(), допускающей до
Когда значений немного, то
именами стоял пробел и тянем его если эти ячейки=СЦЕПИТЬ(текст1;текст2;…)
надо будет передавать
lc As Long, но, думаю, что через формулу массива? собрать ФИО в
1; 1″.Спасибо огромное! «») As String «аналогичных» замысловатых условий, CreateObject(«ScriptControl») With objScript быть отключены администратором,> 2. могу добавить 9 условий в объединить их можно (чтобы не получалось
вниз параллельно расположению не находятся вВ качестве аргументов могут обязательно заключив в sRes As String для изменённого кода_Boroda_ одну ячейку из Последний вариант для
Dim rCell As придется писать n .Language = «VBScript» уменьшают мой интерес подрезку до последней Excel 2003 и с помощью функции что-то вроде –
объединяемых элементов. едином массиве. Значительно выступать, как текст, скобки: =СцепитьМного((A2;A3;A4;A5);»-«) Dim ra As это будет неважно).: Можно. Введите мою
трех с добавлением
меня подошел идеально,
Range Dim MergeText
вариантов сравнения .AddCode «Function Fn(a,b):Fn к данному решению. используемой строки листа.
до 84 условий СЦЕПИТЬ() записав формулуJosephineCarterПосле выполнения этой процедуры
упростить расстановку пробела так и ссылкиJack Famous Range For EachВопрос:
формулу не Ентером, пробелов:
тк в моем As String For
ЦитатаZVI пишет: = a=1 And Тем более, чтоБыло бы здорово. в Excel 2007+.
=СЦЕПИТЬ(A6;A7;A8;A9)), поэтому в аргументы данные в указанных
можно, воспользовавшись вариантом на ячейки, которые: ra In диапазон.Areasчто нужно изменить
а одновременным нажатиемЕсли сочетать это с
случае не бывает Each rCell In
Все же приведу
b=»»text3″»:End Function» End есть гораздо более Если при этомПорядок аргументов функции:Или с помощью Амперсанда
нам нужно будет столбцах будут объединены его вставки через
его содержат. КоличествоThe_Prist, огромное спасибо, автору!!! avData = ra.Value в коде, чтобы Контрл Шифт Ентер
функцией извлечения из пустых столбцов между
ДИАПАЗОН If rCell.Text код для сравнения With End If быстрые методы, но она будет правильно1. Диапазон ячеек & (добавим еще добавить пробел. Таким
в одном столбце. окно аргументов. аргументов может варьироватьсяработает и для If Not IsArray(avData) реализовать возможность выделенияА если серьезно, текста первых букв заполненными, данные заносятся <> «» Then скорости вызова простейшей Foo1 = objScript.Run(«Fn», они на грани работать на всех (столбец или несколько для красоты символ образом, у нас
Урок:Выделяем двойным кликом левой от 1 до сплошного и для
Then ReDim avData(1 несмежных областей? то формула массива -
подряд. MergeText = MergeText функции в VBScript
a, b) End
здравого смысла, поэтому листах… смежных), которые должны пробела): =A6&» «&A7&» окажется три аргумента:Как объединить столбцы в
кнопки мыши любую
255 включительно. разрывного
To 1, 1При этом, чтобы (да и неЛЕВСИМВ (LEFT)Еще раз спасибо! & РАЗДЕЛИТЕЛЬ &
и VBA.ч и Function ‘ VBA
о них тоже> 3. Так будет попасть в результат
«&A8&» «&A9B2 Экселе пустую ячейку наКак известно, обычное объединениескажите пожалуйста, а To 1) avData(1, сохранился контроль над только, обычная иногда, то можно получить
Надпись на заборе: «Катя rCell.Text End If т.д. Ибо, как function Function Foo2(a, не распространяюсь плохо2. Разделитель результатаЕсли значений много, то
(First Name) –Функцию листе. С помощью ячеек в Эксель вот эти скобки 1) = ra.Value дубликатами и пропуск тоже) дает результатом фамилию с инициалами + Миша +
Next MergeText = мне кажется, слабым b) Foo2 =Acid BurnТогда лучше оставить,
3. Столбец №1 придется вводить вручную имяСЦЕПИТЬ
клавиатуры устанавливаем внутри приводит к потере рисовать только вручную End If For
пустых ячеек.СцепитьМного Option МАССИВ. Массив можно одной формулой: Семён + Юра
Mid(MergeText, Len(РАЗДЕЛИТЕЛЬ) + местом (в данном a = 1
: Жаль, что нельзя как есть. ячеек, участвующих в много амперсандов и» «можно также использовать неё пробел. Желательно, данных. Сохраняются только можно? Программно слишком lc = 1 Explicit ‘————————————————————————————— ‘ вывести на листИмеем текст в нескольких
+ Дмитрий Васильевич 1) СЦЕПИТЬДИАПАЗОН = случае) как раз And b = сделать полноценные подсказки
Ещё 2 вопроса: условии №1 аргументов функции СЦЕПИТЬ().
– символ пробела для добавления дополнительных чтобы она находилась данные расположенные в
запарно будет? To UBound(avData, 2)
Procedure : СцепитьМного в столько ячеек, ячейках и желание
+ MergeText End Function является передача параметров
«text3» End Function при вводе UDF- можно ли4. Оператор условия Это неудобно. в кавычках символов и выражений, подальше от основного верхнем левом элементе.The_Prist For lr =
‘ http://www.excel-vba.ru ‘
сколько в этом — объединить этитоварищ Никитин +amix_6 и частый вызов ‘ в ячейку… дописать кусок кода, №1, может бытьИзбежать этого поможет дополнительныйA2
которых не было массива. Очень важно,
Для того, чтобы: Если речь про 1 To UBound(avData, Purpose : Функция массиве значений (по
ячейки в одну, рыжий сантехник +: функции. .ЦитатаZVI пишет:
Acid BurnНо это не который будет выдавать
одним из: «=»,
столбец с простейшей(Last Name) — в первоначальном объединяемом чтобы эта ячейка объединить содержимое двух проставление из самой 1) If Len(avData(lr, сцепляет все указанные
вертикали и горизонтали). слив туда же Витенька + телемастерamix_6У меня VBA: 2 вопроса:
критично, ведь синтаксис
подсказку при вводе «>=», «» формулой:
фамилия диапазоне. Более того, никогда после этого и более ячеек функции, то программно lc)) Then sRes
ячейки в одну В одну ячейку их текст. Проблема Жора +, попробуйте — Public
оказалась быстрее в- как убрать прост. UDF5. Значение условияЗначение из последней строкиТеперь, когда аргументы определены, можно с помощью не заполнялась никакими в Эксель без вообще не получится, = sRes & с указанным разделителем. в общем случае в одном -сволочь Редулов + Function СЦЕПИТЬДИАПАЗОНn(ByRef ДИАПАЗОН 21 раз (0.4 ошибку #ЗНАЧ! приЗавтра обязательно проверю(так, как это №1, с которым будет содержать желаемую мы можем записать данной функции внедрять данными. потерь можно применить т.к. точка-с-запятой(проставляемая для разделитель & avData(lr, ‘ Аргументы функции: чисто формулой не кнопка не вспомнить имени, As Excel.Range, Optional секунды) чем VBScript отсутствии критериев сцепления Concat1 на рабочем реализовано для «родных» сравниваются значения ячеек текстовую строку (см. в ячейку и другие операторы.Выполняем те же действия, функцию рваных диапазонов) является lc) End If ‘ Диапазон — получится все этоОбъединить и поместить в длинноволосый такой + ByVal РАЗДЕЛИТЕЛЬ As (9.5 секунды)Вместе с(когда просто надо файле (сейчас нет
формул) из п.3
файл примера).E2Выполняем действия по добавлению
что и приСЦЕПИТЬ
еще и разделителем Next lr Next диапазон ячеек, значения
засунуть. центре (Merge andещё 19 мужиков String = «»)
тем, вариант реализации сцепить диапазон)? под рукой).- как Вам
и т.д. следующиеВозвращаясь к функции СЦЕПИТЬ()вот такую формулу: значений в окно первом способе применения. аргументов. Сама функция lc Next If
которых необходимо объединитьЭто все с
Center) + муж = As String Dim
через объект- как кДумаю, проблем не
удалось сделать выполнение условия аналогично п.п.
можно обнаружить, что=CONCATENATE(B2,» «,A2) аргументов функции любым
функцииВыделяем ячейку, в которой
ничего не сможет Len(sRes) Then sRes в строку. ‘
учетом того, чтов Excel объединять-то любовь!» v Dim MergeText
ScriptControl этой UDF добавить возникнет.
макроса в 2013 3,4,5 она может вернуть
=СЦЕПИТЬ(B2;» «;A2) из способов, которыйСЦЕПИТЬ планируем разместить объединенные сделать в этом = Mid(sRes, Len(разделитель) Разделитель — необязательный Вам ведь нужно, ячейки умеет, аВ категории As String For, на мой взгляд, опцию «Без повторов»?To ZVI: огромное спасибо офисе быстрее, чем
Все условия работают несколько значений вКак и с любой был приведен выше., вплоть до открытия
данные. Кликаем на случае и ошибка + 1) End
аргумент. ‘ Один чтобы автоматически все вот с текстомТекстовые Each v In будет быстрее вариантаZVI
за UDF и в 2007 по И-логике (And) одной строке и другой функцией Excel, В одно из
окна аргументов оператора.
кнопку возникнет еще на If If БезПовторов или несколько символов, менялось, правильно? сложность — весть функция ДИАПАЗОН.Value If vEvaluate(): 1. В моем советы!
(во всех моихПример вызова функции: без утомительного ввода важен синтаксис. Не полей (при необходимости Добавляем значение первой«Вставить функцию» стадии обращения к
Then Dim oDict которые будут вставленыНо вообще-то для живых остается толькоСЦЕПИТЬ (CONCATENATE) <> «» Then
. примере работает: =Concat(A1:A6;RAN макросах получается наоборот)=Concat(A1:A6; «,»; B1:B6;»=»;3; многочисленных аргументов. Для забудьте начать со их может быть
ячейки с данными
. Она имеет вид функции, без выполнения As Object, sTmpStr между каждым словом. этой задачи как текст из верхней, которая соединяет содержимое MergeText = MergeTextЦитатаZVI пишет: «,» ): А для общегоnerv
C1:C6;»>=»;20; D1:D6;»=»;»text3″) этого запишем формулу знака равенства (=) и несколько) добавляем в поле окна, пиктограммы и размещена даже первой строки Set oDict = ‘ По умолчанию раз прекрасно подходят левой ячейки. нескольких ячеек (до
& РАЗДЕЛИТЕЛЬ &
Александр, хотелось бы2. Нужно сначала развития можно познакомить?:nerv =СЦЕПИТЬ(A6:A9), указав в и поставить между любой текстовый материал, как это уже
слева от строки
кода. CreateObject(«Scripting.Dictionary») sTmpStr = пробел. ‘ БезПовторов
UDF-ки, которых огромнаяЧтобы объединение ячеек происходило 255) в одно v End If
в теме автора придумать, как задаватьZVIZVI,: Хорошо, что все качестве единственного аргумента аргументами разделители (запятая который пользователь считает было описано ранее.
формул.А если вписывать Split(sRes, разделитель) On
— необязательный аргумент. куча понаписана. с объединением текста
целое, позволяя комбинировать Next MergeText = решать проблемы автора.считаю , что требуется: Рад был помочь,
как-то так на переехали
весь диапазон сразу, или точка с нужным добавить. Данный
Затем устанавливаем курсорОткрывается другой процедурой - Error Resume Next
‘ Если указан
Здесь в Готовых (как в таблицах
их с произвольным Mid(MergeText, Len(РАЗДЕЛИТЕЛЬ) +
отхождение от темы именно «уникально». справку могу в
скорую руку. Правда,ZVI, а не отдельные запятой).
текст обязательно должен во второе поле,Мастер функций не вижу проблем.
For lr = как ИСТИНА или решениях парочка есть
Word) придется использовать текстом. Например, вот
1) СЦЕПИТЬДИАПАЗОНn =
делом обычным иНаверное, проще сделать
принципе и нарисовать, не уверен, чтосогласитесь, не очень
ячейки. В результатеЗамечание: быть заключен в и выделяем ту. В категории Либо через Union LBound(sTmpStr) To UBound(sTmpStr) 1 — в http://www.excelworld.ru/forum/3-0-1-0-10-1-[%D1%81%D1%86%D0%B5%D0%BF] макрос. Для этого так:
MergeText End Function не подсудным, т.к. еще одну функция но тогда придется
будет работать в гибко получим лишь значениеставить между аргументами
planetaexcel.ru
Сцепить диапазон по столбцам
кавычки. Жмем на пустую ячейку с«Текстовые» передавайте диапазон, либо oDict.Add sTmpStr(lr), sTmpStr(lr) результирующей строке будутLogotip откройте редактор VisualНюанс: не забудьте оamix_6
эти отхождения, зачастую,
с другим именем, все это засовывать Office x64В данном случае первой ячейки. запятую или точку кнопку пробелом, о которойили вписывайте текстом через Next lr sRes значения без дубликатов.: Basic на вкладке пробелах между словами: Спасибо огромное, это гораздо более интересны например, ConcatUniq(), чтобы
в надстройку. ЗадачкаFunction Foo(ByVal Valid идеальный вариант (наТеперь в Строке формул с запятой –«OK» шла речь ранее.«Полный алфавитный перечень» .Formula. = «» sTmpStr ‘ Для английскойСогласен, это соответствуетРазработчик - — их надо то что надо! основной поставленной задачи не усложнять синтаксис была специфическая, но As String, a, мой взгляд) передавать выделим формулу =СЦЕПИТЬ(A6:A9)
зависит от того,. Появляется ссылка в
ищем операторJack Famous = oDict.Keys For локализации данный параметр условиям задачи ))Visual Basic (Developer - прописывать как отдельныеПопрошу еще оЦитатаRAN пишет:
аргументов. Или требуется,
интересная, спасибо и b) As Boolean функцию, возвращающую степень и нажмем клавишу в какой странеКак видим, после этого поле окна аргументов.«СЦЕПИТЬ»: The_Prist, большое спасибо
lr = LBound(sTmpStr) указывается как TRUEЦитата Visual Basic) аргументы и заключать помощи, может можноА для общего чтобы всегда были Вам — за With CreateObject(«ScriptControl») .Language истинности условия, что F9. Получим массив Вы живёте и действия к объединенным Для ускорения процесса. Выделяем это наименование за советы! To UBound(sTmpStr) sRes и FALSE соответственно._Boroda_, 03.11.2017 вили сочетанием клавиш в скобки, ибо чтобы разделитель между
развития можно познакомить?я только уникальные? развлечение = «JScript» .AddCode то вроде ={«Вася»:»Петя»:»Даша»:»Маша»}, его можно какой версией Excel
данным был добавлен можно её скопировать, и жмем наНа вашей тестить = sRes & ‘————————————————————————————— Function СцепитьМного(диапазон 10:41, в сообщении Alt+F11, вставим в текст. данными в столбцахзаПотом еще иTo RAN: «function fn(a,b,c,d,e){return «a > b скопировать в буфер пользуетесь. и текстовый материал. выделив и нажав кнопку не буду, но IIf(sRes <> «», As Range, Optional № 4 () нашу книгу новыйОчевидно, что если нужно был один (напримерZVI сортировка потребуется?Цитата А для & Valid &Acid Burn обмена (без знакаВот и всё! КогдаОператор сочетание клавиш«OK» есть задумка UDF разделитель, «») & разделитель As String А если серьезно, программный модуль (меню собрать много фрагментов, запятая), а между: Мне же неизвестно,Acid Burn
общего развития можно
«}» Foo =: = и фигурных нажметеСЦЕПИТЬCtrl+C. на основе СЧИТАТЬПУСТОТЫ sTmpStr(lr) Next lr = » «, то формула массива
Insert — Module
CyberForum.ru
3 способа склеить текст из нескольких ячеек
то использовать эту группами значений столбцов в какие ячейки: познакомить?Андрей, там же
.Run(«fn», a, b)ZVI скобок) и вставитьEnter
– единственная возможность.Запускается окно аргументов функции.
для рваных диапазонов. End If СцепитьМного Optional БезПовторов As
Способ 1. Функции СЦЕПИТЬ, СЦЕП и ОБЪЕДИНИТЬ
(да и не) и скопируем туда функцию уже не другой (например точка помещать результат.> работает: =Concat(A1:A6; «,») было продолжение (подчеркнуто): End With End, Вы — гений! в нужную ячейку., появится полное имя:
объединения ячеек безЗатем добавляем ссылку на В качестве аргументов Создам тут тему = sRes End Boolean = False) только, обычная иногда
текст такого простого очень удобно, т.к. с запятой).Раз ситуация сДа, но есть «есть гораздо более Function Sub Example()Погонял функцию:От наборов символов «:»Josephine Carter потерь в Excel. следующий элемент, который могут выступать ссылки и опробую уже Function Dim avData, lr тоже) дает результатом макроса: придется прописывать ссылкиСпасибо еще раз! 32787 символами не ограничение количества строк быстрые методы, но MsgBox Foo(«a >- Правильно работает (двойные кавычки, двоеточие. Кроме того, с
нужно добавить. В на ячейки, содержащие на ней)))The_Prist As Long, lc МАССИВ. Массив можноSub MergeToOneCell() Const
на каждую ячейку-фрагментamix_6
типичная, то пока
- (где-то ~5652 строк). они на грани b», 4, 3) с текстом, числами
- и опять двойныеТеперь, потянув мышью за его помощью можно очередном поле опять
- данные или отдельныйtankwar121: почти все(кроме отсечения As Long, sRes
вывести на лист
Способ 2. Символ для склеивания текста (&)
sDELIM As String по отдельности. Поэтому,: Здравствуйте, просто добавил сортировку
Т.е. =Concat(A1:A10000; «,») здравого смысла, ‘ True MsgBox и датами кавычки) можно избавиться маркер автозаполнения, скопируйте соединять целые столбцы, добавляем ссылку на текст. Если в: Нужно сцепить диапазон дублей). Будет выглядеть As String avData в столько ячеек, = » « начиная с 2016amix_6
- и сделал еще уже не сработает.поэтому о них тоже Foo(«a > b»,- Операторы и с помощью функции формулу во все добавлять текстовые значения,
- пустую ячейку. Так задачу входит объединение ячеек который указан так: Option Explicit = диапазон.Value If сколько в этом ‘символ-разделитель Dim rCell версии Excel, на, Улучшил предложенную выше одну функцию для> или требуется, чтобы не распространяюсь 4, 7) ‘ разделители можно задавать ПОДСТАВИТЬ() (см. файл
ячейки до проводить некоторые другие как мы скопировали содержимого ячеек, то в EXCEL (разделитель
‘————————————————————————————— ‘ Procedure Not IsArray(avData) Then массиве значений (по As Range Dim замену функции функцию: теперь в уникальных значений CondUnique(), всегда были только
Способ 3. Макрос для объединения ячеек без потери текста.
» False End Sub ссылкой на ячейку примера). или сE11 манипуляции. Знание алгоритма её адрес, то в данном случае — пробел) : СцепитьМного ‘ СцепитьМного = avData вертикали и горизонтали). sMergeStr As StringСЦЕПИТЬ ее параметрах можно аргументы — те уникальные?Не готов грузить
ZVI- Время выполнения помощью инструмента Заменить. В итоге полное работы с этой можно установить курсор мы будем работатьStep_UA http://www.excel-vba.ru ‘ Purpose Exit Function End В одну ячейку If TypeName(Selection) <>пришла ее более задавать отдельно разделитель же> Потом еще и этим сумасшествием.: Александр, медленно все
в массиве 4х1048576 (нажмите имя появится для функцией позволит облегчить в поле и только со ссылками.: Function SSS(R As : Функция сцепляет If For lc в общем случае «Range» Then Exit совершенная версия с строк и отдельноAcid Burn сортировка потребуется?Acid Burn это будет. Можно (4х10.000 строк заполнено):CTRL+H каждого человека. решение многих вопросов нажать сочетание клавишУстанавливаем курсор в первое Range) As String все указанные ячейки = 1 To чисто формулой не Sub ‘если выделены
похожим названием и — разделитель столбцов.:Нет, по ситуации: О подсказках / значительно быстрее.10.98/ 9.11/ 4.98, чтобы его вызвать).Если хотите усложнить задачу, для пользователя программы.Ctrl+V поле окна. Затем SSS = Join(WorksheetFunction.Transpose(R.Value),
planetaexcel.ru
СЦЕПИТЬ в одну ячейку формулой массива
в одну с UBound(avData, 2) For
получится все это не ячейки -
тем же синтаксисомPublic Function СцепитьДиапазон(ByValСпасибо! требуется выбрать все
справке к UDF
Но мне-то это
сек. (Excel 2007/ Если строка Вася»:»Петя»:»Даша»:»Маша то попробуйте приАвтор: Максим Тютюшев. Координаты будут вставлены. выделяем ссылку на » «) End указанным разделителем. ‘
lr = 1 засунуть. выходим With Selection — функция Диапазон As Range,А можно привести или только уникальные. я поинтересовался для
зачем? Здесь же 2010/ 2013) находится в ячейке помощи функцииИм пользовался Макгайвер. Экипаж
Таким способом чередуем листе, в которой FunctionВ качестве параметра
Аргументы функции: ‘ To UBound(avData, 1)
Ну, почему же For Each rCellСЦЕП (CONCAT)
_ Optional ByVal синтаксис Concat() к
А сортировку и общего развития. автору темы помогаем,
Несколько вопросов: можноG8
СЦЕПИТЬ Аполлон-13 также использовал поля с адресами
содержатся данные, нужные передаем связаный диапазон Диапазон — диапазон If Len(avData(lr, lc)) не получится (если
In .Cells sMergeStr. Ее принципиальное отличие РазделительСтрок As String виду: разбивку по строкамВы сделали отличную а не мне ли, то формула длясвязать город и его. Всегда в элементов и пустой для объединения. После из не менее ячеек, значения которых Then sRes =
я Вас правильно = sMergeStr & в том, что = «, «,=Concat(B1:B6;»,»; 1/0;1/0; C1:C6;»=»;3;
выполняет мой примитивный вещь, которая неnerv- добавить в замены этих символов,
штат в столбце трудной ситуации, когда ячейки. После того,
того, как координаты 2-х ячеек
необходимо объединить в sRes & разделитель
понял)? sDELIM & rCell.Text теперь в качестве _ Optional ByVal D1:D6;»>=»;20; E1:E6;»=»;»text3″; …) макрос. нуждается в каких-либо: т.е. я бы макрос операторы > например, на символF нужно сцепить две как все данные отобразились в окошке,А3: =sss(A5:A304) строку. ‘ Разделитель & avData(lr, lc)Если все на ‘собираем текст из аргументов можно задавать
РазделительСтолбцов As String где 1/0 -На самом деле комментариях.
сделал так и < (есть ; будет выглядеть
, чтобы получилось как
вещи, люди берут внесены, жмем на аналогичным образом поступаем… нужно помнить, — необязательный аргумент. End If Next том же примере ячеек Next rCell не одиночные ячейки, = «; «) исключить/оставить повторы; выполнить/пропустить
здорово бы сделатьНе тратьте наЦитатаZVI пишет: только =, >=,
так: на рисунке ниже: в руки скотч. кнопку
со вторым полем. что есть ограничения ‘ Один или lr Next lc рассмотреть следующую формулу: Application.DisplayAlerts = False а целые диапазоны
Dim i As сортировку ConcatUniq() с сортировкой… это Ваше драгоценноемедленно все это?=ПОДСТАВИТЬ(G8;»»»:»»»;»;»)При помощи функции Возможно, Вы сильно«OK» Соответственно выделяем другую на длину текста несколько символов, которые If Len(sRes) Then=СЦЕП(ЕСЛИ(—ЕОШ(ПОИСК(M1;A2:E2))=0;СТОЛБЕЦ(A:E);»X»))
‘отключаем стандартное предупреждение — текст из Long, n AsЭто было быНо я уже время. будетосмелюсь предположить, что- подрезать диапазонВ итоге, вставив результатСЦЕПИТЬ удивитесь, но в
excelworld.ru
Сцепить ячейки в несмежном (рваном) диапазоне
. ячейку. Подобную операцию в одной ячейке
будут вставлены между sRes = Mid(sRes,Формула массивная и о потере текста всех ячеек всех Long, v() As просто пределом мечтаний!
стесняюсь просить ВасPS: Проверил новую версию. не значительно. Функция строк под UsedRange? формулы как значение,Вы можете связывать Excel есть встроеннаяКак видим, после этого проделываем, пока координатыtankwar121 каждым словом. ‘
Len(разделитель) + 1) дает результат 1XX45, .Merge Across:=False ‘объединяем диапазонов будет объединен Variant n =
ZVI об этом…Время обработки на эвалится один раз.- изменить синтаксис получим строку Вася;Петя;Даша;Маша. даже числа и функция, которая делает в целевой ячейке всех ячеек, которые: По умолчанию пробел. End If If где 1,4 и ячейки Application.DisplayAlerts = в одно целое: Диапазон.Columns.Count: v =: Сделал. Порядок аргументовZVI том же тестовом В дальнейшем вызывается=Concat(B1:B6;»,»; C1:C6;»=»;3; D1:D6;»>=»;20;Примечание текст. Давайте представим, то же самое. образовалась объединенная запись, нужно объединить, неStep_UA ‘ БезПовторов — БезПовторов Then Dim 5 это «адреса» True .Item(1).Value =Для массового объединения также Диапазон.Value ReDim s(1 функции:: Это не ограничение файле сократилось до с параметрами. Вместо E1:E6;»=»;»text3″) до вида: В формуле для что мы используем Это функция включающая содержимое всех будут внесены в,не работает, даже уменьшая необязательный аргумент. ‘ oDict As Object, столбцов, при помощи Mid(sMergeStr, 1 + удобно использовать новую To n) As1. Диапазон ячеек функции, а ограничение 0,06/ 0,05/ 0,04.Language = «JScript» =Concat(B1:B6;»,»; C1:C6=3; D1:D6>=20; замены двойных кавычек Excel для храненияCONCATENATE элементов, но с окно аргументов функции. количество ячеек Если указан как sTmpStr Set oDict которых через КодИНДЕКС Len(sDELIM)) ‘добавляем к функцию String For i (столбец или несколько Excel — в сек. (Excel 2007/10/13),можно писать на E1:E6=»text3″) ? » использовано 2 записей об инвентаризации(СЦЕПИТЬ). пробелами между каждым После этого жмемStep_UA ИСТИНА или 1 = CreateObject(«Scripting.Dictionary») sTmpStr можно подтянуть нужные объед.ячейке суммарный текстОБЪЕДИНИТЬ (TEXTJOIN) = 1 To смежных), которые должны ячейке не может т.к. из 1.048.576 «родном» vbs.Спасибо! двойные кавычки «». магазина. Сейчас уФункция словом. на кнопку: Код в модуль — в результирующей = Split(sRes, разделитель) ячейки и далее End With End, появившуюся начиная с n: s(i) = попасть в результат быть больше 32767 строк заполнено лишьZVIZVIAcid Burn нас естьCONCATENATEВнимание! Как видим, вышеуказанный«OK» … строке будут значения On Error Resume аналогично цифрам «1XX45″ Sub Excel 2016. У Join(Application.Transpose(Application.Index(v, , i)),2. Разделитель результата символов. Если в 10.000.: По п.1 это: Не соглашусь, просто:25 яблок(СЦЕПИТЬ) позволяет связать способ значительно ускоряет.Step_UA без дубликатов. ‘ Next For lr через КодСЦЕПИТЬ сложитьТеперь, если выделить несколько нее следующий синтаксис: РазделительСтрок): Next СцепитьДиапазон3. Признак уникальности: ячейках A1:A10000 значенияНормально работает (не я забыл про сделайте «куда правильнее»Привет, Планетяне!(apples), но число два или более процедуру корректного объединенияКак видим, содержимое выбранных: или процедурой Sub Для английской локализации = LBound(sTmpStr) To в одну ячейку. ячеек и запустить=ОБЪЕДИНИТЬ(Разделитель; Пропускать_ли_пустые_ячейки; Диапазон1; Диапазон2 = Join(s, РазделительСтолбцов) 0/1 = Все/Уникальные длиной не более пересчитывается и не «>» и « и выложите здесьЯ думаю, не «25» и слово куска текста в данных в ячейках. областей отразилось в SSS_() ‘ [a3] данный параметр указывается UBound(sTmpStr) oDict.Add sTmpStr(lr),Вот только в этот макрос с … ) End FunctionС уважением,4. Признак сортировки: 2-х символов, то выдаёт ошибку) на По п.2 -ZVI только мне, но «apples» хранятся в
одной ячейке. Несмотря Но следует учесть, одной предварительно указанной — результирующая ячейка как TRUE и sTmpStr(lr) Next lr эту же формулу помощью сочетания клавишгде Аксима 0/1 = НеСортировать/Сортировать все сработает (3 не активных листах добавил подрезку диапазонов.: 1. Не понял и многим другим разных ячейках. Попробуем на длинное имя, что данный вариант ячейке. Но у ‘ [a5] - FALSE соответственно. ‘————————————————————————————— sRes = «» подсунуть КодИНДЕКС у Alt+F8 или кнопкойРазделительЗдравствуйте. Здорово Спасибо5. Столбец №1 символа на ячейку с другим UsedRange.По п.3 - вопроса, все условия часто требуется сцепить связать их в она очень проста таит в себе данного способа имеется начальная ячейка [a3] Function СцепитьМного(диапазон As sTmpStr = oDict.Keys меня не получается.Макросы- символ, который огромное! Правда если ячеек, участвующих в с учетом одного Это просто фантастика! оставил из-за дат. итак считаются по диапазон ячеек в одной ячейке, чтобы в использовании и и «подводные камни». существенный недостаток. При = Join(WorksheetFunction.Transpose(Range([a5], Cells(Rows.Count, Range, Optional разделитель For lr =Даже пробовал черезна вкладке Разработчик будет вставлен между ячейка пустая разделитель условии №1 символа разделителя, итогоВсем рекомендую к применению!Полноценные подсказки при И. Если в одну. получилось что-то вроде одинаково работает во Очень важно, чтобы его использовании происходит 1).End(xlUp)).Value), » «) As String = LBound(sTmpStr) To UBound(sTmpStr) КодДВССЫЛ, но результата(Developer — Macros) фрагментами все равно ставится.Если6. Оператор условия 30000 символов).Ещё раз СПАСИБО ZVI вводе UDF в строке найдено первоеСтандартная функция Excel этого: всех версиях Excel, в элементе, который так называемая «склейка End Sub » «, Optional sRes = sRes так и не
, то Excel объединитВторой аргумент отвечает за это вам не
№1, может бытьС учетом этого, и с Наступающим
ячейку не поддерживаются. несовпадение условия, то крайне неудобна, ноНам понадобится связать три а также в
содержит пробел, со без шва». Тоtankwar121 БезПовторов As Boolean & IIf(sRes <> получил. выделенные ячейки в то, нужно ли нравится, то предлагаю одним из: «=», Вы уверены, что всех!При вводе с проверка в этой можно найти несколько элемента: других электронных таблицах,
временем не появились есть, между словами: = False) Dim «», разделитель, «»)Ваше решение абсолютно одну, слив туда
игнорировать пустые ячейки такой вариант: «>», «=», «»
правильно поступаете, накапливаяZVI помощью мастера функций строке прекращается. UDF, отличающихся по:F17 например, в Google какие-то данные или
planetaexcel.ru
Как сцепить большое количество ячеек?
нет пробела иStep_UA avData, lr As & sTmpStr(lr) Next верно решает задачу
же и текст (ИСТИНА или ЛОЖЬ)Public Function СцепитьДиапазон2(ByVal7. Значение условия все в одной: Все же приведу можно добавить подсказки,2. Пустые ячейки- ресурсоёмкости и
(Number in stock)
Sheets. он не был они склеены в, Большущее спасибо! Все
Long, lc As lr End If, но хотелось через пробелы.Диапазон 1, 2, 3
Диапазон As Range, №1, с которым ячейке?
код для сравнения но для старых в данных пропускаются, рабочему диапазону (ActiveSheet — количествоПримечание: сдвинут. единый массив. При работает!
Long, sRes As СцепитьМного = sRes минимизировать количество формул,Logotip… — диапазоны
CyberForum.ru
_ Optional ByVal
Содержание
- Общая информация
- Описание и синтаксис функции СЦЕПИТЬ
- Вставка и настройка функции
- Функция СЦЕПИТЬ для большого количества ячеек
- Сцепить диапазон ячеек в Excel при помощи оператора & (амперсанд) вместо функции СЦЕПИТЬ
- Функции СЦЕПИТЬ / СЦЕП
- Обратная функция
- Аргументы функции
- Функция СЦЕПИТЬ в Excel, включая примеры
- Примеры
- Распространенные неполадки
- Рекомендации
- Макрос для объединения ячеек без потери текста.
- Дополнительная информация
Общая информация
Данная функция имеет один основной аргумент, а остальные являются дополнительными. Для корректной работы блоки необходимо разделять точкой с запятой. Формула имеет следующий вид:
В качестве составляющих могут выступать текстовые блоки, знаки препинания, числа, ссылки на ячейки, а также другие формулы. Обязательно заключайте текст в кавычки, иначе функция выдает ошибку #ИМЯ? и не работает. Для остальных форматов это не нужно.
Функция СЦЕПИТЬ имеет также символьный аналог в виде значка амперсанда & (Shift+6 в английской раскладке клавиатуры), который намного удобнее использовать.
На заметку! В последней версии редактора 2016 года данный инструмент на английском называется Concat.
Особенностью данного инструмента является то, что он работает только со строками. Если информация записана в столбик, то предварительно нужно транспонировать массив при помощи формулы ТРАНСП, а затем объединить ячейки.
Описание и синтаксис функции СЦЕПИТЬ
Данная функция начиная с Excel 2016 сменила название на “СЦЕП”, однако, для тех, кто привык к старому наименованию (“СЦЕПИТЬ”), оператор под этим названием также доступен в программе. СЦЕП и СЦЕПИТЬ абсолютно взаимозаменяемы и выполняют одну и ту же операцию по объединению содержимого выбранных ячеек в одну общую.
Формула функций выглядит так:
=СЦЕП(текст1;текст2;...)
или =СЦЕПИТЬ(текст1;текст2;...)
Максимальное количество аргументов – 255.
Вставка и настройка функции
Как мы знаем, при объединении нескольких ячеек в одну, содержимое всех элементов за исключением самой верхней левой стирается. Чтобы этого не происходило, нужно использовать функцию СЦЕПИТЬ (СЦЕП).
- Для начала определяемся с ячейкой, в которой планируем объединить данные из других. Переходим в нее (выделяем) и щелкаем по значку “Вставить функцию” (fx).
- В открывшемся окне вставки функции выбираем категорию “Текстовые” (или “Полный алфавитный перечень”), отмечаем строку “СЦЕП” (или “СЦЕПИТЬ”) и кликаем OK.
- На экране появится окно, в котором нужно заполнить аргументы функции, в качестве которых могут быть указаны как конкретные значения, так и ссылки на ячейки. Причем последние можно указать как вручную, так и просто кликнув по нужным ячейкам в самой таблице (при это курсор должен быть установлен в поле для ввода значения напротив соответствующего аргумента). В нашем случае делаем следующее:
- находясь в поле “Текст1” щелкаем по ячейке (A2), значение которой будет стоять на первом месте в объединенной ячейке;
- кликаем по полю “Текст2”, где ставим запятую и пробел (“, “), которые будут служит разделителем между содержимыми ячеек, указанных в аргументах “Текст1” и “Текст3” (появится сразу же после того, как мы приступим к заполнению аргумента “Текст2”). Можно на свое усмотрение указывать любые символы: пробел, знаки препинания, текстовые или числовые значения и т.д.
- переходим в поле “Текст3” и кликаем по следующей ячейке, содержимое которой нужно добавить в общую ячейку (в нашем случае – это B2).
- аналогичным образом заполняем все оставшиеся аргументы, после чего жмем кнопку OK. При этом увидеть предварительный результат можно в нижней левой части окна аргументов.
- находясь в поле “Текст1” щелкаем по ячейке (A2), значение которой будет стоять на первом месте в объединенной ячейке;
- Все готово, нам удалось объединить содержимое всех выбранных ячеек в одну общую.
- Выполнять действия выше для остальных ячеек столбца не нужно. Просто наводим указатель мыши на правый нижний угол ячейки с результатом, и, после того как он сменит вид на небольшой черный плюсик, зажав левую кнопку мыши тянем его вниз до нижней строки столбца (или до строки, для которой требуется выполнить аналогичные действия).
- Таким образом, получаем заполненный столбец с новыми наименованиями, включающими данные по размеру и полу.
Аргументы функции без разделителей
Если разделители между содержимыми ячеек не нужны, в этом случае в значении каждого аргумента сразу указываем адреса требуемых элементов.
Правда, таким способом пользуются редко, так как сцепленные значения сразу будут идти друг за другом, что усложнит дальнейшую работу с ними.
Указание разделителя в отдельной ячейке
Вместо того, чтобы вручную указывать разделитель (пробел, запятая, любой другой символ, текст, число) в аргументах функции, его можно добавить в отдельную ячейку, и затем в аргументах просто ссылаться на нее.
Например, мы добавляем запятую и пробел (“, “) в ячейку B16.
В этом случае, аргументы функции нужно заполнить следующим образом.
Но здесь есть один нюанс. Чтобы при копировании формулы функции на другие ячейки не произошло нежелательного сдвига адреса ячейки с разделителем, ссылку на нее нужно сделать абсолютной. Для этого выделив адрес в поле соответствующего аргумента нажимаем кнопку F4. Напротив обозначений столбца и строки появятся символы “$”. После этого можно нажимать кнопку OK.
Визуально в ячейке результат никак не будет отличаться от полученного ранее.
Однако формула будет выглядет иначе. И если мы решим изменить разделитель (например, на точку), нам не нужно будет корректировать аргументы функции, достаточно будет просто изменить содержимое ячейки с разделителем.
Как ранее было отмечено, добавить в качестве разделителя можно любую текстовую, числовую и иную информацию, которой изначально не было в таблице.
Таким образом, функция СЦЕП (СЦЕПИТЬ) предлагает большую вариативность действий, что позволяет наилучшим образом представить объединенные данные.
Функция СЦЕПИТЬ для большого количества ячеек
Один из вариантов заключатся в том, чтобы в качестве ссылки на ячейки указать массив данных. Следует сразу отметить, что данные могут располагаться по горизонтали или вертикали. Если данные расположены в одной строке, то делаем следующее. Для примера, отдельные по ячейкам слова находится в 5-й строке. Теперь в пустой ячейке указываем весь диапазон для соединения и через амперсанд (&) добавляем пробел (» «).
Затем нажимаем F9, для того, чтобы формула выдала результат вычисления, в нашем случае это будет массив.
Как видно к каждому слову добавился пробел, а между словами стоит точка с запятой – как раз то, что нужно для вставки в формулу СЦЕПИТЬ. Теперь убираем лишние скобки и вставляем этот массив в формулу. Нажимаем Enter.
Данные могут быть расположены не по горизонтали, (как в примере выше), а по вертикали. В этом случае в получаемом массиве значения будут разделены двоеточием. Придется сделать один лишний шаг, чтобы заменить их на точку с запятой (через Найти и заменить, горячая клавиша Ctrl + H, либо еще быстрее — использовать функцию ТРАНСП, чтобы из горизонтального массива сделать вертикальный).
Этот вариант работает неплохо, но подходит для одноразового использования, т.к. исходная информация не связана с исходными ячейками. Для изменения придется лезть внутрь формулы или повторять действия для новых данных. Кроме того, существует ограничение по длине одной формулы, и соединить таким образом несколько тысяч ячеек не всегда получается.
Поэтому переходим к следующему способу. Он, признаться, выглядит не очень эстетично. Зато дешево, надежно, и практично! (с) Во всяком случае прием помогает решить проблему. А это самое главное. Нам потребуется один дополнительный столбец (или строка, смотря как расположены исходные данные для соединения).
Рассмотрим только вертикальное расположение данных (горизонтальное будет работать аналогично). Суть в том, чтобы рядом с данными создать столбец с формулой СЦЕПИТЬ, которая последовательно будет присоединять по одному слову по мере продвижения вниз. В нашем случае первая формула будет содержать только слово «Александр » (и пробел), следующая ниже добавляет «Сергеевич » (и пробел) и т.д.
Искомой ячейкой будет самая последняя, объединяющая уже все слова. Результат можно оставить в виде формулы, а можно сохранить как значение, удалив все расчеты.
Амперсанд — это своеобразный знак “+” для текстовых значений, которые нам нужно соединить. Найти амперсанд можно на клавиатуре, возле циферки “7”, ну по крайней мере, на большинстве клавиатур там он и находится. А если его нет, значит, внимательно посмотрите куда его перенесли. А так данный вариант похож, как и функция СЦЕПИТЬ, за исключением специфики орфографии и об этом не стоит забывать, так, к примеру, функция СЦЕПИТЬ сама ставит кавычки, а вот при использовании амперсанда вы прописываете их вручную. Но вот в возможности склеить значения в ячейках Excel по скорости, использование 2 варианта самое оптимальное.
Рассмотрим несколько примеров по использувании функции СЦЕПИТЬ в Excel:
Пример №1:
Нам надо сцепить текстовые значения, а именно ФИО сотрудников выгруженное с другой программы (зачастую выгруженные таблицы базы данных), но разбросанное в разных ячейках. Задача на первый взгляд легка, так оно, конечно, и есть, за исключением того, что нам надо фамилия и инициалы сотрудников, то есть сократить имя и по отчеству. И это можно сделать если использовать сочетание функций, а именно функция, которая, позволяет извлекать из текста первые буквы — функция ЛЕВСИМВ, в таком случае мы получим фамилию с инициалами в одной формуле.
Пример №2:
Нам надо сцепить разрозненную информацию о договорах его номер и дату заключения. К примеру, у нас есть “Договор на транспортные перевозки” “№23” “02.09.2015” и нам надо получить все данные одним предложением “Договор на транспортные перевозки №23 от 02.09.2015 года”. Но при использовании возможности сцепить диапазон ячеек с помощью функции СЦЕПИТЬ, мы не сможем получить нужный нам результат так будет произведена склейка текстовых значений, а нас есть дата. Соответственно, данные будут исковерканы. Для получения результата необходимо использовать дополнительно функцию ТЕКСТ. Она позволит, назначить для даты соответствующий формат «ДД.ММ.ГГГГ», соответственно формату мы получим данные двузначные для дней “ДД” и месяца “ММ” и четырёхзначное для года “ГГГГ”. Таким образом, мы сможем получить правильный конечный результат.
Функции СЦЕПИТЬ / СЦЕП
Второй способ – использование функции СЦЕПИТЬ. Она, по сути, имитирует работу оператора конкатенации, но от нас не требуется вводить его вручную. Части соединяемого текста нужно указать в качестве аргументов функции, например:
=СЦЕПИТЬ(A1;A2;A3)
=СЦЕПИТЬ(“До дедлайна осталось “;A1)
=СЦЕПИТЬ(A1;” “;A2)
Минус у данного способа тот же, что и у предыдущего – нужно вручную вводить разделители при необходимости. Кроме того, функция СЦЕПИТЬ требует указания каждой ячейки по отдельности. Ее наследница, функция СЦЕП, которая появилась в новых версиях Excel, умеет соединить весь текст в указанном диапазоне, что гораздо удобнее. Вместо того, чтобы кликать каждую ячейку, можно выделить сразу весь диапазон, например:
=СЦЕП(A1:B10)
Формула выше склеит последовательно текст из 20 ячеек диапазона A1:B10. Склеивание происходит в следующем порядке: слева направо до конца строки, а потом переход на следующую строку.
Кроме того, данную функцию можно использовать как формулу массива, передавая ей в качестве аргумента условие для соединения строк. Например, формула
={СЦЕП(ЕСЛИ(A2:A10=”ОК”;B2:B10;””))}
соединит между собой только те ячейки столбца B, рядом с которыми в столбце A указано “ОК”.
Обратная функция
На первый взгляд обратная функция СЦЕПИТЬ – РАСЦЕПИТЬ. Однако это не так. Для отбора слов в одной ячейке используются следующие формулы:
- ЛЕВСИМВ отображает заданное количество символов с начала строки. Имеет два аргумента: ссылку на текст и количество знаков.
- ПРАВСИМВ то же самое только с конца строки. Блоки те же.
- ПСТР помогает отобразить знаки с указанной позиции. В составе имеет три аргумента: ссылка, позиция, количество символов.
Рассмотрим использование функций на основании первого примера из статьи:
Задача 1. Нужна только фамилия:
Задача 2. Аналогично, только необходимо имя:
Задача 3. В конце отобразим отчество:
Как видите, использование функции СЦЕПИТЬ помогает быстро объединить данные, которые содержаться в отдельных ячейках. При работе важно использовать двойные кавычки для текстовых аргументов и знаков, а внутри формулы разделять блоки точкой с запятой. Также не забывайте отделять слова вставками с пробелами в кавычках.
Аргументы функции
- text (текст1) – первое значение, которое вы хотите объединить с другим значением. Значение может быть текстом, буквой, цифрой, ссылкой на ячейку;
- [text2], … ([текст2]) – значение, с которым вы хотите объединить аргумент text (текст1). Всего в одной функции можно использовать до 255 значений, суммарное число букв которых не может превышать более “8192”.
Функция СЦЕПИТЬ в Excel, включая примеры
Смотрите также function.xls хотите хранить на”, в ячейкеSerge(Number in stock) Вы живёте и более. Если необходимо, на длинное имя, из пробела, амперсандаb4 свыше 32767 символов (ограничение Excel 2016 при отсутствииФункция ТЕКСТ преобразует числовое в строке результата С2. Результат: “Виталий=СЦЕПИТЬ(В2;” “;C2)Примечание:в нем соответствие листе текст приветствия,А2
: CONCATENATE — количество какой версией Excel чтобы в ячейке она очень проста и еще одногоa5
для ячейки), функция подписки на Office 365. значение в текст они будут отображаться Токарев”.Имя аргумента Мы стараемся как можно формул на русском текущую дату иформулу Code=СЕГОДНЯ()Что значит “соответствие”?» « пользуетесь.
появились знаки пунктуации, в использовании и
пробела, и значение
-
b5 СЦЕП вернет ошибку Если у вас
-
и объединяет числа
слитно. Добавьте пробелы |
=СЦЕПИТЬ(С2;”, “;В2) |
Описание оперативнее обеспечивать вас |
– аглицким. пользоваться функциейВ английской версии:Buhkalenok– символ пробела |
Вот и всё! Когда пробелы или что-то |
одинаково работает во в ячейке C3.a6 #ЗНАЧ!. |
Примеры
есть подписка на с текстом или в формулу сОбъединяет текст в ячейкетекст1 актуальными справочными материаламиNikita12345
СЦЕПИТЬ() |
||
Code |
: Что значит “соответствие”?{/post}{/quote} |
в кавычках |
нажмете |
еще, добавьте их |
всех версиях Excel, |
Fourth & Pine |
||
b6 |
Скопируйте данные примеров из |
|
Office 365, убедитесь, что символами. функцией СЦЕПИТЬ. Это |
C2, строку, состоящую (обязательный) на вашем языке.: Спасибо БОЛЬШОЕ!, то есть альтернативное=TODAY()например, |
|
F16 |
Enter в аргументы функции. а также в=B3 & ” &a7 |
|
приведенных ниже таблиц |
у вас установленаНапример если в ячейке можно сделать двумя из запятой иПервый элемент для объединения. Эта страница переведена |
|
Вы меня очень |
решение – можноВ ячейке В2Сцепить – CONCATENATE(Product) – наименование, появится полное имя:В данном примере мы других электронных таблицах, ” & C3 |
|
b7 и вставьте их |
последняя версия Office. A1 содержится номер способами. пробела, и значение Это может быть автоматически, поэтому ее выручили ;) использовать одну формулу, |
Распространенные неполадки
применяем формулу Code=СЦЕПИТЬ(A1;A2) |
ВПР – VLOOKUP |
Введите вот такую формулуJosephine Carter |
хотим, чтобы между например, в GoogleОбъединяет те же элементы,Результат: в ячейку A1Функция СЦЕП объединяет текст 23,5, чтобы отформатироватьДобавьте двойные кавычки с в ячейке B2. текстовое значение, число текст может содержать |
С меня виртуальное в которой одновременно |
В английской версии:Buhkalenok в ячейке. именами стоял пробел Sheets. что и вa1b1a2b2a4b4a5b5a6b6a7b7 нового листа Excel.
|
Теперь, потянув мышью за (чтобы не получалось |
Примечание: предыдущем примере, ноПример 3 Чтобы отобразить результаты или строк, но |
Рекомендации
денежное значение можно |
(” “). Например: |
=СЦЕПИТЬ(B3;” & “;C3) ячейку. |
ошибки. Для насЕще раз БОЛЬШОЕ текст приветствия, работает=CONCATENATE(A1,A2) Serge: маркер автозаполнения, скопируйте что-то вроде –Если Вы никогда с помощью оператораДанные формул, выделите их не добавляет разделитель использовать следующую формулу: =СЦЕПИТЬ(“Привет,”; ” “; |
Объединяет строку в ячейкетекст2,… важно, чтобы эта |
спасибо хорошим людишкам функция СЕГОДНЯ(), переводитсяНо результат получается: C:Program FilesMicrosoft OfficeOffice121049=CONCATENATE(F17,” “,F16) формулу во всеJosephineCarter прежде не использовали&Имя и нажмите клавишу или аргументы IgnoreEmpty. =ТЕКСТ(A1;”0,00 ₽”) |
Макрос для объединения ячеек без потери текста.
Имеем текст в нескольких ячейках и желание – объединить эти ячейки в одну, слив туда же их текст. Проблема в одном – кнопка Объединить и поместить в центре (Merge and Center) в Excel объединять-то ячейки умеет, а вот с текстом сложность – в живых остается только текст из верхней левой ячейки.
Чтобы объединение ячеек происходило с объединением текста (как в таблицах Word) придется использовать макрос. Для этого откройте редактор Visual Basic на вкладке Разработчик – Visual Basic (Developer – Visual Basic) или сочетанием клавиш Alt+F11, вставим в нашу книгу новый программный модуль (меню Insert – Module) и скопируем туда текст такого простого макроса:
Sub MergeToOneCell() Const sDELIM As String = " " 'символ-разделитель Dim rCell As Range Dim sMergeStr As String If TypeName(Selection) <> "Range" Then Exit Sub 'если выделены не ячейки - выходим With Selection For Each rCell In .Cells sMergeStr = sMergeStr & sDELIM & rCell.Text 'собираем текст из ячеек Next rCell Application.DisplayAlerts = False 'отключаем стандартное предупреждение о потере текста .Merge Across:=False 'объединяем ячейки Application.DisplayAlerts = True .Item(1).Value = Mid(sMergeStr, 1 + Len(sDELIM)) 'добавляем к объед.ячейке суммарный текст End With End Sub
Теперь, если выделить несколько ячеек и запустить этот макрос с помощью сочетания клавиш Alt+F8 или кнопкой Макросы на вкладке Разработчик (Developer – Macros), то Excel объединит выделенные ячейки в одну, слив туда же и текст через пробелы.
Дополнительная информация
- С помощью функции вы можете объединить максимум 255 строчек;
- Для сцепки вы можете использовать текст, ссылки на ячейки, числа или комбинацию этих значений.
Источники
- https://mir-tehnologiy.ru/funktsiya-stsepit-v-excel/
- https://MicroExcel.ru/funkcziya-sczepit/
- https://statanaliz.info/excel/funktsii-i-formuly/funktsiya-stsepit-concatenate/
- https://topexcel.ru/kak-ispolzuetsya-funkciya-scepit-v-excel/
- https://zen.yandex.ru/media/id/59affb7afd96b11e8eadd771/5aa8c1117ddde8748c525008
- https://excelhack.ru/funkciya-concatenate-scepit-v-excel/
- https://my-excel.ru/excel/excel-scepit-po-anglijski.html
- https://www.planetaexcel.ru/techniques/7/89/