Суммирование со смещением в excel

Бывают ситуации, когда заранее не известно какие именно ячейки на листе нужно подсчитывать. Например, представим, что нам нужно реализовать в Excel небольшой транспортный калькулятор для расчета расстояния проезда от одной заданной станции до другой:

Калькулятор проезда с функцией СМЕЩ (OFFSET)

В выпадающих списках в желтых ячейках F3 и F5 пользователь выбирает станции отправления и назначения, а в зеленой ячейке F7 должна подсчитываться сумма всех ячеек в заданном «окне» на листе. Для проезда от Останкино до Ховрино, как на рисунке, например, нужно будет просуммировать все ячейки в обведенном зеленым пунктиром диапазоне.

Как считать суммму — понятно, а вот как определить диапазон ячеек, которые нужно просуммировать? Ведь при выборе станций он будет постоянно трансформироваться?

В подобной ситуации может помочь функция СМЕЩ (OFFSET), способная выдать ссылку на «плавающее окно» — диапазон заданного размера, расположенный в определенном месте листа. Синтаксис у функции следующий:

=СМЕЩ(Точка_отсчета; Сдвиг_вниз; Свиг_вправо; Высота; Ширина)

Эта функция на выходе дает ссылку на диапазон, сдвинутый относительно некоей стартовой ячейки (Точка_отсчета) на определенное количество строк вниз и столбцов вправо. Причем размер диапазона («окна») тоже может задаваться параметрами Высота и Ширина

В нашем случае, если взять за точку отсчета ячейку А1, то:

Параметры СМЕЩ

  • Точка отсчета = А1
  • Сдвиг_вниз = 4
  • Свиг_вправо = 2
  • Высота = 4
  • Ширина = 1

Чтобы рассчитать необходимые для СМЕЩ аргументы, давайте сначала применим функцию ПОИСКПОЗ (MATCH), которую мы уже разбирали, для вычисления позиций станций отправления и назначения:

Вычисляем позиции станций

И, наконец, используем функцию СМЕЩ, чтобы получить ссылку на нужное «окно» на листе и просуммировать все ячейки из него:

Суммируем ячейки из динамического окна на листе функцией СМЕЩ

Вот и все, задача решена :)

P.S.

В отличие от большинства остальных функций Excel, СМЕЩ является волатильной (volatile) или, как еще говорят, «летучей» функцией. Обычные функции пересчитываются только в том случае, если меняются ячейки с их аргументами. Волатильные же пересчитываются каждый раз при изменении любой ячейки. Само-собой, это отрицательно сказывается на быстродействии. В больших тяжелых таблицах разница по скорости работы книги может быть очень ощутимой (в разы). Для некоторых случаев быстрее оказывается заменить медленную СМЕЩ на неволатильную ИНДЕКС или другие аналоги.

Ссылки по теме

  • Поиск позиции заданного элемента в списке функцией ПОИСКПОЗ (MATCH)
  • 4 способа создать выпадающий список в ячейке листа Excel
  • 5 вариантов применения функции ИНДЕКС

If your Excel worksheet includes calculations that are based on a changing range of cells, use the SUM and OFFSET functions together in a SUM OFFSET formula to simplify the task of keeping the calculations up to date.

Instructions in this article apply to Excel for Microsoft 365, Excel 2019, Excel 2016, Excel 2013, and Excel 2010.

Create a Dynamic Range With the SUM and OFFSET Functions

If you use calculations for a period of time that continually changes — such as determining sales for the month — use the OFFSET function in Excel to set up a dynamic range that changes as each day’s sales figures are added.

By itself, the SUM function can usually accommodate the insertion of new cells of data into the range being summed. One exception occurs when the data is inserted into the cell where the function is currently located.

In the example below, the new sales figures for each day are added at the bottom of the list, forcing the total to continually shift down one cell each time as the new data is added.

