Страницы: 1 2 След.
RSS
Определённое пользователем количество символов в формуле
 
Всем доброго времени суток)
Нужна помощь в решении задачи:
Работаю с таблицами в которых бывает произвольное число столбцов, надо, чтобы они объединялись с определённым префиксом на создаваемом макросом листе.
Так же у пользователя должен запрашиваться сам префикс в формуле, и на основании этого префикса резались строки на новом листе.
То есть  если я указываю "fn" - надо чтобы формула на новом листе была не более 80-ти символов (fd - 255), и после началась новая строка, а именно продолжение.
Сам я мало понимаю в VBA, с некоторыми задачами справился, но встрял - как сделать чтобы формула резалась по нужному мне количеству символов и чтобы формула ничего не пропустила из ячеек?  

Объяснил как смог, может по приложенному примеру будет понятнее.  
 
Цитата
Дилетант написал:
если я указываю "fn" - надо чтобы формула на новом листе была не более 80-ти символов (fd - 255), и после началась новая строка, а именно продолжение
80 - включая "fn" и символы ";"?
Как должно выглядеть продолжение и где должно быть расположено - покажите на примере хотя бы одной строки.
Разрывать строку можно в любом месте или только по пробелу?
 
Цитата
Дилетант написал: по приложенному примеру будет понятнее
не, не понятнее.
Цитата
Дилетант написал: если я указываю "fn"
Где указываю? В примере эти буквы в первом столбце перед формулой со сцепками. В любой ячейке Вы ввели "fm" и получили результат?
Цитата
Дилетант написал: надо чтобы формула на новом листе была не более 80-ти символов
Цитата
Дилетант написал: как сделать чтобы формула резалась
Формула или текст (длина строки, количество символов)? Или количество символов в формуле?
В примере просто сцепка по каждой строке, поэтому непонятно. Могу предположить, что Вы хотите переносить текст на следующую строку, и потом на следующую строку - следующую фразу (пардон, сцепку или "формулу"), но где в примере это видно? Сделать так, как в примере - Вы и сами уже сделали :)
 
Цитата
Казанский написал: Как должно выглядеть продолжение и где должно быть расположено - покажите на примере
Если возможно - то не включая FN и ";") строку надо разорвать без вреда для текста:

То есть он должен понять, что строка превышает допустимые 80, и начать делить её в строки ниже как продолжение.
И как закончит с делением одной строки, продолжить формулу дальше
Я понятия не имею возможно ли это(  
Изменено: Дилетант - 15.09.2018 15:05:32
 
Цитата
_Igor_61 написал: Формула или текст (длина строки, количество символов)?
Количество символов в строке)
Есть 4 префикса, на основании которых должна происходить корректировка длины строки по символам.
Эти префиксы запрашиваются через диалоговое окно у пользователя, и на основании ввода одного из них, на втором листе должна происходить сцепка (как в примере).
Сцепка должна учитывать указанный пользователем префикс : если fn/cn - не больше 80, если cn/cd - не больше 255.

При том количество столбцов в сцепке может варьироваться от 2-х до 6 (примерно) и надо чтобы формула сцепки ничего не упустила и не захватила лишнего.
Во вложенном файлике пример, (от которого может заболеть сердце) первоначальной версии макроса (без ветвлений), потом были изменения, на надеюсь проблема станет понятней)  
 
Цитата
Дилетант написал:
Сцепка должна учитывать указанный пользователем префикс : если fn/cn - не больше 80, если cn/cd - не больше 255.
Цитата
Дилетант написал: пример, (от которого может заболеть сердце)
1.Почему  "Double" если "fn" - строковое значение?
2. Хотел еще вопросы задать, но передумал. В примере из #5 не нашел ни одного "fn", поэтому дальше разбираться не хочется. Вы можете в файле Excel  (не в скрине) показать желаемый результат? без формул, без макросов - просто что должно получиться в итоге?
Подсказки:   :)
Длина строки
Найти первый пробел справа
Изменено: _Igor_61 - 15.09.2018 13:39:12
 
