Excel - Лист как функция

У меня есть два листа Excel. Первый содержит формулу для расчета с одной входной ячейкой (A1) и одной выходной ячейкой (B1). Формула для B1 может быть B1 = A1 * 3 (пример).

Второй лист содержит различные значения в столбце A: A1 = 4; A2 = 9; A3 = 5 ... В соответствующем столбце B этого листа я хотел бы получить результат B1 (первый лист) = A1 (второй лист) * 3 для каждого входного значения A (второй лист).

В основном я хотел бы рассматривать первый лист как функцию, где A1 - аргумент, а B1 - результат, который передается обратно в столбец B второго листа.

Лист 2

A1 4      B1 12 (result from sheet 1)  
A2 9      B2 27 (result from sheet 1)

...

Можно ли без макросов?


person Cosmo    schedule 04.10.2011    source источник


Ответы (5)


Это встроено в Excel. В версии 2003 используйте меню «Данные», «Таблица».
Вы можете найти множество примеров в сети. Вот один.
Вы можете создавать такие таблицы с 1 или 2 записями (параметрами).

person Patrick Honorez    schedule 04.10.2011
comment
Чтобы добавить к этому, см. Здесь: stackoverflow.com/questions/4640336/ - person jtolle; 04.10.2011

Я так не думаю ..... Если в B1 Sheet1 у вас есть 3*A1

Если вы попробуете это в Sheet2 B1

`=SUBSTITUTE(Sheet1!$B$1,"A1",A1)`

он даст 3*4, а Sheet2 B2 будет 3*9etc

Но я не понимаю, как вы могли бы привести это к числовому вычислению с помощью формул без, возможно, какого-либо тяжелого синтаксического анализа строки формул для отделения чисел от операторов (что нелегко сгибать по желанию, если вы измените запись в B1 Sheet 1)

[Обновление 2: но, черт возьми, я сделал это с именованным диапазоном]

Я использовал это название диапазона

RngTest

=EVALUATE(3*INDIRECT("rc[-1]",FALSE))

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

поэтому ввод = RngTest в B1: B3 (а затем и в этом новом примере C1: C3) дает желаемый результат   введите описание изображения здесь

person brettdj    schedule 04.10.2011

Я думаю, вы хотите использовать это в своем листе два столбца.

Sheet1!B1 * Sheet2!A1
person Jesse Seger    schedule 04.10.2011
comment
На самом деле это не то, что я хочу. Я хотел бы рассматривать Sheet1 как функцию (метод) для возврата значений на основе аргументов. - person Cosmo; 04.10.2011
comment
В первом абзаце вы говорите, что B1 = A1 * 3. Во втором абзаце вы говорите B1 = Sheet2! A1 * 3. Что он? - person Jesse Seger; 04.10.2011
comment
Я думаю, он хочет иметь возможность написать шаблон формулы на Sheet1! B1. Затем этот шаблон следует отрегулировать в соответствующем месте на Sheet2. - person Jean-François Corbett; 04.10.2011

Полностью без VBA: ожидайте много боли, я туда не пойду. Но...

Чтобы существенно уменьшить количество боли, вы могли бы использовать эту крошечную пользовательскую функцию VBA (технически не «макрос»), в основном просто оболочку, чтобы сделать функцию VBA Evaluate доступной в формулах рабочего листа:

Function eval(myFormula As String)
    eval = Application.Evaluate(myFormula)
End Function

Затем вы можете использовать его так в ячейке B1 на листе 2:

=eval(SUBSTITUTE(Sheet1!$B$1,"A1","A"&ROW()))

Обратите внимание, что для этого требуется, чтобы ячейка B1 на Листе 1 содержала A1*3, а не =A1*3, то есть без знака равенства. Может быть, немного повозившись, его можно заставить работать даже со знаком = там ...

РЕДАКТИРОВАТЬ: На самом деле, если вы отформатируете ячейку B1 листа 1 как текст перед вводом формулы, это будет работать, даже если ваша формула начинается с =.

person Jean-François Corbett    schedule 04.10.2011

Можно ли без макросов?

Да!

Теперь вы можете использовать для этого =LAMBDA.

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

См. Синтаксис на странице Знакомство с функцией LAMBDA.

Дополнительные сведения об использовании функции LAMBDA см. В справочная документация.

person ed2    schedule 13.04.2021