2012-02-03 1 views
17

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

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

+1

Если вы ищете решение, отличное от VBA, это не вопрос программирования, не так ли? Я думаю, это должен быть вопрос [superuser] (http://superuser.com). –

+2

Этот недостающий пост, похоже, указал на подход, использующий старый XLM 'GET.FORMULA()', но если бы вы были готовы пойти так далеко, вы должны просто использовать регулярную функцию VBA. –

+0

Не знаете, что такое XLM GET.FORMULA(), но я думаю, что буду придерживаться метода VBA. – S200

ответ

16

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

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

enter image description here

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

    enter image description here

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

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

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

  4. Поскольку FormulaAsText получает формулу из ячейки на фиксированное смещение (0, -1) от тока, я определил другой диапазон FormulaAsText2, который использует смещение (строки, Cols), считанные из самого листа. Клетки 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: Дополняя this nice answer функция рабочего листа FormulaText доступна for Excel 2013 и позже.

-5

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

Что вы читаете правильно - писать UDF - это то, что вы хотите.

+0

Спасибо Исун (Оками?), Я думаю, что VBA - это путь. – S200

+1

Добро пожаловать (и Оками прав!) ^^ – aevanko

+0

Я думаю, что этот ответ неверен, и я опубликовал альтернативу. –

15

=FormulaText(Reference) будет делать трюк Documentation

+1

Не могли бы вы предоставить ссылку на документацию? –

+0

Это ответ. Благодаря! – Scott

+1

Не знаю, когда они представили функцию FormulaText, но, похоже, она работает в Excel2013. Просто то, что мне нужно ... спасибо! – veljkoz

0

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

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

"=" & AJ9 & "!" & AM9 & AN9

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

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

= Лист! G91.

+0

Этот подход не будет работать для формул в целом, хотя, по моему мнению, это вопрос, о котором идет речь. –

0

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