Использование листа Excel в качестве функции

2

Интересно, как я могу использовать лист Excel в качестве функции.

Допустим, у меня есть сложное вычисление в Sheet1 с одним параметром, который я хотел бы перебрать в диапазоне от [1 до 400] во втором листе, чтобы создать таблицу x, f (x) в Sheet2.

Я буду использовать Excel или Open Office.

Как бы я поступил так?

Благодарю.


Обновление прогресса

Попытка сделать тест в листе (общее):

Public Function test() as Boolean
    test = True
End Function

Тогда в клетку:

=test()

В результате #Name?

Также попробовал прочесать онлайн-уроки.


Частично решено:

  • Видимость функции достигается путем помещения кода в модуль.
  • Вставить -> модуль в VBA.

Прогресс:

Установка значения av с помощью

 Worksheets("Sheet1").Range("A1").Value = 10

 or

 Worksheets("Sheet1").Cells(1,1).Value = 10

молчит и не выполняет строку под.


Прогресс:

Методы работают хорошо, если я перебираю код в подпрограмме без параметров и назначаю ее кнопке.

Временное решение

Реализация была действительно простой при реализации с использованием макроса VBA, запускаемого с кнопки, а не с помощью функции.

Я перебрал ряд строк, чтобы получить входные данные для расчетов.

tovare
источник
1
RE тестовая функция не выполнена - вы включили макросы для рассматриваемого файла? IIRC, с их отключением, пользовательские функции не будут работать.
DMA57361
Спасибо, я думаю, возможно, это была проблема с видимостью. Перемещение кода в модуль решило это. Теперь самое
сложное
1
Оба эти примера в вашем последнем обновлении работают для меня (Excel 2003, какую версию вы используете?). Вы также можете использовать Sheets("Sheet1")и .Formula = 10- и то и другое одинаково при установке значений (но Формула сильно отличается при извлечении). Я сомневаюсь, что это поможет, хотя ...
DMA57361
Я попробовал две установки Excel 2003. В одной из них было отключено несколько кнопок VB корпоративным администратором, но я справился. Второй должен быть довольно свободным от змеиного масла, но все еще не работает. Завтра попробую еще :-)
tovare
1
Если лист защищен, вы не можете установить значение. Вы должны либо снять защиту, либо использовать параметр USERINTERFACEONLY при его блокировке.
Ланс Робертс

Ответы:

3

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

Public Function Test1(x as Integer, y as Integer)  
    Test1 = x*y  
End Function   

Вы можете вызвать эту функцию, как и любую другую функцию из строки
формул.A1

  • =Test1(2,4) с результатом 8.

Измените алгоритм в VBA, чтобы получить результаты, которые вы ищете.

wbeard52
источник
Я попробую это, я просто предположил, что это не сработает из-за количества вычислений, которые нужно будет каждый раз пересчитывать в первом листе.
Товарищ
1

Я искал ответ на подобный вопрос и нашел что-то вроде этого:

public function GetWhatever(byval p1 as variant, byval p2 as variant) as variant
  'Make sure you're in AutoCalculation mode, otherwise use me.calculate
  me.range("A1").value = p1
  me.range("A2").value = p2
  GetWhatever = me.range("A3").value
end function

ТАК вопрос: https://stackoverflow.com/a/3570907

астра
источник
0

Одна вещь, которую я предпочитаю, это создать DATA TABLE, изменив параметр, а затем LOOKUP для требуемого значения в созданной таблице данных.

Более правильным способом будет написать код в Excel VBA, и он может быть вызван очень легко, без особых усилий. Однако, если у вас уже есть лист Excel, вы можете легко перейти к предыдущему, создав таблицу данных.

Анкит Тивари
источник