Объединение текста в одну строку по условию.

Автор ArtemkoKip, 19 апреля 2016, 16:10

0 Пользователи и 1 гость просматривают эту тему.

kl33

Цитата: JohnSUN от 21 апреля 2016, 12:05Наверное, как-то так...
Не подскажете, как заставить работать макрос, если в строке только порядок цифр, т.е. вообще без префикса (6, 7, 8) ?

JohnSUN

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

ФАЙЛ С ПРИМЕРОМ ГДЕ? ГДЕ НАПИСАНО "ЕСТЬ ВОТ ЭТО, НУЖНО ПОЛУЧИТЬ ВОТ ТАКОЕ"?

Рядом с полем для сообщения, слева - РЕКОМЕНДАЦИЯ
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

kl33

Цитата: JohnSUN от 22 марта 2019, 16:55Второй вопрос подряд и второй раз невнятный
Пардон за невнятность, но вопрос предельно простой:
ряд цифр "6, 7, 8, 10" сократить до "6-8, 10"
без префиксов, суффиксов и т.д.
не сокращает

JohnSUN

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

kl33

А если в EXCELе накидаю пример адаптирую Ваш макрос под него и ещё один подобный туда кидану – можно? у меня OpenOffice просто только на работе установлен...

JohnSUN

Цитата: kl33 от 24 марта 2019, 10:31
EXCELе ... адаптирую Ваш макрос под него ...
Не думаю, что какая-то "адаптация" может понадобиться - код практически универсальный, "чистый Бэйсик" без учёта особенностей разных офисов
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

kl33

#21
И так:
в примере ExCel два подобных макроса – Ваш макрос на странице "comprsStr" и сторонний макрос "fComprStr"
сторонний макрос, в принципе, делает всё тоже самое, но не может проверять более двух элементов подряд ("QF1, QF2" воспроизводится как QF1-QF2"). На сколько я понял – необходимо добавить условие проверки периода (в районах строк 23 и 33), буду признателен, если поможете в этом.
Также сторонний макрос распознает  два периода и соединяет их в один по двум крайним одинаковых значениям, например:
QF1, QF2, QF3, QF5-QF12, QF13-QF19, QF21
преобразовать в:
QF1-QF3, QF5-QF19, QF21
Очень удобно.

Ваш макрос прекрасно работает, если в строке есть префиксы, но у меня не получается его заставить работать без префиксов вообще. И ещё, я его в начале немного изменил – задал значения сепараторов и префикса по умолчанию, иначе их обязательно необходимо было вбивать в формулу.

Классно было бы сделать один полностью работающий макрос.

Что не может делать ни один макрос, и какая задача сейчас стоит передо мною – это строку 1-2, 2-3, 4-5 привести к значению 1-3, 4-5 (т.е. объединить только те периоды, крайние значения которых совпадают, при этом в строке будут только периоды, без единичных значений) – вот это мой главный вопрос на текущий момент. Может быть добавить переменную, при наличии которой макрос будет объединять периоды только с пересекающимися значениями, или сделать отдельный макрос...

Буду рад Вашей помощи.

P.S. пришлось сохранить в формате *.xls – запрет на загрузку формата "*.xlsm" )))

kl33

Да. и если получиться сделать код для приведения строки 1-2, 2-3, 4-5 к значению 1-3, 4-5 по совпадают крайних значений, было бы так же очень хорошо, чтобы это были любые символы, буквы цифры. т.е.:

1а-2б, 2б-3в, 4г-5д → 1а-3в, 4г-5д
а-б, б-в, г-д → а-в, г-д


JohnSUN

О суффиксах больше речь не идёт?
Цитата: kl33 от 24 марта 2019, 11:39
Также сторонний макрос распознает  два периода и соединяет их в один по двум крайним одинаковых значениям, например:
QF1, QF2, QF3, QF5-QF12, QF13-QF19, QF21
преобразовать в:
QF1-QF3, QF5-QF19, QF21
Как поступать с "QF1, QF2, QF4"? Оставлять как есть или показывать диапазон как "QF1-QF2, QF4"? (Спрашиваю потому что дальше в твоих примерах появляются диапазоны вида "1-2" и "4-5")
Цитата: kl33 от 24 марта 2019, 11:39
Может быть добавить переменную, при наличии которой макрос будет объединять периоды только с пересекающимися значениями, или сделать отдельный макрос...
Эту фразу вообще не понял. Переведи. Или напиши другими словами, или поясни примером.
Цитата: kl33 от 24 марта 2019, 11:39
запрет на загрузку формата "*.xlsm"
На будущее - есть ещё и ZIP, в который можно упаковать всё, что не принимается к загрузке

