Перейти к содержимому

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

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

  1. Метод WorksheetFunction.Sum
  2. Примеры вычисления сумм в коде VBA

Метод WorksheetFunction.Sum

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

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

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

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

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

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

Присвоение значений WorksheetFunction.Sum переменной

Sub Primer_1()
Dim a As Integer
  a = WorksheetFunction.Sum(5.5, 25, 8, -28)
MsgBox a
  a = WorksheetFunction.Sum(4.5, 25, 8, -28)
MsgBox a
End Sub

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

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

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

Вычисление суммы значений диапазона ячеек

Sub Primer_2()
'Итог в 6 ячейке столбца "A"
Cells(6, 1) = WorksheetFunction.Sum(Cells(1, 1), Cells(2, 1), _
Cells(3, 1), Cells(4, 1), Cells(5, 1))
'Итог в 6 ячейке столбца "B"
Range("B6") = WorksheetFunction.Sum(Range(Cells(1, 2), Cells(5, 2)))
'Итог в 6 ячейке столбца "C"
Range("B6").Offset(, 1) = WorksheetFunction.Sum(Range("C1:C5"))
'Присвоение суммы диапазону ячеек
Range("A8:C10") = WorksheetFunction.Sum(Range("A1:C5"))
End Sub

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

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

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

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

WorksheetFunction.Sum в качестве аргумента другой функции

Самый простой пример:

Sub Primer_3()
MsgBox WorksheetFunction.Sum(24, -5, 8 * 2)
End Sub

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

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

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

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

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

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. При добавлении в комментарий кода VBA Excel, вставьте перед его началом тег [vb] и по окончании кода - [/vb].