Доброго дня. В примере - пошаговый вариант сцепки данных, т.е. по сути - сначала сцепляем по строкам, затем полученный столбец в одну ячейку. Вопрос: можно ли как-то опустить промежуточную сцепку, например, указать некий счетчик, указывающий сколько раз надо пройти по одному и тому же пути сцепки по строкам с автоматическим перебором строки +1 (по столбцу).
Вопрос возник в связи с желанием сделать формулу более компактой, потому как в рабочем файле данные расположены на разных листах (т.е. еще добавляется длина ссылки на лист), а при сцепке даже трех строк - формула громадна.
Доброго дня. В примере - пошаговый вариант сцепки данных, т.е. по сути - сначала сцепляем по строкам, затем полученный столбец в одну ячейку. Вопрос: можно ли как-то опустить промежуточную сцепку, например, указать некий счетчик, указывающий сколько раз надо пройти по одному и тому же пути сцепки по строкам с автоматическим перебором строки +1 (по столбцу).
Вопрос возник в связи с желанием сделать формулу более компактой, потому как в рабочем файле данные расположены на разных листах (т.е. еще добавляется длина ссылки на лист), а при сцепке даже трех строк - формула громадна.SYKim
Доброго дня. Как такой хитрый формат файла удалось создать? А по вопросу - точно можно написать свою UDF, выводящая всё в одну строку или столбец уже есть, можно подкрутить. см. скрин: http://prntscr.com/sixg4q
Доброго дня. Как такой хитрый формат файла удалось создать? А по вопросу - точно можно написать свою UDF, выводящая всё в одну строку или столбец уже есть, можно подкрутить. см. скрин: http://prntscr.com/sixg4qHugo
Function СКЛЕИТЬ2(Диапазон As Range, _ Optional Разделитель_Данных$ = "", _ Optional Переносить_ДА_НЕТ$ = "ДА") As String '--------------------------------------------------------------------------------------- ' Procedure : СКЛЕИТЬ ' Author : Alex_ST(+ доработка Hugo) ' Purpose : склеить тексты из выделенных ячеек в одну строку с задаваемыми при необходимости разделителями данных из разных ячеек ' Notes : по умолчанию включен перенос строк внутри ячейки '--------------------------------------------------------------------------------------- Dim Слитый_Текст$, Перенос_Строки$, Ячейка As Range, t&, fl As Boolean If UCase(Переносить_ДА_НЕТ$) <> "НЕТ" Then Перенос_Строки = vbLf t = Диапазон.Row For Each Ячейка In Диапазон If Len(Ячейка) Then If Ячейка.Row <> t Then fl = True t = Ячейка.Row If Слитый_Текст = "" Then Слитый_Текст = Application.WorksheetFunction.Trim(Ячейка.Value) ' будут удаляться лидирующие и финиширующие пробелы, а также многократные пробелы между словами (используется стандартная функция СЖПРОБЕЛЫ) Else Слитый_Текст = Слитый_Текст & IIf(fl, vbLf, Разделитель_Данных) & Перенос_Строки & Application.WorksheetFunction.Trim(Ячейка.Value) fl = False End If End If Next Ячейка СКЛЕИТЬ2 = Слитый_Текст End Function
[/vba]
Pelena, вроде не то. Но автор тот же [vba]
Код
Function СКЛЕИТЬ2(Диапазон As Range, _ Optional Разделитель_Данных$ = "", _ Optional Переносить_ДА_НЕТ$ = "ДА") As String '--------------------------------------------------------------------------------------- ' Procedure : СКЛЕИТЬ ' Author : Alex_ST(+ доработка Hugo) ' Purpose : склеить тексты из выделенных ячеек в одну строку с задаваемыми при необходимости разделителями данных из разных ячеек ' Notes : по умолчанию включен перенос строк внутри ячейки '--------------------------------------------------------------------------------------- Dim Слитый_Текст$, Перенос_Строки$, Ячейка As Range, t&, fl As Boolean If UCase(Переносить_ДА_НЕТ$) <> "НЕТ" Then Перенос_Строки = vbLf t = Диапазон.Row For Each Ячейка In Диапазон If Len(Ячейка) Then If Ячейка.Row <> t Then fl = True t = Ячейка.Row If Слитый_Текст = "" Then Слитый_Текст = Application.WorksheetFunction.Trim(Ячейка.Value) ' будут удаляться лидирующие и финиширующие пробелы, а также многократные пробелы между словами (используется стандартная функция СЖПРОБЕЛЫ) Else Слитый_Текст = Слитый_Текст & IIf(fl, vbLf, Разделитель_Данных) & Перенос_Строки & Application.WorksheetFunction.Trim(Ячейка.Value) fl = False End If End If Next Ячейка СКЛЕИТЬ2 = Слитый_Текст End Function
Pelena, не совсем, потому как по ссылке из поста выше - у меня сцепляется не только содержимое ячеек, а с доп.текстом. Нужно это для создания отчетов - единого перечня документов. Отчеты разные, дополнительный текст разный.
Pelena, не совсем, потому как по ссылке из поста выше - у меня сцепляется не только содержимое ячеек, а с доп.текстом. Нужно это для создания отчетов - единого перечня документов. Отчеты разные, дополнительный текст разный.SYKim
таким образом для соединения трех подобных строк у меня будет примерно следующая формула: [code]СЦЕПИТЬ(Лист1!B19;" (п.";Лист1!A19;" Описи)";СИМВОЛ(10);Лист1!B20;" (п.";Лист1!A20;" Описи)";СИМВОЛ(10);Лист1!B21;" (п.";Лист1!A21;" Описи)")
вот и подумалось - мб есть какая-т0 функция, где можно описать что делать, затем какое кол-во раз, с обозначением начальной ячейки..
Hugo, потому и поясняю, что суть не в том, чтобы слитьвсе внесте пусть и в диапазоне, а именно в том чтоб повторить итерацию, пример которой:
таким образом для соединения трех подобных строк у меня будет примерно следующая формула: [code]СЦЕПИТЬ(Лист1!B19;" (п.";Лист1!A19;" Описи)";СИМВОЛ(10);Лист1!B20;" (п.";Лист1!A20;" Описи)";СИМВОЛ(10);Лист1!B21;" (п.";Лист1!A21;" Описи)")
вот и подумалось - мб есть какая-т0 функция, где можно описать что делать, затем какое кол-во раз, с обозначением начальной ячейки..SYKim
Так это уже другая задача, другой перебор, внедрение постороннего текста... Можно и на это написать свою функцию, но зачем? Следующая задача ведь будет снова совершенно другая
Так это уже другая задача, другой перебор, внедрение постороннего текста... Можно и на это написать свою функцию, но зачем? Следующая задача ведь будет снова совершенно другая Hugo
Hugo, соглашусь, задача сформулирована - не достаточно внятно, мне вот видится некая форма с параметрами. поля: объединяемые ячейки в кол-ве n - добавляемый текст между по кол-ву (n-1) - количество раз (счетчик) сколько строк подряд идущих объединяем.
Но так понимаю, что проще собирать построчно, а в финальной версии отчета просто объединить строки. Но при объединении - теряются ссылки/формулы и при внесении изменений уже текст объединенной ячейки не обновляется автоматически. В таком ключе, может быть подскажете, есть ли возм-ть объединения с сохранением ссылочной структуры??
Hugo, соглашусь, задача сформулирована - не достаточно внятно, мне вот видится некая форма с параметрами. поля: объединяемые ячейки в кол-ве n - добавляемый текст между по кол-ву (n-1) - количество раз (счетчик) сколько строк подряд идущих объединяем.
Но так понимаю, что проще собирать построчно, а в финальной версии отчета просто объединить строки. Но при объединении - теряются ссылки/формулы и при внесении изменений уже текст объединенной ячейки не обновляется автоматически. В таком ключе, может быть подскажете, есть ли возм-ть объединения с сохранением ссылочной структуры??SYKim
Да в эту СКЛЕИТЬ2 что выше не сложно добавить параметром текст, или даже несколько (до и после значения), а сколько ячеек и сколько строк - это что зададите функции то и будет обрабатывать. Если есть пропускаемые строки - можно и это извращение добавить, если эта работа проще, чем собирать из диапазонов без пропусков строк... И все ссылки видны!
Да в эту СКЛЕИТЬ2 что выше не сложно добавить параметром текст, или даже несколько (до и после значения), а сколько ячеек и сколько строк - это что зададите функции то и будет обрабатывать. Если есть пропускаемые строки - можно и это извращение добавить, если эта работа проще, чем собирать из диапазонов без пропусков строк... И все ссылки видны! Hugo
Hugo, понятно, плучится - зазря усложненная, как вы выразились - извращенная, структура. Моя изначальная цель была - упростить, упрощения не получается.
Оставлю просто построчную сцепку. Спасибо за попытки помочь.
Hugo, понятно, плучится - зазря усложненная, как вы выразились - извращенная, структура. Моя изначальная цель была - упростить, упрощения не получается.
Оставлю просто построчную сцепку. Спасибо за попытки помочь.SYKim