Страницы: 1
RSS
Как вычислить функцию записанную как текст
 
В зависимости от значения ячейки ВПРом выбираю функцию в виде текста  
Затем мне необходимо ее вычислить и результат вывести в ячейку  
Подскажите если есть возможность 2 способа: 1- стандартные функции, 2- VBA код.  
Спасибо
 
Если правильно понял условие:  
=ЕСЛИ(A2="КМР";ВПР(B2;H1:I6;2;0);ВПР(B3;H10:I11;2;0))
 
Или задача ИМЕННО ПРЕОБРАЗОВАТЬ текст в формулу?
 
Чтобы решить общий случай нужно именно преобразовывать текст в функцию  
И еще там будет одна проблема: я указал 2 варианта выбора чтобы побыстрее сформировать пример. На самом деле их более 12 поэтому ЕСЛИ не подходит и нужен ВПР
 
Опробовал загатовку - работает макросом, если изменить текст формул на:  
Vlookup(B2,H1:I6,2,0)  
vlookup(B3,H10:I11,2,0)  
Регистр не важен, важно, что на английском и у меня нужны запятые вместо ";"  
Хотя Эксель у меня дома русский.  
Объявление и вывод в ячейки не делал - это загатовка:  
 
Sub tt()  
a = Selection  
x = [b10]
y = [b11]
Select Case a  
Case "КМР"  
temp = Evaluate(x)  
Case "КБР"  
temp = Evaluate(y)  
End Select  
 
End Sub
 
Заготовка - как это я два раза подряд ошибся... тлетворное воздействие сети...
 
911old, не очень понимаю: Вы хотите текстовые значения преобразовать в формулы, и затем использовать одну из них при помощи ВПР. А кто мешает вместо текста СРАЗУ проставить формулы, и при помощи ВПР брать готовое значение?
 
Вариант: два списка, именованные диапазоны, ВПР.
 
обьяснюсь  
есть шифры клапанов например  
КМР 201 НЖ 50 12 Р НО УХЛ(1)  
КБР 111 С 200 НО У  
КМО 301 С 50 НЗ УХЛ(1)  
ПОУ-8М 710 15 НЗ У  
КШС 3.50.125.НО.5.У  
и т.д.  
если первое слово КМР то Определяем условное давление таким образом:  
первый символ 2-го слова шифра = 2 тогда берем его из одной таблицы    
и определяем его как 2,5МПа  
 
если первое слово другое например УИФ то давление определяется просто как константа а именно 4МПа  
 
Таким образом я хочу сделать таблицу:    
первый столбец-типы клапанов(КМР,КМО,..,УИФ..)  
второй столбец формулу для определения условного давления    
третий столбец - формула для определения допустим пропускной способности и т.д.  
 
и при любом написании шифра я должен автоматически расписать его составляющие  
вот в кратце проблема
 
Если делать макросом, то имхо весь подсчёт можно макросом и сделать, без привлечения формул. Ну или не писать эти VLOOKUP на лист, а прямо в коде и использовать для подсчёта.
 
Боюсь, Вы меня не поняли. Посмотрите пример. Вместо текста сейчас действительно формулы. А ячейка С2 тоже с ВПР, но уже на другой диапазон. В ячейках В10 и В11 сейчас формулы, а не текст.
 
Юрий М, я понял мысль...  
она хороша своей простотой  
спасибо  
в принципе я согласен  
мне нужно подумать)
 
Я согласен с Hugo - можно всё сделать вообще без формул. Макросом. Но для этого нужна Ваша реальная таблица строк на 10, где Вы покажете, ЧТО вводим, и ЧТО и ГДЕ должно получиться.
 
Постарался привести более подробный пример  
У меня просто каталог есть. Там вся эта номенклатура  
Но он в pdf 8Мб весит  
Если кто отважиться могу сбросить на мейл. Там подробно рассказана структура шифра. Проблема в том что нельзя найти единого подхода к расшифровке очень уж все отличается
 
На первый взгляд для макроса:  
Разбиваем текст по столбцам по пробелам, далее анализируем первую ячейку.  
Можно макросом построчно разбивать в массив и анализировать. Но всё портит  
КШС 3.50.125.НО.5.У - тут только один пробел. Хотя в макросе можно и спецусловие для КШС написать.
 
Вообще, если изначально данные в ПДФ, то я бы сохранил в текст, и прямо сразу текст скриптом vbs и перебирал построчно, а результат грузил в другой текст с разделителями tab и расширением xls. У меня обычно такие задачи разовыми не бывают - если появилась, то будет регулярно впредь стоять. А так весь этот процесс можно на один клик повесить. Единственная сложность - сохранить в текст, тут пару кликов надо.
 
Если интересно - распакуйте архив в корень С, так чтоб путь к исходнику был  
c:\Temp\911old\911oldishodnik.txt  
и запустите 911oldicript.vbs из любого места.  
Результат будет c:\Temp\911old\out.xls  
Если грузить в Эксель, там надо формат ячейкам выставить. Но может это и не надо.  
Загвоздку с КШС 3.50.125.НО.5.У обошёл в скрипте, заменив точки на пробелы:  
strNextLine = Replace(strNextLine, ".", " ")  
Имхо в скрипте легко разобраться и переделать/дополнить условиями.
 
Архив забыл...
 
{quote}{login=911old}{date=03.07.2010 04:43}{thema=}{post}У меня просто каталог есть. Там вся эта номенклатура. Но он в pdf 8Мб весит{/post}{/quote}  
Вес не пугает, но в нем же придется разбираться, а лень :)  
 
Как я понял, структура каждой группы наименований неизменна, положение Ду и Кву в строке всегда на одинаковых позициях. Можно ли утверждать, что не только позиция, но и номер первого символа этих величин всегда одинаков?  
Пример1:  
КМР 201 НЖ 50 12 Р НО УХЛ(1)  
Ду здесь всегда после третьего пробела, Кву - после четвертого.  
Но правильно ли, что Ду начинается с 12 символа, Кву - с 15?  
Пример2:  
КШС 3.50.125.НО.5.У  
Ду здесь всегда после первой точки, Кву - после второй.  
Но правильно ли, что Ду начинается с 7 символа, Кву - с 10?  
 
Разделители - только пробелы и точки (как в примере), или могут быть другие?
 
{quote}{login=911old}{date=03.07.2010 04:43}{thema=}{post}  
У меня просто каталог есть. Там вся эта номенклатура  
Но он в pdf 8Мб весит  
Если кто отважиться могу сбросить на мейл. Там подробно рассказана структура шифра.{/post}{/quote}  
Интересно посмотреть. Пришлите на h u g o @ n x t . r u (естественно без пробелов), проверю свой скрипт в работе.
 
Понял - автору ведь надо не список преобразовать, а динамически при вводе получить разбивку по значениям.  
Тогда так, на том же принципе, что и vbs - вводите данные в столбец А.
Страницы: 1
Читают тему
Наверх