Макросы в excel сцепить ячейки в excel

Хитрости »

5 Август 2013              151263 просмотров


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

Часто бывает ситуация, когда необходимо из трех разных столбцов сцепить данные в одну строку с разделителем. Допустим в А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) -создать стандартный модуль(InsertModule) и в него вставить скопированный текст. После чего функцию можно будет вызвать из Диспетчера функций(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

Макрос соединения текста в Excel

Ранее уже рассказывал о замечательной функции в программе Excel,  которая называется «СЦЕПИТЬ».

Функция довольно удобная, не есть у нее один большой недостаток ячейки для сцепки нужно указывать по одной, выделение диапазона не работает или работает некорректно.

Для больших объемов сцепки (слияния текста)  требуются значительные трудозатраты.

Достойных аналогов этой функции, к сожалению, найти не удалось.

На помощь пришел язык VBA для написания макросов в «Excel».

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

Макрос слияния выглядит следующим образом:

  1. Sub Sliyanie()
  2. Dim txt As String ‘Объявляем переменную ТХТ
  3. txt = «» ‘присваиваем объявленной переменной пустое значение
  4. Dim cell
  5. For Each cell In Selection ‘ для всех ячеек в выделении выполняем следующие действия
  6. txt = txt + cell.text ‘к значению переменной txt добавляем значение ячейки
  7. Next
  8. MsgBox (txt) ‘выводим итоговое значение
  9. End Sub

Это самый простой вариант макроса слияния текстовых значений ячеек в выделенном диапазоне.

Его можно усложнить и оптимизировать под выполнение Вашей конкретной задачи.

Например:

Фрагмент макроса сцепки текста

Фрагмент макроса сцепки текста

Добавить форму UserForm с двумя полями TextBox. В одном поле указывать разделитель ( «/», «;», «.», и т.д.) а в другое поле выводить результат для удобства копирования.

Можно на форму UserForm вывести кнопки активации макроса «Соединить» и для ленивых кнопку «Копировать» — для копирования содержимого поля с результатом в буфер обмена.

Макрос копирования по ссылке: http://ruexcel.ru/ctrlc/

Можно добавить чек бокс (checkbox) для выбора учитывать пустые ячейки или пропускать их.

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

Склеивание текста по условию

Про то, как можно быстро склеивать текст из нескольких ячеек в одну и, наоборот, разбирать длинную текстовую строку на составляющие я уже писал. Теперь же давайте рассмотрим близкую, но чуть более сложную задачу — как склеивать текст из нескольких ячеек при выполнении определенного заданного условия. 

Допустим, что у нас имеется база данных по клиентам, где одному названию компании может соответствовать несколько разных email’ов ее сотрудников. Наша задача состоит в том, чтобы собрать все адреса по названиям компаний и сцепить их (через запятую или точку с запятой), чтобы сделать потом, например, почтовую рассылку по клиентам, т.е. получить на выходе что-то похожее на:

склеивание (сцепка) текста по условию

Другими словами, нам нужен инструмент, который будет склеивать (сцеплять) текст по условию — аналог функции СУММЕСЛИ (SUMIF), но для текста.

Способ 0. Формулой

Не очень изящный, зато самый простой способ. Можно написать несложную формулу, которая будет проверять отличается ли компания в очередной строке от предыдущей.  Если не отличается, то приклеиваем через запятую очередной адрес. Если отличается, то «сбрасываем» накопленное, начиная заново:

Сцепка текста по условию формулой

Минусы такого подхода очевидны: из всех ячеек полученного дополнительного столбца нам нужны только последние по каждой компании (желтые). Если список большой, то чтобы их быстро отобрать придется добавить еще один столбец, использующий функцию ДЛСТР (LEN), проверяющий длину накопленных строк:

Отбор строк

Теперь можно отфильтровать единички и скопировать нужные склейки адресов для дальнейшего использования.

Способ 1. Макрофункция склейки по одному условию

Если исходный список не отсортирован по компаниям, то приведенная выше простая формула не работает, но можно легко выкрутиться с помощью небольшой пользовательской функции на VBA. Откройте редактор Visual Basic нажатием на сочетание клавиш Alt+F11 или с помощью кнопки Visual Basic на вкладке Разработчик (Developer). В открывшемся окне вставьте новый пустой модуль через меню Insert — Module и скопируйте туда текст нашей функции:

Function MergeIf(TextRange As Range, SearchRange As Range, Condition As String)
    Dim Delimeter As String, i As Long
    Delimeter = ", " 'символы-разделители (можно заменить на пробел или ; и т.д.)
    
    'если диапазоны проверки и склеивания не равны друг другу - выходим с ошибкой
    If SearchRange.Count <> TextRange.Count Then
        MergeIf = CVErr(xlErrRef)
        Exit Function
    End If
    
    'проходим по все ячейкам, проверяем условие и собираем текст в переменную OutText
    For i = 1 To SearchRange.Cells.Count
        If SearchRange.Cells(i) Like Condition Then OutText = OutText & TextRange.Cells(i) & Delimeter
    Next i
    
    'выводим результаты без последнего разделителя
    MergeIf = Left(OutText, Len(OutText) - Len(Delimeter))
End Function

Если теперь вернуться в Microsoft Excel, то в списке функций (кнопка fx в строке формул или вкладка Формулы — Вставить функцию) можно будет найти нашу функцию MergeIf в категории Определенные пользователем (User Defined). Аргументы у функции следующие:

функция сцепить если выполняется условие

Способ 2. Сцепить текст по неточному условию

Если заменить в 13-й строчке нашего макроса первый знак = на оператор приблизительного совпадения Like, то можно будет осуществлять склейку по неточному совпадению исходных данных с критерием отбора. Например, если название компании может быть записано в разных вариантах, то мы можем одной функцией проверить и собрать их все:

склейка по приблизительному условию

Поддерживаются стандартные спецсимволы подстановки:

  • звездочка (*) — обозначает любое количество любых символов (в т.ч. и их отсутствие)
  • вопросительный знак (?) — обозначает один любой символ
  • решетка (#) — обозначает одну любую цифру (0-9)

По умолчанию оператор Like регистрочувствительный, т.е. понимает, например, «Орион» и «оРиОн» как разные компании. Чтобы не учитывать регистр можно добавить в самое начало модуля в редакторе Visual Basic строчку Option Compare Text, которая переключит Like в режим, когда он невосприимчив к регистру.

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

  • ?1##??777RUS — выборка по всем автомобильным номерам 777 региона, начинающимся с 1
  • ООО* — все компании, название которых начинается на ООО
  • ##7## — все товары с пятизначным цифровым кодом, где третья цифра 7
  • ????? — все названия из пяти букв и т.д.

Способ 3. Макрофункция склейки текста по двум условиям

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

Function MergeIfs(TextRange As Range, SearchRange1 As Range, Condition1 As String, SearchRange2 As Range, Condition2 As String)
    Dim Delimeter As String, i As Long
    Delimeter = ", " 'символы-разделители (можно заменить на пробел или ; и т.д.)
    
    'если диапазоны проверки и склеивания не равны друг другу - выходим с ошибкой
    If SearchRange1.Count <> TextRange.Count Or SearchRange2.Count <> TextRange.Count Then
        MergeIfs = CVErr(xlErrRef)
        Exit Function
    End If
    
    'проходим по все ячейкам, проверяем все условия и собираем текст в переменную OutText
    For i = 1 To SearchRange1.Cells.Count
        If SearchRange1.Cells(i) = Condition1 And SearchRange2.Cells(i) = Condition2 Then
            OutText = OutText & TextRange.Cells(i) & Delimeter
        End If
    Next i
    
    'выводим результаты без последнего разделителя
    MergeIfs = Left(OutText, Len(OutText) - Len(Delimeter))
End Function

Применяться она будет совершенно аналогично — только аргументов теперь нужно указывать больше:

склейка по нескольким условиям

Способ 4. Группировка и склейка в Power Query

Решить проблему можно и без программирования на VBA, если использовать бесплатную надстройку Power Query. Для Excel 2010-2013 ее можно скачать здесь, а в Excel 2016 она уже встроена по умолчанию. Последовательность действий будет следующей:

Power Query не умеет работать с обычными таблицами, поэтому первым шагом превратим нашу таблицу в «умную». Для этого ее нужно выделить и нажать сочетание Ctrl+T или выбрать на вкладке Главная — Форматировать как таблицу (Home — Format as Table). На появившейся затем вкладке Конструктор (Design) можно задать имя таблицы (я оставил стандартное Таблица1):

Умная таблица

Теперь загрузим нашу таблицу в надстройку Power Query. Для этого на вкладке Данные (если у вас Excel 2016) или на вкладке Power Query (если у вас Excel 2010-2013) жмем Из таблицы (Data — From Table):

Загрузка в Power Query

В открывшемся окне редактора запросов выделяем щелчком по заголовку столбец Компания и сверху жмем кнопку Группировать (Group By). Вводим имя нового столбца и тип операции в группировке — Все строки (All Rows):

Группировка в Power Query

Жмем ОК и получаем для каждой компании мини-таблицу сгруппированных значений. Содержимое таблиц хорошо видно, если щелкать левой кнопкой мыши в белый фон ячеек (не в текст!) в получившемся столбце:

Содержимое таблиц группировки

Теперь добавим еще один столбец, где с помощью функции склеим через запятую содержимое столбцов Адрес в каждой из мини-таблиц. Для этого на вкладке Добавить столбец жмем Пользовательский столбец (Add column — Custom column) и в появившемся окне вводим имя нового столбца и формулу сцепки на встроенном в Power Query языке М:

Пользовательский столбец с функцией склейки

Обратите внимание, что все М-функции регистрочувствительные (в отличие от Excel). После нажатия на ОК получаем новый столбец со склееными адресами:

Результат

Осталось удалить ненужный уже столбец ТаблАдресов (правой кнопкой мыши по заголовку — Удалить столбец) и выгрузить результаты на лист, нажав на вкладке Главная — Закрыть и загрузить (Home — Close and load):

Выгрузка результатов на лист

Важный нюанс: в отличие от предыдущих способов (функций), таблицы из Power Query не обновляются автоматически. Если в будущем произойдут какие-либо изменения в исходных данных, то нужно будет щелкнуть правой кнопкой в любое место таблицы результатов и выбрать команду Обновить (Refresh).

Ссылки по теме

  • Как разделить длинную текстовую строку на части
  • Несколько способов склеить текст из разных ячеек в одной
  • Использование оператора Like для проверки текста по маске

0 / 0 / 0

Регистрация: 17.06.2010

Сообщений: 10

1

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

29.04.2012, 19:31. Показов 11362. Ответов 9


Студворк — интернет-сервис помощи студентам

Такая вот проблема:
Есть данные:
А B C D
1 text text text
text text
text
2 text text text
text text
text
и так далее
Нужно макросом объеденить данные по столбцам C и D, при условии, что ячейка в первой строке столбца А не пустая, т.е. на выходе должно получиться:

А B C D
1 text text +text text+text+text

2 text text +text text+text+text

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



0



1 / 1 / 1

Регистрация: 10.04.2011

Сообщений: 415

30.04.2012, 12:19

2

нифига непонятно, если честно.
Сразу скажу — макрос тебе не нужен, это все делается с помощью формул.
в ячейку E1 напиши формулу:
=ЕСЛИ(ДЛСТР(A1)>0;СЦЕПИТЬ(B1;C11);»»)
Эта формула проверяет, что длина строки в ячейке A1 больше нуля (ячейка непустая), и в этом случае объединяет в ячейке E1 строки из ячеек B1..D1. В противном случае (если строка в A1 пустая, в E1 записывается тоже пустая строка (ты этот момент не оговорил).
Удачи



0



Tsvet

3 / 3 / 0

Регистрация: 08.09.2011

Сообщений: 111

01.05.2012, 10:14

3

Удаление пустых строк

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub DeleteEmptyRows()
    Dim LastRow As Long
    Dim r As Long
    LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    Application.ScreenUpdating = False
    For r = LastRow To 1 Step -1
        If Application.WorksheetFunction.CountA(Rows(r)) = 0 _
          Then Rows(r).Delete
    Next r
End Sub



0



1 / 1 / 1

Регистрация: 10.04.2011

Сообщений: 415

01.05.2012, 12:48

4

Цитата
Сообщение от Tsvet

For r = LastRow To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(r)) = 0 _
Then Rows(r).Delete
Next r
End Sub

ты тестировал или наобум написал? Имхо цикл неверно отработает из-за удаления строк…



0



3 / 3 / 0

Регистрация: 08.09.2011

Сообщений: 111

01.05.2012, 18:14

5

To Johny Walker:
Вообще то не я писал :-)
Но этот макрос у меня в книге Personal, пользуюсь, и никаких проблем нет, иначе я бы не выложил код сюда.
А что, действительно есть ошибка?

PS Правда, очень ценю ваши комменты, как одного из немногих реальных гуру на форуме…



0



7 / 7 / 12

Регистрация: 13.02.2007

Сообщений: 1,255

01.05.2012, 18:20

6

Отчего же нет? как раз наоборот все правильно отработает, так как цикл пробегает от конца массива к началу а не наоборот

С уважением,
Владимир



0



1 / 1 / 1

Регистрация: 10.04.2011

Сообщений: 415

01.05.2012, 18:31

7

Цитата
Сообщение от Tsvet

To Johny Walker:
Вообще то не я писал :-)
Но этот макрос у меня в книге Personal, пользуюсь, и никаких проблем нет, иначе я бы не выложил код сюда.
А что, действительно есть ошибка?