To follow along with this tutorial, open a blank Excel worksheet and enter the sample data. Your worksheet doesn’t need to be formatted like the example, but be sure to enter the data in the same cells.

If only the SUM function is used to total the data, the range of cells used as the function argument would need to be modified each time new data is added.

By using the SUM and OFFSET functions together, the range that is totaled becomes dynamic and changes to accommodate new cells of data. The addition of new cells of data does not cause problems because the range continues to adjust as each new cell is added.

Syntax and Arguments

In this formula, the SUM function is used to total the range of data supplied as the argument. The start point for this range is static and is identified as the cell reference to the first number to be totaled by the formula.

The OFFSET function is nested inside the SUM function and creates a dynamic endpoint to the range of data totaled by the formula. This is accomplished by setting the endpoint of the range to one cell above the location of the formula.

The formula syntax is:

=SUM(Range Start:OFFSET(Reference,Rows,Cols))

The arguments are:

  • Range Start: The starting point for the range of cells that will be totaled by the SUM function. In this example, the starting point is cell B2.
  • Reference: The required cell reference used to calculate the range endpoint. In the example, the Reference argument is the cell reference for the formula because the range ends one cell above the formula.
  • Rows: The number of rows above or below the Reference argument used in calculating the offset is required. This value can be positive, negative, or set to zero. If the offset location is above the Reference argument, the value is negative. If the offset is below, the Rows argument is positive. If the offset is located in the same row, the argument is zero. In this example, the offset begins one row above the Reference argument, so the value for the argument is negative one (-1).
  • Cols: The number of columns to the left or right of the Reference argument used to calculate the offset. This value can be positive, negative, or set to zero. If the offset location is to the left of the Reference argument, this value is negative. If the offset is to right, the Cols argument is positive. In this example, the data being totaled is in the same column as the formula, so the value for this argument is zero.

Use the SUM OFFSET Formula to Total Sales Data

This example uses a SUM OFFSET formula to return the total for the daily sales figures listed in column B of the worksheet. Initially, the formula was entered into cell B6 and totaled the sales data for four days.

The next step is to move the SUM OFFSET formula down one row to make room for the fifth day’s sales total. This is accomplished by inserting a new row 6, which moves the formula to row 7.

As a result of the move, Excel automatically updates the Reference argument to cell B7 and adds cell B6 to the range summed by the formula.

  1. Select cell B6, which is the location where the formula results will initially display.

  2. Select the Formulas tab of the ribbon.

  3. Choose Math & Trig.

  4. Select SUM.

  5. In the Function Arguments dialog box, place the cursor in the Number1 text box.

  6. In the worksheet, select cell B2 to enter this cell reference in the dialog box. This location is the static endpoint for the formula.

  7. In the Function Arguments dialog box, place the cursor in the Number2 text box.

  8. Enter OFFSET(B6,-1,0). This OFFSET function forms the dynamic endpoint for the formula.

  9. Select OK to complete the function and close the dialog box. The total appears in cell B6.

Add the Next Day’s Sales Data

To add the next day’s sales data:

  1. Right-click the row header for row 6.

  2. Select Insert to insert a new row into the worksheet. The SUM OFFSET formula moves down one row to cell B7 and row 6 is now empty.

  3. Select cell A6 and enter the number 5 to indicate that the sales total for the fifth day is being entered.

  4. Select cell B6, enter $1458.25, then press Enter.

  5.  Cell B7 updates to the new total of $7137.40.

When you select cell B7, the updated formula appears in the formula bar.

=SUM(B2:OFFSET(B7,-1,0))

The OFFSET function has two optional arguments: Height and Width, which were not used in this example. These arguments tell the OFFSET function the shape of the output in terms of the number of rows and columns.

By omitting these arguments, the function uses the height and width of the Reference argument instead, which, in this example is one row high and one column wide.

Thanks for letting us know!

Get the Latest Tech News Delivered Every Day

Subscribe

