Страницы: 1
RSS
Активация формул с помощью VBA
 
Подскажите пожалуйста решение задачи.

Как с помощью VBA, активировать формулу которая сформирована с помощью других формул.
Пример:
Сцепляем формулу;
=СЦЕПИТЬ("=";"ВПР";"(";"Лист2!$A$26";";";"2";";";"ЛОЖЬ";" ;) " ;)
Визуально получаем:
=ВПР(Лист2!$A$26;2;ЛОЖЬ)
Но при этом формула заморожена.
Как подобные формулы можно приводить в работоспособность с помощью VBA, может есть какое-то функциональное решение?
Например:
=АКТИВ.ФУНКЦ(СЦЕПИТЬ("=";"ВПР";"(";"Лист2!$A$26";";";"2";";";"ЛОЖЬ";" ;) " ;) )
=АКТИВ.ФУНКЦ() – активировать функцию

Спасибо большое за помощь
Изменено: Hops Right - 01.07.2013 11:43:41
 
Извиняюсь, а не подскажите для чего такой функционал?
Согласие есть продукт при полном непротивлении сторон
 
Нужен для оперативного решения рабочих задач.
 
Думается проблема в другом, сомневаюсь что поможет
Цитата
для оперативного решения рабочих задач
 
Код
Cells(1,1).FormulaLocal = Cells(1,1).Text
В ячейку А1 записывается формула, которая отображается в этой ячейке текстом.

Плюс можно попробовать применить макрофункцию ВЫЧИСЛИТЬ. Но макросы в любом случае должны быть включены. Да и в ту же ячейку формулу записать не получится - только в другие.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
с помощью VBA......для оперативного решения рабочих задач
можно и без формул обойтись
Согласие есть продукт при полном непротивлении сторон
 
Может у Вас есть код, для решения моей задачи.
Мне нужен именно код, который расширяет возможности формул.
Формулу =АКТИВ.ФУНКЦ()

Я хотел бы использовать, как и все остальные полноценно и постоянно.
 
Я дал полный код. Осталось его только в тело процедуры запихнуть.
Полностью подходящее решение дать нереально, т.к. Вы даже не написали, как видите реализацию перевода формулы в виде текста в ячейке в действительно формулу.
То ли только активную ячейку(или все выделенные), то ли определенный диапазон. В той же ячейке или в другое место выводить формулу. И т.д.
Вы спросили как - ответ получили. Пробуйте, применяйте. Не получится - пишите, что не получается.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Перевод любого содержимого советующего правильному синтаксису написания формулы в действующую формулу, с помощью функции которая расширена через VBA код.

Функцию предлагаю назвать =АКТИВ.ФУНКЦ()
 
Цитата
советующего правильному синтаксису написания формулы
представьте себе проверку синтаксиса ВСЕ ВОЗМОЖНЫХ формул  :D  Жесть! Мне представляется это тупиковым направлением. ИМХО
Согласие есть продукт при полном непротивлении сторон
 
Ладно, по сути самый приближенный ответ у «The_Prist» за, что ему спасибо большое.

Попробую ещё раз написать, что нужно.

Представим себе, что с помощью формулы =СЦЕПИТЬ, =ВПР, =ДАТА, =ИНДЕКС + ПОИСКПОЗ, =НАЙТИ, =ТЕКС, =СЦЕПИТЬ+ТЕКСТ, =ГПР, или вообще любой другой формулы, или комбинаций этих формул мы получаем замороженную формулу в ячейке.
Замороженная формула визуально выглядит вот так:

=ВПР(Лист2!$A$26;2;ЛОЖЬ)

А в строке формул она выглядит вот так:

=СЦЕПИТЬ("=";"ВПР";"(";"Лист2!$A$26";";";"2";";";"ЛОЖЬ";" ;) " ;)

Но ботает только формула =СЦЕПИТЬ, а то что мы получили в результате, назовём это замороженной формулой не работает.

Подскажите пожалуйста макрос, с помощью которого можно использовать формулу для активации замороженных формул полученных независимо каким путём.

Если активировать замороженную формулу не удалось по причине ёё неправильного формирования, то можно просто вывести «#Н/Д»

Спасибо
 
Я еще в первом сообщении дал ответ - попробовать не судьба? Приведенный мной код "активирует" формулу, записанную как текст в ячейке.
Код
Sub ActivateFormula()
    ActiveCell.FormulaLocal = ActiveCell.Text
End Sub

Вставляете этот код в модуль. Выделяете ячейку, в которой формула записана как текст и выполняете этот код. Любуетесь результатом.

P.S. Ни на один мой вопрос Вы почему-то не ответили...Поэтому более тема неинтересна.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Нужен макрос по типу, показать Гиперссылку (пример во вложении),
Но, чтобы вместо формулы =Get_Hyperlink ()
Можно было использовать формулу =АКТИВ.ФУНКЦ

В случае из гиперссылкой макрос достаёт адрес URL из ячейки
В моем случае макрос должен активировать функционал замороженной формулы.