Не знаю, если работает — отлично. оказалось, наверное :-)))))))



0



Franck

0 / 0 / 0

Регистрация: 17.06.2010

Сообщений: 10

05.05.2012, 12:52

 [ТС]

8

Ну да, перечитал и понял, что непонятно написал.
Еще раз попытаюсь сформулировать проблему.
По роду работы иногда приходится переносить очень большие таблицы Word в Эксель для дальнейшей обработки. К примеру, в последнем столбце идет описание, довольно длинное и Эксель ячейки из последнего столбца разбивает на несколько строк, а очень важно, чтобы информация по определенной позиции укладывалась в одну строку, иначе таблицу неудобно обрабатывать. Вручную сцеплять значения из ячеек, удалять лишние и затем удалять пустые строки доооолго.
Есть такой вот пример кода, который это делает, но очень медленно:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Обработчик_строк()
Sheets("1").Select
For i = 9 To 100
s = "A" + Str(i)
ss = "V" + Str(i)
Range("A9").Select
j = i + 1
If ActiveCell.FormulaR1C1 <> "" Then
While (Cells(j, "A").FormulaR1C1 = "") And (j < 100)
Cells(i, "V").FormulaR1C1 = Cells(i, "v").FormulaR1C1 + " " + Cells(j, "V").FormulaR1C1
Cells(j, "V").FormulaR1C1 = ""
j = j + 1
Wend
End If
Next
For i = 1 To 100
s = "A" + Str(i)
Cells(i, "A").Select
While ActiveCell.FormulaR1C1 = ""
Selection.EntireRow.Delete
Wend
Next
End Sub

