Метод Sum объекта WorksheetFunction возвращает сумму значений своих аргументов. Аргументы могут быть числами, переменными и выражениями, возвращающими числовые значения.
Синтаксис метода WorksheetFunction.Sum:
WorksheetFunction . Sum ( Arg1 , Arg2 , Arg3 , . . . , Arg30 )
- Arg – аргумент, который может быть числом, переменной, выражением. Тип данных — Variant. Максимальное количество аргументов – 30.
- Метод WorksheetFunction.Sum возвращает значение типа Double.
Значение функции рабочего листа Sum может быть присвоено:
- переменной числового типа Double или универсального типа Variant (при использовании числовых переменных других типов возможны недопустимые округления значений, возвращаемых методом WorksheetFunction.Sum);
- выражению, возвращающему диапазон ячеек (точнее, возвращающему свойство Value диапазона, которое является свойством по умолчанию и его в выражениях можно не указывать);
- другой функции в качестве аргумента.
Примеры вычисления сумм в коде VBA
Пример 1
Присвоение значений, вычисленных методом WorksheetFunction.Sum, переменной:
#02. Как написать функцию | VBA Excel
Sub Primer1 ( )
Dim a As Integer
a = WorksheetFunction . Sum ( 5.5 , 25 , 8 , — 28 )
a = WorksheetFunction . Sum ( 4.5 , 25 , 8 , — 28 )
Наверно, вы удивитесь, но информационное окно MsgBox дважды покажет одно и то же число 10. Почему так происходит? Дело в том, что переменная a объявлена как целочисленная (Integer). Дробные числа, возвращенные функцией рабочего листа Sum, были округлены, а в VBA Excel применяется бухгалтерское округление, которое отличается от общепринятого.
При бухгалтерском округлении 10.5 и 9.5 округляются до 10. Будьте внимательны при выборе типа переменной.
Пример 2
Sub Primer2 ( )
‘Итог в 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» ) )
Если хотите проверить работу кода в своем редакторе VBA, заполните на рабочем листе Excel диапазон A1:C5 любыми числами. Самая удобная формулировка по моему мнению: Cells(10, 6) = WorksheetFunction.Sum(Range(Cells(2, 6), Cells(9, 6))) , где вместо номеров строк и столбцов можно использовать переменные.
Пример 3
Sub Primer3 ( )
Лист 1.Cells ( 3 , 10 ) = WorksheetFunction . Sum ( Range ( Лист 2.Cells ( 2 , 5 ) , Лист 2.Cells ( 100 , 5 ) ) )
Пример 4
Sub Primer4 ( )
MsgBox WorksheetFunction . Sum ( 24 , — 5 , 8 * 2 )
В данном случае значение функции рабочего листа Sum является аргументом функции MsgBox. Возможно, вам интересно, откуда я взял, что функция рабочего листа (WorksheetFunction) является объектом, а сумма (Sum) ее методом? Из справки Microsoft. Смотрите также статьи о методах WorksheetFunction.SumIf (суммирование с одним условием) и WorksheetFunction.SumIfs (суммирование с несколькими условиями).
Функции в VBA — (Серия VBA 19 — Часть 1: Теоретический базис)
Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.
15 комментариев для “VBA Excel. Метод WorksheetFunction.Sum – сумма аргументов”
Подскажите, можно ли таким образом WorksheetFunction.Sum(Range(Cells(1, 2), Cells(5, 2))) выделить несколько несмежных диапазонов? С указанием столбцов и строк вроде как можно. А вот указать несколько диапазонов через cells (x,y) — это возможно?
WorksheetFunction . Sum ( Range ( Cells ( 1 , 2 ) , Cells ( 5 , 2 ) ) , Range ( Cells ( 3 , 4 ) , Cells ( 7 , 5 ) ) )
Union ( Range ( Cells ( 1 , 2 ) , Cells ( 5 , 2 ) ) , Range ( Cells ( 3 , 4 ) , Cells ( 7 , 5 ) ) ) . Select
Cells ( 10 , 6 ) . Value = Application . Sum ( Range ( Cells ( 2 , 6 ) , Cells ( 9 , 6 ) ) )
Какие преимущества/недостатки каждого из них?
Application.Sum и WorksheetFunction.Sum – два способа записи одной и той же функции. Отличие в том, что запись Application.Sum не упоминается в документации по VBA Excel, хотя и работает, как и другие встроенные функции рабочего листа. Я предпочитаю запись WorksheetFunction.Sum.
Лист 1.Cells ( 3 , 10 ) = WorksheetFunction . Sum ( Лист 2.Range ( Cells ( 2 , 1 ) , Cells ( PosStr , 1 ) ) )
PosStr — переменная с последней ячейкой
Лист 1.Cells ( 3 , 10 ) = WorksheetFunction . Sum ( Range ( Лист 2.Cells ( 2 , 1 ) , Лист 2.Cells ( PosStr , 1 ) ) )
Private Sub CommandButton1_Click ( )
PosStr = WorksheetFunction . CountA ( Лист 2.Range ( «A:A» ) ) + 1
Лист 2.Cells ( PosStr , 1 ) = TextBox1 . Value
Лист 2.Cells ( PosStr , 1 + 1 ) = ComboBox1 . Value
Лист 2.Cells ( PosStr , 1 + 2 ) = Date
Лист 1.Cells ( 3 , 10 ) = WorksheetFunction . Sum ( Range ( Лист 2.Cells ( 2 , 1 ) , Лист 2.Cells ( PosStr , 1 ) ) )
‘Worksheets(«Лист2»).
‘Лист1.Cells(3, 10) = WorksheetFunction.Sum(Лист2.Range(2, 1), Лист2.Range(2, PosStr))
TextBox1 . Text = «»
ComboBox1 . Clear
ComboBox1 . Text = «»
Будет отлично, если Вы поможете решить эту задачку.
Заранее спасибо!
Лист 1.Cells ( 3 , 10 ) = WorksheetFunction . Sum ( Range ( Лист 2.Cells ( 2 , 1 ) , Лист 2.Cells ( 10 , 1 ) ) )
‘и, если ошибка повторится
Sheets ( «Лист1» ) . Cells ( 3 , 10 ) = WorksheetFunction . Sum ( Range ( Sheets ( «Лист2» ) . Cells ( 2 , 1 ) , Sheets ( «Лист2» ) . Cells ( 10 , 1 ) ) )
- Лист1.Cells(3, 10) : Лист1 — имя листа в проводнике редактора VBA;
- Sheets(«Лист1») : Лист1 — имя ярлычка.
Добрый день!
Можно ли использовать данную функцию, если необходимо сложить одинаковые ячейки, но в разных книгах?
У меня 50 разных файлов, одинаковых по структуре, необходимо свести все данные в 1 общий файл, сохранив структуру.
WorksheetFunction вам не подойдет, так как эта функция может обработать только 30 аргументов.
Добрый день!
Каким образом в таком случае лучше записать макрос? может быть, есть какой-то подходящий пример?
Здравствуйте, Анна!
Смотрите примеры в статье Сбор данных из открытых книг.
Доброго вечера!
Можно ли этой функцией суммировать необходимый диапазон в массиве? Есть массив с числами, нужно постоянно сдвигать диапазон суммирования и возвращать сумму для формулы. Как лучше сделать?
Здравствуйте. Пытаюсь запустить по кнопке на листе 1, а сумму взять с неактивного листа, но выдает ошибку:
Application-defined or object-defined error
summaSt = Application.Sum(.Range(Cells(6, i), Cells(6, i + kolvoSt — 1)))
так тоже не выходит
With Worksheets(«Result_Inj»)
summaSt = Application.Sum(.Range(Cells(6, i), Cells(6, i + kolvoSt — 1)))
End With
Если перейти на лист Result_Inj, то все работает без With Worksheets(«Result_Inj») Я так понял, сумму можно посчитать исключительно на активном листе? Не даром пишется Worksheet. Есть ли способ кроме дедовского, складывать каждую ячейку?
Добрый день!
Если вы используете оператор With, не забывайте проставлять точки не только перед .Range , но и перед .Cells , так как Cells без точки — это ячейка на активном листе.
Источник: vremya-ne-zhdet.ru
Презентация на тему Программирование на языке Visual Basic for Applications (VBA)