При этом использование формулы =АКТИВ.ФУНКЦ нужно как и для получения данных из других ячеек, по принципу =АКТИВ.ФУНКЦ(AY1)
Так и для использования в текущей ячейке.

=АКТИВ.ФУНКЦ(=СЦЕПИТЬ("=";"ВПР";"(";"Лист2!$A$26";";";"2";";";"ЛОЖЬ";" ;) " ;) )
Равносильно действию
=ВПР(Лист2!$A$26;2;ЛОЖЬ)

Извините, что повторяюсь
 
The_Prist, у Вас ни в одном сообщении нет знака вопроса?
Что Вы имеете ввиду "Ни на один мой вопрос Вы почему-то не ответили.."

Мне всего лишь нужна помощь, причем решение данной задачи, в будущем будет полезным для многих пользователей.

Я, увы не знаю VBA
 
Цитата
Hops Right пишет:
The_Prist, у Вас ни в одном сообщении нет знака вопроса?
Что Вы имеете ввиду "Ни на один мой вопрос Вы почему-то не ответили.."

Мне всего лишь нужна помощь, причем решение данной задачи, в будущем будет полезным для многих пользователей.

Я, увы не знаю VBA
1. Отсутствие знака вопроса не означает отсутствие самого вопроса. Это как минимум если читать сообщения, а не пробегать по ним глазами исключительно в поисках готового решения.
2. Вам помощь не нужна - её Вам дали. Вам нужно готовое решение, на блюдечке и так, как хочется именно Вам. Ваших попыток решить свою задачу не видать - одни пожелания.
3. Каждый почему-то считает, что решение именно его задачи будет полезно ну многим-многим. Исходя из практики Ваша задача кроме Вас почти(почему почти? я опросов не проводил, чисто предположение, основанное на многолетней практике общения) никому не нужна, ибо непрактична совершенно. Исходя даже из интереса к данной теме других участников напрашивается вывод - задача неинтересна.

Я дал Вам код - почему не используете? Вы даже не попробовали, т.к. не вижу ни одного сообщения от Вас, которое бы повествовало что в коде не так.
Функцией делать это более чем проблематично, т.к. VBA не знает про русские имена функций и для вычисления таких функций кодом, без привлечения других ячеек, придется написать тонну кода.
По поводу "использования в текущей ячейке" - вообще непрактично и видится мне малореальным именно в таком преподношении. У Вас же в этой ячейке уже другая информация - текстовая. Как Вы собираетесь поместить туда функцию, оставив в ней старый текст?

К тому же я написал про макрофункцию ВЫЧИСЛИТЬ - часть работы она может сделать:
Создаете имя, даете ему имя АКТИВ.ФУНКЦ, а в качестве диапазона =ВЫЧИСЛИТЬ(Лист1!A1). При условии, что в А1 текст функции для преобразования(=ВПР(Лист2!$A$26;2;ЛОЖЬ)), а на момент вызова диспетчера имен активная была ячейка В1. Тогда при записи имени АКТИВ.ФУНКЦ в ячейку, расположенную правее ячейки с функцией для преобразования она будет успешно преобразована.
Чуть подробнее про применение макрофункции можно почерпнуть из этой статьи(на примере другой макрофункции): http://www.excel-vba.ru/chto-umeet-excel/kak-uznat-est-li-formula-v-yachejke/

Не знаете VBA - самое время значит начать изучать. Все с чего-то начинали.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Ясно, понятно, приятно, вкусно

Не верю в то, что никто и никогда не стыкался с подобной задачей.

Спасибо большое
 
Ваша проблема, с уверенностью близкой к 100%, решается другими действительно более рациональными способами. Возможно вы считаете, что придуманное Вами есть самы лучший вариант, боюсь вас огорчить. Если вам действительно нужна помощь, лучше объясните для чего вы это собирались применять, потому как объяснение
Цитата
Нужен для оперативного решения рабочих задач.
явно не хватает для понимания проблемы. Если же мысль о том, что вы придумали нечто "гениальное" до чего ещё ни кто не додумался вас не покидает, и вы не хотите с ней расставаться, тогда удачи в поисках и не очень огорчайтесь если они ни чем не закончатся.  ;)
 
Вода, наше всё!
 
Цитата
Hops Right пишет:
Вода, наше всё!
Цитата
LVL пишет:
удачи в поисках и не очень огорчайтесь если они ни чем не закончатся
 
"за раннее" извиняюсь за некоторую резкость выражений.