Можно это все сделать поэффективней?
Сорри за первый пост, при отправке сообщения форматирование съехало.



0



Gleb1

1 / 1 / 0

Регистрация: 19.05.2011

Сообщений: 80

08.05.2012, 14:54

9

Если хотите, попробуйте воспользоваться моим вариантом.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Sub KonkStr()
Dim I As Long, LL As Long, LRows As Long, SS As Long
Dim J As Integer, K As Long, sss As String, Ip As Integer
Sheets("1").Select
Range("A9").Select 'нач.яч.просмотра 
LRows = ActiveSheet.Rows.Count
Application.ScreenUpdating = False
J = 5 'заменить на свой номер колонки, в которой объединяются ячейки
SS = 9 'номер нач.строки для просмотра (можно запросить в диалоге)
Do
    LL = Selection.End(xlDown).Row
    If LL = LRows Then
        Cells(SS, J).Select
        LL = Selection.End(xlDown).Row + 1
        If LL = LRows + 1 Then Exit Do
        Ip = 1
    End If
    K = LL - SS - 1
    If K > 0 And Cells(LL - 1, 1) = "" Then
        sss = Cells(SS, J).Value
        For I = SS + 1 To LL - 1
            sss = sss & Cells(I, J).Value
        Next I
        Cells(SS, J).Value = sss
        For I = LL - 1 To SS + 1 Step -1
            Rows(I).Delete
        Next I
    End If
    If Ip = 1 Then Exit Do
    SS = SS + 1
    Cells(SS, 1).Select