Программу Excel любят за возможность быстро и автоматически считать сложные формулы. Достаточно освоить элементарные команды, чтобы экономить значительное количество времени.

Функция СМЕЩ относится к более сложным массивам, поэтому используется редко. Но она может оказаться очень полезной при подсчете суммы, когда есть необходимость добавлять новые строки.

СМЕЩ и ее синтаксис

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

  1. Ссылка: это отправная ячейка. Относительно нее и происходит смещение.
  2. Смещение по строкам: количество строк, на которые нужно спуститься или подняться от отправной ячейки. Если идем вниз – значение будет положительным (от 1 и далее); если вверх – отрицательным (от -1 и далее).
  3. Смещение по столбцам: количество столбцов, на которые нужно уйти вправо или влево от отправной точки. Если вправо – положительное значение; влево – отрицательное.
  4. Высота и ширина: параметры диапазона, который будет возвращен функцией СМЕЩ. Если нам нужна одна ячейка, мы ставим цифры 1 и 1. Если нужна таблица, задаем иные значения, например 3 и 4, 6 и 8 и т.д.

У команды СМЕЩ есть несколько функций, но сегодня мы разберем самую распространенную и востребованную – автоматическое суммирование новых значений из вновь добавляемых строк.



Пример функции СМЕЩ

Тем, кто знакомится с функцией СМЕЩ, поначалу кажется, что ее вполне можно заменить привычной нам функцией СУММ. Но в некоторых случаях СУММ просто не работает. Разберем это на конкретном примере.

На предприятии создается база данных по ценам разных марок зубных паст, закупаемых на складе по разным оптовым ценам. Внизу указывается общая сумма, которую придется заплатить за единицу продукции. Пока нового товара на складе нет, таблица остается неизменной, и функция СУММ отлично справляется со своей задачей.

Но как только склад предлагает новую марку зубной пасты (назовем ее M), предприятию приходится добавлять дополнительные строки. Если сделать это и ввести новую цифру, то СУММ никак не отреагирует на новую строку (об этом говорит появление зеленого треугольника в верхнем левом углу ячейки и восклицательного знака рядом), потому что команда рассчитана для определенного диапазона. И мы действительно видим, что сумма осталась прежней = 554.

Важно грамотно записать формулу для команды СМЕЩ, чтобы она работала правильно. Действуем по порядку. Наша цель – сосчитать сумму, поэтому функция СУММ будет внешней.

Первым числом в СУММ будет ссылка на первоначальную ячейку, с которой пойдет подсчет. Это D5. После нее записываем команду СМЕЩ, которая будет находиться внутри СУММ.

Начинаем заполнять синтаксис функции СМЕЩ. Первое – это ссылка. Ссылаться будем на саму ячейку, в которой у нас стоит формула, т.е. на D18.

Смещение по строкам указываем в отрицательном значении -1, чтобы второй элемент диапазона суммирования всегда находился в предыдущей ячейке.

Смещение по столбцам нам не нужно, поэтому ставим либо 0, либо просто оставляем пустое место. Не забываем разделять элементы формулы точкой с запятой.

Высоту и ширину не указываем. По умолчанию она будет равна одной ячейке.

СМЕЩ.

После всех действий нажимаем Enter и получаем результат. Функция СМЕЩ просуммировала не только заданный диапазон, но и добавленную строку. Попробуем добавить еще одну, чтобы проверить работу команды. Пусть это будет марка зубной пасты под названием N по цене 51 рубль.

Пример.

И видим, что сумма увеличилась на 51 (получилось 650), в то время как команда СУММ осталась прежней (554).

Добавим значения стоимости для зубных паст M и N и протянем формулу на остальные ячейки, чтобы знать суммы под всеми столбцами.

Пример1.

СМЕЩ замечательно среагировала на введение новых строк. С таким же успехом можно добавлять значения когда угодно, сохранив таблицу.

