Создайте пользовательскую функцию листа в Excel VBA - PullRequest
12 голосов
/ 16 апреля 2009

У меня слабая память о том, что я могу использовать функции VBA для вычисления значений в Excel, например, (в виде формулы ячейки):

=MyCustomFunction(A3)

Можно ли это сделать?

EDIT:

Это моя подпись функции VBA:

Public Function MyCustomFunction(str As String) As String

Функция находится в модуле ThisWorkbook. Если я пытаюсь использовать его на листе, как показано выше, я получаю ошибку #NAME?.


Решение (спасибо, codeape): функция недоступна, когда определен ThisWorkbook модуль. Он должен быть в «правильном» модуле, который был добавлен в рабочую книгу вручную.

Ответы [ 2 ]

19 голосов
/ 16 апреля 2009

Да, может. Вы просто определяете функцию VBA в модуле. См. http://www.vertex42.com/ExcelArticles/user-defined-functions.html для хорошего введения с примерами.

Вот простой пример:

  • Создать новую рабочую книгу
  • Переключиться в режим просмотра VBA (Alt-F11)
  • Вставить модуль: Вставить | Модуль
  • Содержимое модуля:
Option Explicit

Function MyCustomFunction(input)
    MyCustomFunction = 42 + input
End Function
  • Вернитесь к рабочему листу (Alt-F11) и введите некоторые значения:
A1: 2
A2: =MyCustomFunction(A1)
4 голосов
/ 23 марта 2010

Ввод слова необходимо заменить, так как это базовое ключевое слово. Попробуйте вместо этого num. Вы также можете пойти дальше, указав тип, например, вариант.

Function MyCustomFunction(num As Variant)
    MyCustomFunction = 42 + num
End Function
...