Loop
Application.ScreenUpdating = True
End Sub



0



0 / 0 / 0

Регистрация: 17.06.2010

Сообщений: 10

10.05.2012, 11:02

 [ТС]

10

Gleb1, огромное спасибо! Именно то, что нужно!



0



VBA in Excel stands for Visual Basic for Applications which is Microsoft’s programming language. To optimize the performance and reduce the time in Excel we need Macros and VBA is the tool used in the backend. Concatenation means to join two or more data into a single data. There are various ways we can perform concatenation in Excel using built-in functions, operators, etc.

Some helpful links to get more insights about concatenate and using VBA in Excel :

  1. Record Macros in Excel
  2. CONCATENATE in Excel
  3. How to Create a Macro in Excel?

In this article, we are going to see about concatenate operators and how to use VBA to concatenate strings as well as numbers.

Implementation :

In the Microsoft Excel tabs, select the Developer Tab. Initially, the Developer Tab may not be available. 

The Developer Tab can be enabled easily by a two-step process :

  • Right-click on any of the existing tabs at the top of the Excel window.
  • Now select Customize the Ribbon from the pop-down menu.

  • In the Excel Options Box, check the box Developer to enable it and click on OK.

  • Now, the Developer Tab is visible.

Now, we need to open the Visual Basic Editor. There are two ways :

  • Go to Developer and directly click on the Visual Basic tab.
  • Go to the Insert tab and then click on the Command button. Drag and insert the command button in any cell of the Excel sheet.

