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

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.

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

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