Получение формулы другой ячейки в целевой ячейке

Как одна ячейка получает формулу другой ячейки в виде текста без использования VBA? Я вижу, что этот вопрос уже задавали много раз, и ответ всегда заключается в том, чтобы написать пользовательскую функцию в VBA.

Однако я нашел сообщение, сделанное в 2006 году, в котором утверждалось, что найдено решение, отличное от VBA, но ссылка, указанная в этом посте, уже не работает.


person Pupper    schedule 03.02.2012    source источник
comment
Если вы ищете решение, отличное от VBA, это не совсем вопрос программирования, не так ли? Я думаю, это должен быть вопрос суперпользователя.   -  person Ken White    schedule 03.02.2012
comment
Этот отсутствующий пост, похоже, указывал на подход, использующий старый XLM GET.FORMULA() , но если вы готовы зайти так далеко, вам следует просто использовать обычную функцию VBA.   -  person Tim Williams    schedule 03.02.2012
comment
Не уверен, что такое XLM GET.FORMULA(), но, думаю, я буду придерживаться метода VBA.   -  person Pupper    schedule 03.02.2012
comment
@brettdj Я не знал, каким будет результат....   -  person Pupper    schedule 07.02.2012
comment
@TimWilliams - XLM - это то же самое, что XL4?   -  person sancho.s ReinstateMonicaCellio    schedule 07.01.2014
comment
@Scott - это обратное тому, что было задано: получение формулы в виде текста, а не использование текста в качестве формулы (плюс, это VBA, именно то, чего хотел избежать OP).   -  person sancho.s ReinstateMonicaCellio    schedule 07.01.2014


Ответы (5)


Есть хороший способ сделать это без VBA. Он использует макросы XL4 (это макросы, но это не VBA, как просили).

Со ссылкой на рисунок 1, ячейки A2:A4 содержат обычные формулы.

введите здесь описание изображения

  1. Перейдя в Формулы -> Определить имя, я определил два именованных диапазона (см. рис. 2) с информацией, отображаемой в ячейках A6: B8.

    введите здесь описание изображения

  2. Введите в ячейку B2 =FormulaAsText. Это позволит получить формулу в ячейке A2 в виде текста.

    Объяснение. Именованный диапазон FormulaAsText использует =GET.CELL(info_type,reference). В этом случае ìnfo_type = 6 извлекает формулу, а reference = OFFSET(INDIRECT("RC",FALSE),0,-1) использует ячейку со смещением 0 строк и -1 столбцов от той, в которой используется формула.

  3. Скопируйте B2 и вставьте в B3:B4. Это покажет формулы в A3: A4. Ячейка A4 показывает, что функция рабочего листа CELL извлекает только значения, а не формулы (в отличие от GET.CELL).

  4. Поскольку FormulaAsText получает формулу из ячейки с фиксированным смещением (0,-1) от текущего, я определил другой диапазон FormulaAsText2, который использует смещение (строки, столбцы), считанное с самого листа. Ячейки D2:D4 содержат =FormulaAsText2. Таким образом, ячейка D2 показывает содержимое ячейки B3 (=OffSET(D2,1,-2)), то есть FormulaAsText. ячейки D3:D4 показывают содержимое самих себя. Это добавляет некоторую гибкость. YMMV.

PS1: суть взята с http://www.mrexcel.com/forum/excel-questions/20611-info-only-get-cell-arguments.html

PS2: Тим Уильямс упомянул в комментарии «старый XLM GET.FORMULA()». Этот ответ, возможно, связан (не то же самое, поскольку в этом используется GET.CELL()).

PS3: Простое решение VBA приведено, например, в http://dmcritchie.mvps.org/excel/formula.htm


EDIT: в дополнение к этому прекрасному ответу функция рабочего листа FormulaText доступна для Excel 2013 и более поздних версий.

person sancho.s ReinstateMonicaCellio    schedule 07.01.2014

=FormulaText(Reference) сделает свое дело Документация

person Excel User    schedule 09.05.2014
comment
Не могли бы вы дать ссылку на документацию? - person sancho.s ReinstateMonicaCellio; 22.01.2015
comment
Это ответ. Спасибо! - person Scott; 24.02.2015
comment
Не знаю, когда они представили функцию FormulaText, но, похоже, она работает в Excel2013. Как раз то, что мне нужно... спасибо! - person veljkoz; 28.02.2015
comment
В Excel 2010 его нет. - person sancho.s ReinstateMonicaCellio; 27.03.2015