Now, double-click on this command button. This will open the Visual Basic Application Editor tab, and we can write the code. The benefit of this command button is that just by clicking on the button we can see the result of concatenation, and also we don’t need to make any extra Macro in Excel to write the code.

Another way is by right-clicking on the command button and then select View Code as shown below :

CONCATENATE Operators:

To concatenate operator mostly used in Excel is “&” for numbers as well as strings. But for strings, we can also use “+” operator to concatenate two or more strings.

The syntax to concatenate using formula is :

cell_number1 & cell_number2 ; without space in between

cell_number1 & " " & cell_number2;  with space in between

cell_number1 & "Any_Symbol" & cell_number2 ; with any symbol in between

cell_number(s) & "string text" ; concatenate cell values and strings

"string_text" & cell_number(s) ; concatenate cell values and strings

CONCATENATE  Two Numbers:

Example 1: Take any two numbers as input and concatenate into a single number.

The code to concatenate two numbers in Excel is :

Private Sub CommandButton1_Click()
'Inserting the number num1 and num2 
Dim num1 As Integer: num1 = 10
Dim num2 As Integer: num2 = 50
'Declare a variable c to concatenate num1 and num2
Dim c As Integer
'Concatenate the numbers
c = num1 & num2
MsgBox ("The result after concatenating two numbers are: " & c)
End Sub

Run the above code in VBA and the output will be shown in the message box.

Output :

The result after concatenating two numbers are: 1050

You can also click on the command button and the same message will be displayed. 

Example 2: Say, now we take two numbers from the cells of the Excel Sheet and store the result back in the Excel sheet. This time we are not going to use the command button.

Step 1: Open the VB editor from the Developer Tab.

Developer  -> Visual Basic -> Tools -> Macros

Step 2: The editor is now ready where we can write the code and syntax for concatenation.

Now write the following code and run it.