На освоение именно этой функции, которая позволяет автоматически прибавлять новые значения к общей сумме, обычно требуется не больше часа. Зато в будущем это помогает существенно экономить время на работе. Мы рассмотрели простейший пример с небольшими числами, но многие предприятия работают с огромными массивами, и пользоваться командой СУММ и уж, тем более, калькулятором, совсем неразумно.


Функция

СМЕЩ(

)

, английский вариант OFFSET(),

возвращает ссылку на диапазон ячеек. Размер диапазона и его положение задается в параметрах этой функции.

Функция

СМЕЩ()

часто используется при создании

динамических диапазонов

. Рассмотрим ее подробнее.

Синтаксис функции СМЕЩ()

СМЕЩ(ссылка;смещ_по_строкам;смещ_по_столбцам;высота;ширина), где


  • ссылка

    — ссылка, от которой вычисляется смещение;

  • смещ_по_строкам

    — количество строк, которые требуется отсчитать вверх или вниз, чтобы левая верхняя ячейка результата ссылалась на нужную ячейку (по умолчанию =0);

  • смещ_по_столбцам

    – аналогично

    смещ_по_строкам,

    только смещение отсчитывается по столбцам (по умолчанию =0);

  • высота

    — число строк возвращаемой ссылки. Значение аргумента «высота» должно быть положительным числом;

  • ширина

    — число столбцов возвращаемой ссылки (по умолчанию =1).

Чтобы было понятнее, потренируемся с функцией

СМЕЩ()

, используя

файл примера

.

Примеры

Дана исходная таблица с тремя столбцами.

Задавая параметры функции

СМЕЩ()

подсчитаем сумму значений в различных диапазонах таблицы. Для визуального наблюдения диапазона, возвращаемого функцией

СМЕЩ()

, использовано

Условное форматирование

. Для удобства изменения параметров функции

СМЕЩ()

использованы

Элементы управления

Счетчик

.

Для подсчета суммы значений в столбце

Продажа1

запишем формулу:

=СУММ(СМЕЩ($B$2;0;0;8;1))

диапазон суммирования —

$B$2:$B$9

(левый верхний угол —

$B$2

, высота

8

, смещения верхнего угла нет). Результат

34

.

Для подсчета суммы значений в столбце

Продажа2

запишем формулу:

=СУММ(СМЕЩ($B$2;0;

1

;8;1))

Теперь левый верхний угол диапазона суммирования смещен от

$B$2

на один столбец вправо, т.е. диапазон суммирования стал

$C$2:$C$9

. Результат

68

.

Для подсчета суммы значений в столбцах

Продажа1

и

Продажа2,

изменим ширину диапазона.

=СУММ(СМЕЩ($B$2;0;0;8;

2

))

указав ширину в 2 ячейки, результат составит

102

, диапазон будет модифицирован в

$В$2:$С$9

.

Добавив смещение по строкам (+1), получим результат

99

:

=СУММ(СМЕЩ($B$2;

1

;0;8;2))

диапазон будет модифицирован в

$В$3:$С$9

.

Функция СМЕЩ() vs ИНДЕКС()

Пусть имеется диапазон с числами (

А2:А10

) Необходимо найти сумму первых 2-х, 3-х, …9 значений. Конечно, можно написать несколько формул

=СУММ(А2:А3)

,

=СУММ(А2:А4)

и т.д. Но, записав формулу ввиде:


=СУММ(СМЕЩ(A2;;;4))

получим универсальное решение, в котором требуется изменять только последний аргумент (если в формуле выше вместо 4 ввести 5, то будет подсчитана сумма первых 5-и значений). Вышеуказанная формула эквивалентна формуле

=СУММ(A2:ИНДЕКС(A2:A10;4))

, которая, в свою очередь, эквивалентна формуле

=СУММ(A2:A5)

Формула

ИНДЕКС(A2:A10;4)

возвращает ссылку на ячейку