Есть способ сделать это. В моем примере у меня была таблица с датой. Дата взята из Sheet!G91. В моей таблице у меня также был столбец, в котором показывалось имя листа. Я добавил еще два столбца в свою таблицу. В первом столбце есть столбец (Лист!g91), который возвращает число 7, потому что G — седьмая буква в алфавите. Затем я преобразовал число в букву (G), используя другую таблицу в моей рабочей тетради. Во втором столбце, который я добавил, я создал строку формулы (Лист! G91), которая возвращает число 91. Примечание. Строка и столбец могут отображаться как изменчивые формулы, которые пересчитываются при каждом расчете рабочей книги.

Я хотел, чтобы в другом столбце отображалось содержимое формулы ячейки даты, упомянутой в начале этого поста. Я включил следующую строковую функцию (вы также можете использовать CONCATENATE).

"=" & AJ9 & "!" и АМ9 и АН9

Элементы, разделенные амперсандами, объединяются (т. е. конкатенируются). AJ9 в моем примере содержит имя листа, AM9 содержит букву столбца, а AN9 содержит номер строки.

Теперь у меня есть столбец, который динамически обновляет свое содержимое, чтобы отразить имя листа и ссылку на ячейку. Результаты в ячейке моей рабочей книги:

=Лист!G91.

person edwardlm3000    schedule 31.05.2016
comment
Однако этот подход не будет работать для формул в целом, и я думаю, что это то, о чем задается вопрос. - person Matthew Strawbridge; 01.06.2016

Это предложение может быть полезно для тех, кто после извлечения блока формул и переноса их в новую электронную таблицу хочет снова заставить их работать. Функция Excel FORMULATEXT отлично подходит для подбора формул, но оставляет их в виде непригодных текстовых строк. Если вы хотите вернуть их в виде полностью функционирующих формул, вам нужно отредактировать каждую отдельно, чтобы удалить строковый символ, но вот ярлык для больших блоков. Перейдите к позиции, в которой у вас есть необходимые формулы в виде текста (другими словами, после использования FORMULATEXT - вы сделали копию и (только значение) вставку). Следующий шаг включает в себя выделение всех ячеек, которые вы хотите преобразовать, а затем переход к пункту меню [Текст в столбцы] (панель {Данные} в Excel 2016). Вы можете выбрать «С разделителями», но на следующем экране просто убедитесь, что вы сняли отметки со всех меток, которые появляются в ваших формулах. Затем «Готово». Excel должен автоматически анализировать ячейки как содержащие формулы, и теперь они должны снова работать.

person RHR    schedule 27.01.2017

Вы не можете. Скорее всего, это конструктивный выбор, призванный избавить среднего пользователя Excel от случайного получения чего-то, чего он не хотел.

То, что вы читаете, верно - написание UDF - это решение, которое вам нужно.

person aevanko    schedule 03.02.2012
comment
Спасибо Issun (Okami?), я думаю, что VBA - это то, что вам нужно. - person Pupper; 03.02.2012
comment
Я думаю, что этот ответ неверен, и я разместил альтернативу. - person sancho.s ReinstateMonicaCellio; 07.01.2014
comment
Использование XL4 вряд ли можно назвать возможностью получить его с помощью обычных формул Excel (без VBA). Это все равно, что сказать, что вы можете получить формулу с помощью C #, так что это не VBA! Суть вопроса больше в том, как это сделать, используя обычные функции Excel (минус VBA), а не в том, как это сделать не с помощью VBA. - person aevanko; 09.01.2014
comment
@Issun - Ваша интерпретация может быть или не быть намерением ОП, я бы не ручался ни за один из двух вариантов. Вопрос не требовал использования обычных формул Excel (возможно, это было намерением, или, возможно, S200 хотел избежать только VBA). Я только говорю, что ответ на опубликованный вопрос: вы можете... Точно так же решение с С# является не-VBA, поэтому я лично рассматривал бы его как еще один пример, подтверждающий, что вы можете. Вы бы, наверное, точно сформулировали вопрос, на который ответили, и это, конечно, верно, но не в этом случае. - person sancho.s ReinstateMonicaCellio; 12.03.2014
comment
Мне неинтересно это обсуждать. ОП явно поставил тег формул на вопрос, чтобы было ясно, о чем он / она спрашивал. Есть много способов «вы можете» распечатать его и посмотреть, используя сценарий Apple, используя C# и т. д., но глупо даже обсуждать это. - person aevanko; 12.03.2014
comment
@Issun - формулы тега, возможно, намекают на тот факт, что ОП хотел получить формулу в ячейке (о чем он / она явно спрашивал), а не потому, что он / она хотел сделать это с другой формулой. Возможно, не стоит обсуждения (и это, скорее всего, не обсуждение в любом случае). Но хорошо обмениваться идеями. - person sancho.s ReinstateMonicaCellio; 15.03.2014