Sub Concatenate_Numbers()
'Taking two variables to fetch the two numbers and to store
Dim num1 As Integer
Dim num2 As Integer
'Fetching the numbers from Excel cells num1 from A2 and num2 from B2
num1 = Range("A2").Value
num2 = Range("B2").Value
'Find the concatenate and store in cell number C2
Range("C2").Value = num1 & num2
End Sub

CONCATENATED

Concatenate Two Or more strings:

We can use either “+” operator or “&” operator.

Example 1: Let’s concatenate the strings “Geeks”, “for”, “Geeks”.

Repeat Step 1 as discussed in the previous section to create a new VBA module of name “Concatenate_Strings”

Now write either of the following codes and run it to concatenate two or more strings.

Sub Concatenate_Strings()
'Taking three variables to fetch three strings and to store
Dim str1 As String
Dim str2 As String
Dim str3 As String
'Fetching the strings from Excel cells
str1 = Range("A2").Value
str2 = Range("B2").Value
str3 = Range("C2").Value
'Find the concatenate and store in cell number D2
Range("D2").Value = str1 + str2 + str3
End Sub
Sub Concatenate_Strings()
'Taking three variables to fetch three strings and to store
Dim str1 As String
Dim str2 As String
Dim str3 As String
'Fetching the strings from Excel cells
str1 = Range("A2").Value
str2 = Range("B2").Value
str3 = Range("C2").Value
'Find the concatenate and store in cell number D2
Range("D2").Value = str1 & str2 & str3
End Sub

CONCATENATED

Example 2: Let’s concatenate three strings and add in different lines and display them in a message box this time.

Create a new module and write the code. The keyword used for adding the string in the next line is vbNewLine

The code is :

Sub Concatenate_DifferentLines()
'Taking three variables to store
Dim str1 As String
Dim str2 As String
Dim str3 As String
'Initialize the strings
str1 = "The best platform to learn any programming is"
str2 = "none other than GeeksforGeeks"
str3 = "Join today for best contents"
'Display the concatenated result in a message box
MsgBox (str1 & vbNewLine & str2 & vbNewLine & str3)
End Sub

Example 3: Let’s concatenate two strings with space in between by taking an example of the full name of a person which contains First Name and Last Name.

Create a new module Concatenate_Strings_Space and write the following code :

Sub Concatenate_Strings_Space()
'Taking two variables to fetch two strings and to store
Dim fname As String
Dim lname As String
'Fetching the strings from Excel cells
fname = Range("A2").Value
lname = Range("B2").Value
'Find the concatenate and store in cell number C2
Range("C2").Value = fname & " " & lname
End Sub

Содержание

  1. Общая информация
  2. Описание и синтаксис функции СЦЕПИТЬ
  3. Вставка и настройка функции
  4. Функция СЦЕПИТЬ для большого количества ячеек
  5. Сцепить диапазон ячеек в Excel при помощи оператора & (амперсанд) вместо функции СЦЕПИТЬ
  6. Функции СЦЕПИТЬ / СЦЕП
  7. Обратная функция
  8. Аргументы функции
  9. Функция СЦЕПИТЬ в Excel, включая примеры
  10. Примеры
  11. Распространенные неполадки
  12. Рекомендации
  13. Макрос для объединения ячеек без потери текста.
  14. Дополнительная информация

Общая информация

Данная функция имеет один основной аргумент, а остальные являются дополнительными. Для корректной работы блоки необходимо разделять точкой с запятой. Формула имеет следующий вид:

В качестве составляющих могут выступать текстовые блоки, знаки препинания, числа, ссылки на ячейки, а также другие формулы. Обязательно заключайте текст в кавычки, иначе функция выдает ошибку #ИМЯ? и не работает. Для остальных форматов это не нужно.

Функция СЦЕПИТЬ имеет также символьный аналог в виде значка амперсанда & (Shift+6 в английской раскладке клавиатуры), который намного удобнее использовать.

На заметку! В последней версии редактора 2016 года данный инструмент на английском называется Concat.

Особенностью данного инструмента является то, что он работает только со строками. Если информация записана в столбик, то предварительно нужно транспонировать массив при помощи формулы ТРАНСП, а затем объединить ячейки.

Описание и синтаксис функции СЦЕПИТЬ

