Menu

СМЕЩ в Excel (эксель): динамические диапазоны и итоги

=СМЕЩ(A1;3;2) возвращает ячейку на 3 строки ниже и 2 столбца правее A1. С указанной высотой она возвращает целый диапазон, и так считают итог последних N строк или скользящее среднее.

Каждая таблица на этой странице живая: измените число или формулу, и она пересчитается.

=СМЕЩ(A1;3;2) (по-английски OFFSET) возвращает ячейку на 3 строки ниже и 2 столбца правее A1, то есть C4. Если указать ещё высоту и ширину, она вернёт целый диапазон, и именно для этого СМЕЩ чаще всего и используют: итоги и средние по диапазону, который сдвигается или растёт. Таблицы на этой странице показывают английскую запись, но формулы в них можно вводить и по-русски, с точкой с запятой.

Сдвиг от A1
G2
ABCDEFG
1ProductCategoryPriceRowsColsResult
2AppleFruit$1.2032$0.80
3PearFruit$1.50
4CarrotVegetable$0.80
5BreadBakery$2.40
6MilkDairy$1.10
Нажмите на ячейку, чтобы увидеть её формулу. Измените число или формулу, и таблица пересчитается.В русском Excel: =СМЕЩ(A1;E2;F2)

3 строки вниз и 2 вправо от A1 приводят в C4, к цене Carrot, $0.80. Поставьте в Cols 0, чтобы получить название Carrot, или в Rows 5, чтобы попасть в строку Milk. Строки и столбцы могут быть отрицательными, тогда сдвиг идёт вверх или назад, а выход за верхний или боковой край листа даёт #ССЫЛКА! (по-английски #REF!; таблицы на этой странице показывают ошибки под английскими именами).

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

=OFFSET(reference, rows, cols, [height], [width])
  • reference (ссылка): начальная ячейка (или диапазон).
  • rows, cols (смещ_по_строкам, смещ_по_столбцам): на сколько сдвинуться. 0 означает остаться на месте.
  • height, width (высота, ширина): размер возвращаемого диапазона, отсчитанный от ячейки, куда пришёл сдвиг. Если их пропустить, размер будет как у reference.

Сама по себе в ячейке СМЕЩ, которая возвращает несколько ячеек, в Excel 365 выводит их как динамический массив; старые версии обычно показывают #ЗНАЧ! (#VALUE!). Внутри СУММ, СРЗНАЧ, СЧЁТ или МАКС она работает как диапазон.

Сумма последних N строк

Классическая задача для СМЕЩ: итог, который всегда охватывает самые свежие строки, сколько бы их ни добавили. СЧЁТ находит, сколько всего значений, СМЕЩ спускается к первому из последних N, а высота берёт N строк.

Итог последних N месяцев
F2
ABCDEF
1MonthSalesLast NTotal
2Jan4,200314,900
3Feb3,900
4Mar4,800
5Apr5,100
6May4,600
7Jun5,300
8Jul5,000
Нажмите на ячейку, чтобы увидеть её формулу. Измените число или формулу, и таблица пересчитается.В русском Excel: =СУММ(СМЕЩ(B1;СЧЁТ(B2:B13)-E2+1;0;E2;1))

Значений 7, поэтому СМЕЩ начинает на 7-3+1, то есть на 5 строк ниже B1, в B6, и берёт 3 строки: May…Jul, 14,900. В русском Excel формула пишется =СУММ(СМЕЩ(B1;СЧЁТ(B2:B13)-E2+1;0;E2;1)). Введите 4900 в B9 (август), и итог сдвинется на Jun, Jul и август, потому что СЧЁТ теперь находит 8. Диапазон B2:B13 оставляет место для остальных месяцев года. В столбце не должно быть пустых ячеек посередине, иначе СЧЁТ недосчитает и окно встанет не туда.

Скользящее среднее

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