А5

.

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Excel для Mac 2011 Excel Starter 2010 Еще…Меньше

В этой статье описаны синтаксис формулы и использование функции СМЕЩ в Microsoft Excel.

Описание

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

Синтаксис

СМЕЩ(ссылка;смещ_по_строкам;смещ_по_столбцам;[высота];[ширина])

Аргументы функции СМЕЩ описаны ниже.

  • Ссылка    — обязательный аргумент. Ссылка, от которой вычисляется смещение. Аргумент «ссылка» должен быть ссылкой на ячейку или на диапазон смежных ячеек, в противном случае функция СМЕЩ возвращает значение ошибки #ЗНАЧ!.

  • Смещ_по_строкам    Обязательный. Количество строк, которые требуется отсчитать вверх или вниз, чтобы левая верхняя ячейка результата ссылалась на нужную ячейку. Например, если в качестве значения аргумента «смещ_по_строкам» задано число 5, это означает, что левая верхняя ячейка возвращаемой ссылки должна быть на пять строк ниже, чем указано в аргументе «ссылка». Значение аргумента «смещ_по_строкам» может быть как положительным (для ячеек ниже начальной ссылки), так и отрицательным (выше начальной ссылки).

  • Смещ_по_столбцам    Обязательный. Количество столбцов, которые требуется отсчитать влево или вправо, чтобы левая верхняя ячейка результата ссылалась на нужную ячейку. Например, если в качестве значения аргумента «смещ_по_столбцам» задано число 5, это означает, что левая верхняя ячейка возвращаемой ссылки должна быть на пять столбцов правее, чем указано в аргументе «ссылка». Значение «смещ_по_столбцам» может быть как положительным (для ячеек справа от начальной ссылки), так и отрицательным (слева от начальной ссылки).

  • Высота    Необязательный. Высота (число строк) возвращаемой ссылки. Значение аргумента «высота» должно быть положительным числом.

  • Ширина    Необязательный. Ширина (число столбцов) возвращаемой ссылки. Значение аргумента «ширина» должно быть положительным числом.

Примечания

  • Если аргументы «смещ_по_строкам» и «смещ_по_столбцам» выводят ссылку за границы рабочего листа, функция СМЕЩ возвращает значение ошибки #ССЫЛ!.

  • Если высота или ширина опущена, то предполагается, что используется та же высота или ширина, что и в аргументе «ссылка».

  • Функция СМЕЩ фактически не передвигает никаких ячеек и не меняет выделения; она только возвращает ссылку. Функция СМЕЩ может использоваться с любой функцией, в которой ожидается аргумент типа «ссылка». Например, с помощью формулы СУММ(СМЕЩ(C2;1;2;3;1)) вычисляется суммарное значение диапазона, состоящего из трех строк и одного столбца и расположенного одной строкой ниже и двумя столбцами правее ячейки C2.

Пример

Скопируйте образец данных из следующей таблицы и вставьте их в ячейку A1 нового листа Excel. Чтобы отобразить результаты формул, выделите их и нажмите клавишу F2, а затем — клавишу ВВОД. При необходимости измените ширину столбцов, чтобы видеть все данные.

Формула

Описание

Результат

=СМЕЩ(D3;3;-2;1;1)

Отображает значение ячейки B6 (4)

4

=СУММ(СМЕЩ(D3:F5;3;-2;3;3))

Суммирует диапазон B6:D8.

34

=СМЕЩ(D3;-3;-3)

Возвращает ошибку, так как ссылка указывает на несуществующий диапазон листа.

#ССЫЛ!

Данные

Данные

4

10

8

3

3

6

Нужна дополнительная помощь?

Понравилась статья? Поделить с друзьями:
  • Суммировать ячейки vba excel
  • Суммквразн в excel примеры
  • Суммирование с шагом в excel
  • Суммировать столбец в excel с условием если
  • Суммкв в excel что это