Данная функция начиная с Excel 2016 сменила название на “СЦЕП”, однако, для тех, кто привык к старому наименованию (“СЦЕПИТЬ”), оператор под этим названием также доступен в программе. СЦЕП и СЦЕПИТЬ абсолютно взаимозаменяемы и выполняют одну и ту же операцию по объединению содержимого выбранных ячеек в одну общую.

Формула функций выглядит так:

=СЦЕП(текст1;текст2;...) или =СЦЕПИТЬ(текст1;текст2;...)

Максимальное количество аргументов – 255.

Вставка и настройка функции

Как мы знаем, при объединении нескольких ячеек в одну, содержимое всех элементов за исключением самой верхней левой стирается. Чтобы этого не происходило, нужно использовать функцию СЦЕПИТЬ (СЦЕП).

  1. Для начала определяемся с ячейкой, в которой планируем объединить данные из других. Переходим в нее (выделяем) и щелкаем по значку “Вставить функцию” (fx).
  2. В открывшемся окне вставки функции выбираем категорию “Текстовые” (или “Полный алфавитный перечень”), отмечаем строку “СЦЕП” (или “СЦЕПИТЬ”) и кликаем OK.
  3. На экране появится окно, в котором нужно заполнить аргументы функции, в качестве которых могут быть указаны как конкретные значения, так и ссылки на ячейки. Причем последние можно указать как вручную, так и просто кликнув по нужным ячейкам в самой таблице (при это курсор должен быть установлен в поле для ввода значения напротив соответствующего аргумента). В нашем случае делаем следующее:
    • находясь в поле “Текст1” щелкаем по ячейке (A2), значение которой будет стоять на первом месте в объединенной ячейке;
    • кликаем по полю “Текст2”, где ставим запятую и пробел (“, “), которые будут служит разделителем между содержимыми ячеек, указанных в аргументах “Текст1” и “Текст3” (появится сразу же после того, как мы приступим к заполнению аргумента “Текст2”). Можно на свое усмотрение указывать любые символы: пробел, знаки препинания, текстовые или числовые значения и т.д.
    • переходим в поле “Текст3” и кликаем по следующей ячейке, содержимое которой нужно добавить в общую ячейку (в нашем случае – это B2).
    • аналогичным образом заполняем все оставшиеся аргументы, после чего жмем кнопку OK. При этом увидеть предварительный результат можно в нижней левой части окна аргументов.
  4. Все готово, нам удалось объединить содержимое всех выбранных ячеек в одну общую.
  5. Выполнять действия выше для остальных ячеек столбца не нужно. Просто наводим указатель мыши на правый нижний угол ячейки с результатом, и, после того как он сменит вид на небольшой черный плюсик, зажав левую кнопку мыши тянем его вниз до нижней строки столбца (или до строки, для которой требуется выполнить аналогичные действия).
  6. Таким образом, получаем заполненный столбец с новыми наименованиями, включающими данные по размеру и полу.

Аргументы функции без разделителей

Если разделители между содержимыми ячеек не нужны, в этом случае в значении каждого аргумента сразу указываем адреса требуемых элементов.

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

Указание разделителя в отдельной ячейке

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

Например, мы добавляем запятую и пробел (“, “) в ячейку 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. ПСТР помогает отобразить знаки с указанной позиции. В составе имеет три аргумента: ссылка, позиция, количество символов.

Рассмотрим использование функций на основании первого примера из статьи:

Задача 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.​

  • ​ из нескольких диапазонов​ числа в виде​ пробелом между ними​ Результат: “Виталий Токарев”.​ или ссылка на​

  • ​ неточности и грамматические​​ пиво :)​​ как константа хранится​Code​: Спасибо​E19​

​Теперь, потянув мышью за​ (чтобы не получалось​

​Примечание:​ предыдущем примере, но​​Пример 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/

Понравилась статья? Поделить с друзьями:
  • Макросы для excel pdf
  • Макросы в excel сумма прописью скачать бесплатно
  • Макросы для excel mac os
  • Макросы в excel ссылка на макрос
  • Макросы для excel 2013 скачать