Скользящее среднее за три месяца
C4
ABC
1MonthSales3-month average
2Jan4,200
3Feb3,900
4Mar4,8004,300
5Apr5,1004,600
6May4,6004,833
7Jun5,3005,000
8Jul5,0004,967
Нажмите на ячейку, чтобы увидеть её формулу. Измените число или формулу, и таблица пересчитается.В русском Excel: =СРЗНАЧ(СМЕЩ(B4;-2;0;3;1))

C4 усредняет B2:B4 (Jan…Mar), 4,300. Каждая следующая строка сдвигает окно на одну вниз. Замените 3 на 6, а -2 на -5, чтобы получить среднее за шесть месяцев (тогда начинайте формулу со строки 7). Именно этому случаю СМЕЩ вообще не нужна: =СРЗНАЧ(B2:B4), протянутая вниз от C4, делает то же самое, потому что относительные ссылки и так сдвигаются. СМЕЩ оправдывает себя, когда размер окна берётся из ячейки.

Почему ИНДЕКС часто лучше

СМЕЩ летучая: Excel пересчитывает каждую СМЕЩ после любой правки в любом месте книги, потому что не может заранее знать, на какие ячейки она укажет. Лист с тысячами таких формул начинает тормозить. ИНДЕКС тоже возвращает ссылку, и диапазон вида начало:ИНДЕКС(...) растёт так же, но без летучести:

=SUM(OFFSET(B2, 0, 0, E2, 1))        first E2 rows, volatile
=SUM(B2:INDEX(B2:B13, E2))           same rows, not volatile

Обе формулы читают первые E2 строк столбца. В русском Excel: =СУММ(СМЕЩ(B2;0;0;E2;1)) и =СУММ(B2:ИНДЕКС(B2:B13;E2)). Кроме того, СМЕЩ сложнее проверять: «Влияющие ячейки» и цветные рамки, которые Excel рисует при редактировании формулы, показывают начальную ячейку и аргументы, а не диапазон, который СМЕЩ в итоге возвращает. Используйте СМЕЩ для быстрой модели или диапазона диаграммы; в больших книгах предпочитайте ИНДЕКС. Подробнее о возврате диапазонов на странице ИНДЕКС, а ДВССЫЛ это вторая летучая функция для ссылок.

Практика: итог первых N месяцев

Продажи по месяцам
F2
ABCDEF
1MonthSalesFirst NTotal
2Jan4,2004
3Feb3,900
4Mar4,800
5Apr5,100
6May4,600
7Jun5,300
8Jul5,000
Нажмите на ячейку, чтобы увидеть её формулу. Измените число или формулу, и таблица пересчитается.

Ваша очередь: В F2 с помощью СМЕЩ внутри СУММ посчитайте итог первых N месяцев, где N стоит в E2.

Часто задаваемые вопросы

Что делает СМЕЩ в Excel?

Возвращает ссылку, которая отстоит от начальной ячейки на заданное число строк и столбцов, при желании с другим размером. =СМЕЩ(A1;3;2) это ячейка на 3 строки ниже и 2 столбца правее A1, то есть C4.

Как посчитать сумму последних N строк в Excel?

Начните с заголовка и спуститесь к первому из последних N значений: =СУММ(СМЕЩ(B1;СЧЁТ(B2:B100)-N+1;0;N;1)). СЧЁТ находит, сколько всего значений, а высота N берёт столько строк. Это работает, только если в столбце нет пропусков.

Почему СМЕЩ летучая?

Excel пересчитывает каждую СМЕЩ после любого изменения в книге, потому что ячейки, на которые она указывает, известны только после её выполнения. В больших книгах это замедляет работу. Диапазон, построенный с ИНДЕКС, например B2:ИНДЕКС(B2:B100;N), делает то же без летучести.

Какие аргументы у СМЕЩ?

СМЕЩ(ссылка; смещ_по_строкам; смещ_по_столбцам; [высота]; [ширина]): начальная ячейка, на сколько строк вниз (отрицательное число вверх), на сколько столбцов вправо (отрицательное назад) и, по желанию, размер возвращаемого диапазона.

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