Цитата
_Igor_61 написал: В примере из #5 не нашел ни одного "fn"... Вы можете в файле Excel  (не в скрине) показать желаемый результат??
fn/cn/cd/fd - это переменные, если вы мне покажете на примере fn (cn в примере) как вообще может быть такое деление, то далее я смогу сам (по Вашему примеру) сделать также на 3 другие переменные.

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

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

Цитата
_Igor_61 написал: 1.Почему  "Double" если "fn" - строковое значение
Это случайно в книгу попал макрос для других целей (небольшой бардак)
Во вложении файл, может с ним яснее будет (внутри два макроса)  
 
Цитата
Дилетант написал:
Я не знаю как сделать в Excel, чтобы формула (записанная через макрос) понимала сколько символов она сцепляет
А зачем формула? Делайте всё в коде.
 
Цитата
Юрий М написал:
йте всё в коде.
Знать бы как(  
 
Знать бы, как это должно выглядеть. Ваш файл из #5 вообще ни о чём. Из первого файла тоже ничего не понял.
Неужели трудно набросать пример: вот имеем строку, из неё в одном случае нужно получить ТАК, а в другом случае ВОТ ТАК. И показать эти исходные данные и желаемый результат.
И что Вы понимаете под запросом у пользователя - диалоговое окно? Или на листе будет выпадающий список?
 
Цитата
Цитата
Юрий М написал:
Знать бы, как это должно выглядеть. Ваш файл из #5 вообще ни о чём. Из первого файла тоже ничего не понял.Неужели трудно набросать пример: вот имеем строку, из неё в одном случае нужно получить ТАК, а в другом случае ВОТ ТАК. И показать эти исходные данные и желаемый результат. И что Вы понимаете под запросом у пользователя - диалоговое окно? Или на листе будет выпадающий список?
Есть описание, которое надо импортировать к ШК.
Это описание разбито на разные столбцы (количество столбцов варьируется), я вручную записываю формулу сцепки, перед этим дописывая ="cn;"&.... (вообще префикса 4, они зависят от того, кому принадлежат ШК).
Я каждый раз вручную переношу всю информацию с одного листа на другой и начинаю сцеплять, при этом, если я записываю префикс CN (к примеру)  - количество символов в строке с формулой (без учёта ="cn;";) не должно превышать 80 символов. Если есть превышение в символах, я начинаю самостоятельно добавлять ниже строку, копировать ниже ШК, и ниже описание (т.е. его продолжение).

Я решил написать код в VBA, который бы делал это всё за меня, а именно делал бы готовую формулу с нужным количеством символов на втором листе. Я написал код, который копирует значение на второй лист, запрашивает у пользователя префикс ( через select case) и начинает сцеплять "описание" с тем префиксом что ввёл пользователь.

НО, я не знаю как автоматизировать обрезку символов по нужному мне количеству в строке. Т.е. если я указываю в диалоговом окне "cn" - то в каждой строке описания должно быть не более 80 символов. Всё, что превышает должно копироваться ниже вместе с ШК и записываться в такую же формулу.

Задача не простая и как по мне специфическая, я не нашёл ничего похожего в интернете и вот я здесь(
Пытаюсь объяснить как можно понятнее. (во вложении файл с исходными данными и нужным результатом)  
Изменено: Дилетант - 16.09.2018 11:55:42
 
А если перенесённая часть строки тоже превышает лимит - её тоже резать?
 
Нет ответа...
И третья попытка с примером не самая удачная: пишете про 80/255 символов, а в таблице длина строки всего 67. И все строки одинаковые по длине.
Посмотрите пример. В коде найдите комментарий, где поменять на 80.  
 
Дилетант, вернитесь, отредактируйте сообщение №11. Зачем такие цитаты?
 
Цитата
Юрий М написал:
 
А если перенесённая часть строки тоже превышает лимит - её тоже резать?
Да, её тоже резать, пока она не станет меньше допустимого предела  
Изменено: Дилетант - 16.09.2018 11:56:24
 
Цитата
Юрий М написал:
Посмотрите пример. В коде найдите комментарий, где поменять на 80.

То что надо) можно чтобы деление "описания" продолжалось, пока не станет ниже допустимого порога?
И надо добавить её 2 префикса : fn - 80 символов, fd - 255  
 
Цитата
Юрий М написал:
Посмотрите пример. В коде найдите комментарий, где поменять на 80.  
Почему-то в присланном примере не срабатывает ветвление, то есть при выборе CN, макрос срабатывает, при выборе CD ничего не происходит(  
 
Цитата
Дилетант написал:
при выборе CD ничего не происходит(  
Переменной Limit Присваивается значение 255. А что должно произойти, если нет подходящей строки?
 
Если нет превышения? - ничего, сцепка должна продолжиться дальше. Если встречается превышение, начинается деление. Деление строки заканчивается и продолжается сцепка описания к другим ШК.

Если пользователь указывается CD - формула должна начинаться ="cd;"&.....  и быть не длиннее 255 - ти символов, если CN (="cn;") не больше 80-ти так со всеми переменными (cn/cd/fn(80)/fd(255))
 
Цитата
Дилетант написал:
cn/cd/fn(80)/fd(255)
Расходится с первоначальными данными: cd = 255
 
Цитата
Юрий М написал:
Расходится с первоначальными данными: cd = 255
Есть четыре префикса:
cn - не больше 80
cd - не больше 255
fn - не больше 80
fd - не больше 255

И при каждом вводе от пользователя не сцепка должна начинаться с соответствующим  префиксом.
Например ввожу fn:

="fn;"&..... ( и не больше 80-ти символов, всё что больше, переносится на строку ниже с соответствующим ШК как продолжение описания)
Ввожу cd:

="cd;"&.... ( и не больше 255 символов, всё что больше, переносится на строку ниже с соответствующим ШК как продолжение описания)

И так же с остальными 2-мя префиксами  
 
Дилетант, так и я об этом: посмотрите свой #19 - там для трёх значений 80 и только для одного 255. Потому и написал #20.
 
моя ошибка.  
 
Дилетант, ну я ведь написал всю конструкцию. Попробуйте сами добавить проверку значения: там ведь ничего сложного: смотрите Select Case - End Select. Думаю, что с этим справитесь.
 
Я в этом крайне сомневаюсь(
И как быть с дальнейшим делением? Если надо разделить более чем на 2 строки, то деление прекращается.
Т.е. есть в строке, допустим 171 символ, код делит на 80 и на 91 и заканчивает деление по ШК  
 
Да ничего сложно там нет:
Код
    Select Case Pref
        Case Is = "cn", "fn": Limit = 35 'поменять на 80
        Case Is = "cd", "fd": Limit = 255
А вот что делать с "огрызком" - не знаю. Просто не рассматривал вариант, если он тоже больше лимита..
 
И на этом спасибо) а как сделать чтобы формула была не только с CN?
Т.е. если вводить Cn, то сцепка будет, если выбрать cd, то ничего не происходит(  
 
Заменил файл в #13. Смотрите комментарий.
Про какие формулы Вы говорите?
 
Цитата
Юрий М написал:
Про какие формулы Вы говорите
Про сцепку, не знаю как её ещё назвать(
Есть ещё какие-нибудь идеи?

При больших объёмах работы этот код нет возможности использовать.

Он удаляет значения, мне надо чтобы они не как не редактировались.  
 
Цитата
Дилетант написал:
При больших объёмах работы этот код нет возможности использовать.
Про какие объёмы Вы говорите? Про количество строк или про длину строки?
Страницы: 1 2 След.
Наверх