Загрузить PDF Загрузить PDF

Хотя в Excel множество (возможно, сотни) встроенных функций, таких как SUM (СУММ), VLOOKUP (ВПР), LEFT (ЛЕВСИМВ) и других, как только вы начинаете использовать Excel для более сложных задач, вы можете обнаружить, что вам нужна такая функция, которой еще не существует. Не отчаивайтесь, вы всегда можете создать функцию сами.

  1. Создайте новую книгу Excel или откройте книгу, в которой хотите использовать пользовательскую функцию (UDF).
  2. , который встроен в Microsoft Excel, выбрав «Инструменты»->«Макросы»->«Редактор Visual Basic» (или нажав Alt+F11).
  3. в свою книгу Excel, нажав на указанную кнопку. Вы можете создать пользовательскую функцию на рабочем листе без добавления нового модуля, но в таком случае вы не сможете использовать эту функцию на других листах книги.
  4. Он должен иметь следующую структуру:

    public function TheNameOfYourFunction (param1 As type1, param2 As type2 ) As returnType У нее может быть сколько угодно параметров, а их тип должен соответствовать любому базовому типу данных Excel или типу объектов, например Range. Параметры в данном случае выступают в качестве «операндов», с которыми работает функция. Например, если вы пишете SIN(45), чтобы вычислить синус 45 градусов, 45 выступает в качестве параметра. Код вашей функции будет использовать это значение для вычислений и представления результата.
  5. Добавьте код нужной функции, убедившись, что вы 1) используете значения, передаваемые в качестве параметров; 2) присваиваете результат имени функции; 3) заканчиваете код функции выражением "end function". Изучение программирования на VBA или на любом другом языке может занять некоторое время и требовать подробного изучения руководства. Однако функции обычно имеют небольшие блоки кода и используют очень мало возможностей языка. Наиболее используемые элементы языка VBA:
    1. Блок If , который позволяет выполнять какую-то часть кода только в случае выполнения условия. Например:


      Public Function Course Result(grade As Integer) As String
        If grade >= 5 Then
          CourseResult = "Approved"
        Else
          CourseResult = "Rejected"
        End If
      End Function


      Обратите внимание на элементы внутри блока If : IF условие THEN код_1 ELSE код_2 END IF . Ключевое слово Else и вторая часть кода необязательны.
    2. Блок Do , который выполняет часть кода, пока выполняется условие ( While ) или до тех пор ( Until ), пока оно не выполнится. Например:

      Public Function IsPrime(value As Integer) As Boolean
        Dim i As Integer
        i = 2
        IsPrime = True
        Do
          If value / i = Int(value / i) Then
            IsPrime = False
          End If
          i = i + 1
        Loop While i < value And IsPrime = True
      End Function


      Обратите внимание на элементы: DO код LOOP WHILE/UNTIL условие . Обратите также внимание на вторую строку, где «объявлена» переменная. В своем коде вы можете добавлять переменные и позже их использовать. Переменные служат для хранения временных значений внутри кода. И наконец, обратите внимание, что функция объявлена как BOOLEAN, что является типом данных, в котором допустимы только значения TRUE и FALSE. Этот способ определения, является ли число простым, далеко не самый оптимальный, но мы оставили его таким, чтобы сделать код более читабельным.
    3. Блок For , который выполняет часть кода указанное число раз. Например:

      Public Function Factorial(value As Integer) As Long
        Dim result As Long
        Dim i As Integer
        If value = 0 Then
          result = 1
        ElseIf value = 1 Then
          result = 1
        Else
          result = 1
          For i = 1 To value
            result = result * i
          Next
        End If
        Factorial = result
      End Function


      Обратите внимание на элементы: FOR переменная = начальное_значение TO конечное_значение код NEXT . Также обратите внимание на элемент ElseIf в выражении If , который позволяет добавить больше условий к коду, который нужно выполнить. И наконец, обратите внимание на объявление функции и переменной "result" как Long . Тип данных Long позволяет хранить значения, намного превышающие Integer .

      Ниже показан код функции, преобразующей небольшие числа в слова.
  6. и используйте свою функцию, набрав в какой-либо ячейке знак равно , а затем имя функции. Добавьте к имени функции открывающую скобку, параметры, разделенные запятыми , и закрывающую скобку. Например:

    =NumberToLetters(A4)

    Вы также можете использовать свою пользовательскую функцию, найдя ее в категории Пользовательские в мастере вставки формулы. Просто нажмите на кнопку Fx , расположенную слева от поля формул. Параметры могут быть трех типов:
    1. Константные значения, непосредственно вводимые в формуле в ячейке. Текстовые строки в таком случае должны быть заключены в кавычки.
    2. Ссылки на ячейки вроде B6 или ссылки на диапазоны вроде A1:C3 (параметр должен иметь тип Range ).
    3. Другие вложенные функции (ваша функция тоже может быть вложенной по отношению к другим функциям). Например: =Factorial(MAX(D6:D8))
  7. при нескольких ее срабатываниях, чтобы удостовериться, что она правильно обрабатывает различные значения параметров.
    Реклама

Советы

  • Всякий раз, когда вы пишете блок кода внутри структуры If, For, Do и так далее, убедитесь, что вы он имеет отступ, который можно сделать с помощью пробелов или знаков табуляции (стиль отступов вы выбираете сами). Это сделает ваш код более читабельным, и вам самим потом легче будет отслеживать ошибки и вносить изменения.
  • Используйте имя, которое еще не используется в качестве имени функции в Excel, иначе вы сможете использовать только одну из этих функций.
  • Excel имеет множество встроенных функций, и большинство вычислений можно сделать с помощью независимого их использования или с использованием их комбинаций. Прежде чем писать свою функцию, пройдитесь по всему списку уже существующих функций. При использовании встроенных функций выполнение может происходить быстрее.
  • В некоторых случаях для вычисления результата функции необязательно знать все значения параметров. В подобных случаях вы можете использовать ключевое слово Optional перед именем параметра в заголовке функции. В коде вы можете использовать функцию IsMissing(имя_параметра) , чтобы определить, было ли параметру присвоено какое-то значение или нет.
  • Если вы не знаете, как написать код функции, прочитайте статью о том, как написать простейший макрос в Microsoft Excel .
Реклама

Предупреждения

  • В связи с определенными мерами безопасности некоторые люди могут отключить макросы. Обязательно известите своих коллег о том, что книга Excel, которую вы им посылаете, содержит макросы, и что эти макросы не навредят их компьютерам.
  • Примеры функций, использованных в этой статье, — необязательно самый лучший способ решить связанные с ними проблемы. Эти функции были использованы, чтобы наглядно показать использование контрольных структур языка.
  • VBA, как и многие другие языки, имеет еще несколько контрольных структур кроме Do, If и For. Эти структуры были приведены здесь, чтобы объяснить, что можно делать внутри кода функций. В интернете есть множество учебников, по которым вы можете изучить VBA.
Реклама

Об этой статье

Эту страницу просматривали 57 649 раз.

Была ли эта статья полезной?

Реклама