Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Метод WorksheetFunction.Sum – сумма аргументов

    Вычисление суммы числовых аргументов или значений диапазона ячеек с помощью кода VBA Excel. Метод WorksheetFunction.Sum – синтаксис, примеры.

    Метод WorksheetFunction.Sum

    Метод Sum объекта WorksheetFunction возвращает сумму значений своих аргументов. Аргументы могут быть числами, переменными и выражениями, возвращающими числовые значения.

    Синтаксис метода WorksheetFunction.Sum:

    • Arg – аргумент, который может быть числом, переменной, выражением. Тип данных — Variant. Максимальное количество аргументов – 30.
    • Метод WorksheetFunction.Sum возвращает значение типа Double.

    Значение функции рабочего листа Sum может быть присвоено:

    • переменной числового типа Double или универсального типа Variant (при использовании числовых переменных других типов возможны недопустимые округления значений, возвращаемых методом WorksheetFunction.Sum);
    • выражению, возвращающему диапазон ячеек (точнее, возвращающему свойство Value диапазона, которое является свойством по умолчанию и его в выражениях можно не указывать);
    • другой функции в качестве аргумента.

    Примеры вычисления сумм в коде VBA

    Пример 1

    Присвоение значений, вычисленных методом WorksheetFunction.Sum, переменной:

    Наверно, вы удивитесь, но информационное окно MsgBox дважды покажет одно и то же число 10. Почему так происходит?

    Дело в том, что переменная a объявлена как целочисленная (Integer). Дробные числа, возвращенные функцией рабочего листа Sum, были округлены, а в VBA Excel применяется бухгалтерское округление, которое отличается от общепринятого.

    При бухгалтерском округлении 10.5 и 9.5 округляются до 10. Будьте внимательны при выборе типа переменной.

    Пример 2

    Вычисление суммы значений диапазона ячеек, расположенного на текущем листе:

    Если хотите проверить работу кода в своем редакторе VBA, заполните на рабочем листе Excel диапазон A1:C5 любыми числами.

    Самая удобная формулировка по моему мнению:

    Cells(10, 6) = WorksheetFunction.Sum(Range(Cells(2, 6), Cells(9, 6))) ,

    где вместо номеров строк и столбцов можно использовать переменные.

    Пример 3

    Вычисление суммы значений диапазона ячеек, расположенного на другом листе:

    Пример 4

    Самый простой пример, где метод WorksheetFunction.Sum используется в качестве аргумента другой функции:

    В данном случае значение функции рабочего листа Sum является аргументом функции MsgBox.


    Возможно, вам интересно, откуда я взял, что функция рабочего листа (WorksheetFunction) является объектом, а сумма (Sum) ее методом? Из справки Microsoft.

    Смотрите также статьи о методах WorksheetFunction.SumIf (суммирование с одним условием) и WorksheetFunction.SumIfs (суммирование с несколькими условиями).


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    13 комментариев для “VBA Excel. Метод WorksheetFunction.Sum – сумма аргументов”

    1. Подскажите, можно ли таким образом WorksheetFunction.Sum(Range(Cells(1, 2), Cells(5, 2))) выделить несколько несмежных диапазонов? С указанием столбцов и строк вроде как можно. А вот указать несколько диапазонов через cells (x,y) — это возможно?

      1. Привет, Алексей!
        Посчитать сумму несмежного диапазона можно так:

        а выделить его — так:

    2. Информационные источники предлагают еще одно решение.

      Какие преимущества/недостатки каждого из них?

      1. Application.Sum и WorksheetFunction.Sum – два способа записи одной и той же функции. Отличие в том, что запись Application.Sum не упоминается в документации по VBA Excel, хотя и работает, как и другие встроенные функции рабочего листа. Я предпочитаю запись WorksheetFunction.Sum.

    3. Доброго времени суток!
      Подскажите как получить сумму на Листе2, а результат вывести в ячейке на Листе1?!

      PosStr — переменная с последней ячейкой

      1. Здравствуйте, Виктор!

        1. Здравствуйте, Евгений!
          К сожалению не работает.
          Ошибка:
          Application-defined or object-defined error
          Вот в принципе весь код по нажатию кнопки на листе1:

          Будет отлично, если Вы поможете решить эту задачку.
          Заранее спасибо!

          1. Виктор, попробуйте запустить одну строку кода:

            • Лист1.Cells(3, 10): Лист1 — имя листа в проводнике редактора VBA;
            • Sheets("Лист1"): Лист1 — имя ярлычка.
    4. Добрый день!
      Можно ли использовать данную функцию, если необходимо сложить одинаковые ячейки, но в разных книгах?
      У меня 50 разных файлов, одинаковых по структуре, необходимо свести все данные в 1 общий файл, сохранив структуру.

      1. Здравствуйте, Анна!
        Можно, но без WorksheetFunction будет попроще:

        WorksheetFunction вам не подойдет, так как эта функция может обработать только 30 аргументов.

        1. Добрый день!
          Каким образом в таком случае лучше записать макрос? может быть, есть какой-то подходящий пример?

    5. Доброго вечера!
      Можно ли этой функцией суммировать необходимый диапазон в массиве?

      Есть массив с числами, нужно постоянно сдвигать диапазон суммирования и возвращать сумму для формулы.

      Как лучше сделать?

    Добавить комментарий

    Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.