Цитата: kl33 от 24 марта 2019, 11:53
Да. и если получиться сделать код для приведения строки 1-2, 2-3, 4-5 к значению 1-3, 4-5 по совпадают крайних значений, было бы так же очень хорошо, чтобы это были любые символы, буквы цифры. т.е.:
1а-2б, 2б-3в, 4г-5д → 1а-3в, 4г-5д
а-б, б-в, г-д → а-в, г-д
Ага, значит с суффиксами всё-таки...
Не понял насчёт "приведения строки 1-2, 2-3, 4-5 к значению 1-3, 4-5"... Почему не к "1-5"? Или это уже с учётом 3в и 4г?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

kl33

#24
по поводу с суфиксами или без и приведению строки 1-2, 2-3, 4-5 к значению 1-3, 4-5:
стоит две разные задачи:
первая задача - это объединение номеров точечных объектов (в моем случае – опор) приведенных в строке через запятую. Например если выведена строка с перечислением номеров опор:
1, 2, 3, 7-9, 10, 13
то корректно их объединить в строку:
1-3, 7-10, 13
В этом случае удобна возможность использовать префиксы, например если порядок будет иметь следующий вид:
№1, №2, №3, №7-№9,  №10, №13
Это на данный момент реализовано. И не плохо было бы иметь возможность использовать суффиксы, если порядок будет следующим:
№1, №2а, №3б, №7-№9в,  №10, №13
Но суффиксы – то забаганка. можно обойтись если формула очень сложной выйдет.
вторая задача - это объединение номеров линейных объектов (в моем случае – пролетов между опорами) приведенных в строке через запятую. Например если выведена строка с перечислением номеров пролетов:
1-2, 2-3, 3-4, 5-6
Означает что речь идет о пролетах, между опорами №№1-4 и №№5-6, а в пролете №№4-5 никаких работ не производится.
Вот, как следствие и ряд необходимо вывести следующий:
1-4, 5-6
Ну и, соответственно, наименования так же могут быть и с префиксами и с суффиксами, но так как здесь наверное проще - не надо высчитывать порядковые числа а лишь объединить периоды по совпадению крайних значений, то не плохо было бы во втором случае вообще отказаться от привязки к префиксам и суффиксам а лишь соединить период по идентичным значениям.

как-то так...

JohnSUN

Перечитал эту фразу, много думал...
Цитата: kl33 от 24 марта 2019, 10:31
у меня OpenOffice просто только на работе установлен...
Какой OpenOffice? Почему дома нет?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

kl33

а зачем он мне дома то нужен?? ))
excel на голову выше любого бесплатного аналога!
если я могу дома установить ломаную версию полноценного офиса и преспокойно работать на нем дома – ну зачем мне бесплатные аналоги?
А на работе администратор по программному обеспечению – у того свои заморочки, лицензионное ПО либо бесплатные аналоги.

kompilainenn

Цитата: kl33 от 24 марта 2019, 17:46excel на голову выше любого бесплатного аналога!
приведите пример, пожалуйста
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

kl33

Самое первое, что в голову приходит – удачно реализованное условное форматирование. Т.е. я могу формировать отображение таблиц, границ текста исходя из его формульного наполнения. При том, это в первую очередь относится к 2010й и более поздней версии, в 2007 условное форматирование тоже работает не очень хорошо.
ну и вообще, есть огромное количество разных ништячных формул, шикарно работающих на внутреннем алгоритме excel.
пример прикрепляю.

kl33

#29
и, кстати, я сейчас провожу все эти манипуляции: открываю excel, просматриваю код, просматриваю свои закладки с удачными формулами или макросами – пальцами на тачскрине 8-ми дюймового планшета. ExCel вполне позволяет это всё делать, распознает тач-жесты. Это не работа за мышкой с клавиатурой, но вполне приемлемо. А на бесплатных офисных приложениях такое делать возможно?