Страницы: 1
RSS
Возврат части строки в ячейку с помощью VBA
 
Добрый вечер, планетяне.

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

Колдовал долго, листал книжки, но цели так и не достиг.

Прошу помощи.
 
Цитата
Колдовал долго, листал книжки...
Шептать над дымом сожженной шкуры с правого пальца верхней правой лапы пьяной ящерицы не пробовали?

Только VBA?
=ПСТР(A1;МИН(ПОИСК({0;1;2;3;4;5;6;7;8;9};A1&1023456789));3)
 
Уверен, что можно сделать с помощью формулы массива, она правда длинная получится.
Самый простой вариант - регулярка, но я уже, наверное не успею ответ дать.
upd Все еще не дали ответ - через 5 минут напишу.
upd Уже дали ответ.
Изменено: Все_просто - 26.01.2015 21:55:07
С уважением,
Федор/Все_просто
 
В лоб
Скрытый текст
Изменено: Alexander88 - 26.01.2015 22:53:37
 
Чтобы сохранялись нули впереди, я сделал формат ячеект текстовым.
There is no knowledge that is not power
 
Люблю такие задачи. Выложу и свой вариант, массивный. Лучше, конечно, применять формулу vikttur.
Три раза последовательно применяем следующую формулу:
Код
=ЕСЛИОШИБКА(ПОДСТАВИТЬ(СТРОЧН($A1);ИНДЕКС(Буквы;ПОИСКПОЗ(1000;0/ПОИСК(Буквы;$A1);1));"");$A1) 
где буквы = {"a":"b":"c":"d":"e":"f":"g":"h":"i":"j":"k":"l":"m":"n":"o":"p":"q":"r":"s":"t":"u":"v":"w":"x":"y":"z"}
Вместо ссылки на А1 вставляем ссылку на до последнюю слева формулу. В конце получаем ячейку без букв. Далее применяем тривальный ЛЕВСИМВ.

Заодно вопрос коллегам: насколько я понял текстовая функция ПОДСТАВИТЬ не работает с массивами. То есть вот это сделать не получится:
Код
=ПОДСТАВИТЬ(СТРОЧН(A1);Буквы;"")
Можно ли это обойти как-нибудь. Я поначалу подумал, что именно так легче всего решается задача. К своему удивлению обнаружил, что подобная формула массива не поддерживается :(
Изменено: Все_просто - 26.01.2015 23:05:26
С уважением,
Федор/Все_просто
 
Массивная, создана под пение мантры и посыпание листа Excel пеплом трын-травы с поляны, где зайцы косили  :)  
=ПСТР(A1;МИН(ЕСЛИ(ЕЧИСЛО(--ПСТР(A1;СТРОКА($1:$15);1));СТРОКА($1:$15)));3)
Цитата
текстовая функция ПОДСТАВИТЬ не работает с массивами
точно так.
 
Всем большое спасибо за помощь.
Нужно именно в VBA, это один из элементов многоступенчатого преобразования таблицы данных на 50-60 тыс. строк.
Формулами я сам делал (правда не такими универсальными, как представленные выше).
Просто сделать в столбце формат "Текстовый" не получится, на момент начала макроса этого столбца еще не существует.
Воспользуюсь варианом "В лоб" от Alexander88.  
 
Цитата
Newbie пишет: Просто сделать в столбце формат "Текстовый" не получится, на момент начала макроса этого столбца еще не существует.
Что за ерунда? Вставьте тогда в начале макроса (столбце "B" ;) :
Код
Columns(2).NumberFormat = "@"
There is no knowledge that is not power
 
Johny, спасибо за подсказку.
Я не знал, что так можно. Воспользуюсь.  
 
А я так и не понял вот это:
Цитата
Newbie пишет: на момент начала макроса этого столбца еще не существует.
А куда он мог деться? ))
 
Изначальная таблица - 8 столбцов, итоговая - 17. В начале в столбце В находятся данные, которые не требуют формат Текстовый. Поэтому я решил, что если вначале вручную сделают формат в столбце В, то при вставке столбцов он (формат) уползет в другой столбец. А про строку кода от Johny я просто не знал.
Так-то я сам накропал корявенький код для отделения и вставке 3-х цифр. но никак не мог добиться текстового формата.  
Страницы: 1
Наверх