Вид/Макрос/Имя/Создать (или Alt/F11).
Возвратиться из редактора VBA в рабочую книгу можно нажатием кнопки Вид/Microsoft Excel (или Alt/F11).
Приостановить программу можно нажатием кнопок Ctrl/Pause Break.
Для запуска программы из редактора — клавиша F5. Для запуска программы из документа — alt+F8

Слайд 62. Типы данных и переменные

Слайд 7Ключевые слова — это слово или символ,
которые являются элементом VBA (инструкция, имя функции,
Операторы используются для объединения простых выражений в более сложные. Они выполняют арифметические, логические операции, а также операции сравнения и конкатенации «
2) вычисления встроенных функций;
3) возведение в степень;
4) операции умножения и деления;
5) операции целочисленного деления;
6) операции деления по модулю;
7) операции сложения и вычитания.
Операции равного старшинства выполняются по порядку слева направо.
Исключение: А^В^С=А^(В^С).

Слайд 22IV. Тип арифметического выражения определяется типом его
результата: а) операция деления (« ») с
целыми величинами дает вещественный результат; б) выражение может содержать и целые и вещественные величины. Результат такого выражения — вещественная величина; в) при наличии в арифметическом выражении величин двойной точности результатом будет величина той же точности.

Слайд 23

Слайд 24
1) 3arctgX+e5,11-2e → 3*atn(x)+exp(5.11)-2*exp(1)

Слайд 25Самостоятельная работа. Перевести выражения на язык программирования
1)
Y= A2 – C2
4) Z =3.5*4-0.6Y *ln(X+С)

Слайд 26Результат
1) Y= (A^2+C^2)/(A^2-B)
+ SQR (А^2+I^3)
4) Z = 3.5 * 4 ^ (-0.6 * Y) * Log(X+С)
Источник: thepresentation.ru