Hops Right, Вы вообще адекватны?
Вам The_Prist расписал всё по полочкам, Вам LVL не сказал ни одного лишнего слова (я про пост #17), и выразился очень корректно на Ваши странные "хотелки" и "неотвечалки"...
В ответ услышать
Цитата
Hops Right пишет:
Ясно, понятно, приятно, вкусно
и
Цитата
Hops Right пишет:
Вода, наше всё!
- это, знаете ли, хамство.

"Расширять" Excel хотят многие. Испортить хорошую вещь - много ума не надо. Но, может быть, прежде чем начать "улучшать" и "расширять", даря благодарному человечеству ненужные ему "улучшалки", нужно сначала хотя бы изучить то, что в Excel уже есть?
Добрая часть самолепных "улучшалок" - от простого незнания и повышенных амбиций.
Ну и судьба у них - соответствующая.

пс. Вопросы в этом посте, само собой, риторические.
ппс. "Удачи" желать не буду - она у вас есть, в двух экземплярах, от LVL.  :D
Изменено: ikki - 04.07.2013 04:44:49
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Доброго времени суток, форумчане!
Нашёл эту тему по поиску. Но мою проблему - не решила:
имею ячейки, в которых есть значения типа *1,2 или *1,15 или /1,18
Через функцию СЦЕПИТЬ получаю ячейки с содержимым =1*1,2 или =1*1,15 или =1/1,18
Код
Range("R" & X0 & ":R" & X10 & "".Formula = "=CONCATENATE(""=1"",RC[-1])"
Далее мне нужно получить значение этих ячеек, по совету из темы применяю:
ActiveCell.FormulaLocal = ActiveCell.Text
Так как мне надо для группы ячеек заменил на:
Код
Range("R" & X0 & ":R" & X10 & ".FormulaLocal=Range("R" & X0 & ":R" & X10 & ".Text
Но вот какая фигня - для группы из 3-х ячеек с одинаковым значением (например =1*1,2) - эта операция проходит; Если в группу попадает другое значение (например =1) - операция не действует.

Помогите разобраться, плиз....
Код
Range("R" & X0 & ":R" & X10 & "".Formula = "=CONCATENATE(""=1"",RC[-1])"
Range("R" & X0 & ":R" & X10 & "".FormulaLocal = Range("R" & X0 & ":R" & X10 & "".Text
 
......вроде разобрался:
заменил:
Код
Range("R" & X0 & ":R" & X10 & "".FormulaLocal = Range("R" & X0 & ":R" & X10 & "".Text
на 
Range("R" & X0 & ":R" & X10 & "".FormulaLocal = Range("R" & X0 & ":R" & X10 & "".Value
...пошло...
 
Цитата
Alex13777 пишет: помощью которого можно использовать форму
Вам поможет формула =EVAL, которая доступна с расширением morefunc
Видео о том, как работает формула: https://www.youtube.com/watch?v=TAofPm4LCRc
Ссылка для скачивания Morefunc: http://yadi.sk/d/QQJ6VkTAQzLHX

После установки, нужно зайти на вкладку разрабочик - Надстройки - Обзор... - зайти в папку с установленной надстройкой и выбрать все 3 файла.

Удачи Вам
 
Цитата
написал:
Я еще в первом сообщении дал ответ - попробовать не судьба? Приведенный мной код "активирует" формулу, записанную как текст в ячейке.
Код
    [URL=#]?[/URL]       1  2  3      Sub   ActivateFormula()          ActiveCell.FormulaLocal = ActiveCell.Text    End   Sub   
 
Вставляете этот код в модуль. Выделяете ячейку, в которой формула записана как текст и выполняете этот код. Любуетесь результатом.

P.S. Ни на один мой вопрос Вы почему-то не ответили...Поэтому более тема неинтересна.
Огромное спасибо!
Очень помогли.

Перебор строчек для активации текста в формулу
Если прописана формула как текст как активировать формулу


Собрал формулу гиперссылки из разных ячеек через функцию СЦЕПИТЬ, заменил формулу как значение, затем что бы активировать получившуюся гиперссылку в 2646 строчках прошелся макросом используя Ваш совет активации формулы.

Получилось для столбца "D" , он же четвертый вот так.
Код
Sub ActivateFormula()
For i = 1 To 2646
'    ActiveCell.FormulaLocal = ActiveCell.Text
    Cells(i, 4).FormulaLocal = Cells(i, 4).Text
    Next i
    MsgBox "Готово"
End Sub

Возможно кому-то тоже пригодится.
Еще раз спасибо.

Активации формул с помощью VBA на просторах интернета так и не нашел, как всегда выручает planetaexcel/
 
Чтобы "активировать" формулы, которые написаны в ячейку корректно с точки зрения грамматики, последовательности аргументов и функций и стоят как текст:
Ctrl+H
Заменить "=" на "="
 
Всем добрый день!
Вопрос по теме, но предложенные выше варианты к сожалению не подходят.
В общем, есть столбец с формулами, в 2000 ячеек, формулы в них отображаются как текст, данные формулы ссылаются на внешние источники, которые меняются в конечной папке,  соответственно ни все файлы из перечня формул есть в папке, и при преобразовании этих формул из текста в активную формулу, появляется окно которое предлагает указать путь к прописанному в формуле файлу. Ctrl+H Заменить "=" на "=" не подходит т.к. вылетает окно с запросом пути, я сейчас это делаю через F2-Enter-esc, самый оптимальный способ, но муторно. Выше перечисленные макросы тоже не подходят. Как этот процесс автоматизировать макросом?
Изменено: Egor87 - 06.04.2024 21:40:10
Страницы: 1
Наверх