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

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

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

kl33

Спасибо, сейчас протестирую
таблица со сводными таблицами – я их использую для вывода данных в листы на печать
но 1 024 столбца для меня – это очень мало...

mikekaganski

Да не проблема. Если перед человеком стоит задача найти, чего не умеет другая программа - это решаемая задача. (Я не буду тут соревноваться и находить, чего не умеет МСО). Я-то по глупости думал, что человек сможет найти для своей работы пусть не свой идеал, но что-то лучшее, чем уже имеющееся - но против лома нет приёма.
С уважением,
Михаил Каганский

kl33

Цитата: mikekaganski от 25 марта 2019, 14:25думал, что человек сможет найти для своей работы пусть не свой идеал
Не поймите меня не правильно, работа по созданию программ, альтернативных ExCel, их налаживанию и помощи в работе с ними – это очень сложная работа, достойная уважения.
Но объективно, если есть возможность работать на продуктах, выпускаемых и отлаживаемых такими гигантами, как Microsoft – выбор всегда очевиден. И ниша всех условно бесплатных программ всегда будет оставаться вынужденным заменителем там, где невозможно, в силу финансовых особенностей, купить профессиональный продукт, а в сферу правовых особенностей – использовать пиратскую копию.
Тоже самое касается Autocad и его условно бесплатного клона Nanocad, Civil 3D и его заменителя GeoniCS
Разница в этих продукта огромна просто в силу затрачиваемых на их разработку и доведение ресурсов.

P.S.: Кстати интерфейс ExCel 2007 в виде Ленты с переключаемыми Панелями считаю намного удобнее обычного панельного интерфейса.

mikekaganski

Для своей работы = на рабочем месте. Кажется, никто не собирался Вас уговаривать менять ломаный МСО дома?
С уважением,
Михаил Каганский

kl33

Цитата: mikekaganski от 25 марта 2019, 14:44Кажется, никто не собирался Вас уговаривать менять ломаный МСО дома?
никто
И я попробую адаптировать свою работу на рабочем месте под LibreOffice
И свои сводный таблицы я попробую распределить вертикально в столбец (но очень было бы хорошо иметь больше столбцов)
И спасибо Вам, за то что тратите на общение со мной своё время.
Но посмотрим...

mikekaganski

С уважением,
Михаил Каганский

kl33

#51
Цитата: JohnSUN от 25 марта 2019, 14:08Тестируй...
Очень хороший макрос, и я (надеюсь не только я) с удовольствием буду его использовать

Единственная просьба, если это не сложно:
Бывают в ряду встречаются сложные наименования (в моём случае это опоры с дублирующими номерами и выглядят они как 30/1 и 30/2). Очень бы хотелось чтобы макрос их не терял и не выдавал при их наличии в строке ошибку. А хотя бы просто вписывал в строку (можно подряд) вместе с теми номерами которые распознал и вставил в диапазон.
Возможно так?


JohnSUN

Цитата: kl33 от 25 марта 2019, 15:18
в ряду встречаются сложные наименования (в моём случае это опоры с дублирующими номерами и выглядят они как 30/1 и 30/2)
В каком из ранее приведенных примеров данных есть такое обозначение?
Цитата: kl33 от 25 марта 2019, 15:18чтобы макрос ... не выдавал при их наличии в строке ошибку.
Возможно так?
Максимум, который теперь возможен - изменить код основной функции на что-то вроде
Function shortlist(ByVal sourcelist As String) As String
On Error GoTo wrongData
If isspanslist(sourcelist) Then
  shortlist = qd(sourcelist)
Else
  shortlist = zb(lc(sourcelist), """" & getprefix(sourcelist) & """0")
End If
Exit Function
wrongData:
  shortlist = "Плохие данные: " & sourcelist
End Function
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

kl33

#54
В первом случае работает, а во втором случае можно сделать тоже чтобы он либо ошибку выдавал, либо "плохие данные" ?
Если нет, то пусть будет так – отличный рабочий макрос.

kl33

#55
было бы оптимально, если бы макрос, при прочтении строки с пролетами (линейный объект):
1-2, 2-3, 5-6, 29/1-30/1, 30/1-31/1, 29/2-30/2, 30/2-31/2
понимал что в приведённых данных что-то не то, и выводил их так же как и получил:
1-2, 2-3, 5-6, 29/1-30/1, 30/1-31/1, 29/2-30/2, 30/2-31/2
вместо текущих:
1-3, 5-6
Так как в последнем случае можно просто упустить наличие пролётов с нестандартными опорами (29/1-30/1, 30/1-31/1, 29/2-30/2, 30/2-31/2)

Альтернативный вариант:
Если мы имеем дело с пролетами (линейный объект) и в строке есть символы кроме цифр, запятых и пробелов – можно сделать так, чтобы строка воспринималась как текст (в этом случае не будет иметь значение символ, буква, префикс либо суффикс) и макрос соединял все пролеты с совпадающими крайними символами в один?

И ещё вопрос: возможно без усложнения макроса (именно без усложнения) сделать разделитель входящих и исходящих данных "," "-" не константами, а переменными (чтобы по необходимости можно было их ввести в строку формулы):                
Optional sSepCells As String = ", ", Optional sSepRng As String = "-"
?

JohnSUN

Цитата: kl33 от 26 марта 2019, 10:25
И ещё вопрос: возможно без усложнения макроса (именно без усложнения) сделать разделитель входящих и исходящих данных "," "-" не константами, а переменными (чтобы по необходимости можно было их ввести в строку формулы):                
Optional sSepCells As String = ", ", Optional sSepRng As String = "-"
Разумеется, можно, но... Честное слово, не могу себе представить другие варианты разделителей
Только это будут не As String, а As Variant... И значения по умолчанию будут задаваться не в списке параметров, а ниже, в коде функции-процедуры через "If IsMissing()" - это нужно для совместимости кода StarBasic и VBA (макрос-то будет работать не только в Экселе, но и в офисах, которым этот форум посвящён  ;) )
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне