Excel for Microsoft 365 Excel for Microsoft 365 for Mac Excel for the web Excel 2021 Excel 2021 for Mac Excel 2019 Excel 2019 for Mac Excel 2016 Excel 2016 for Mac Excel 2013 Excel 2010 Excel 2007 Excel for Mac 2011 Excel Starter 2010 More…Less
This article describes the formula syntax and usage of the OFFSET function in Microsoft Excel.
Description
Returns a reference to a range that is a specified number of rows and columns from a cell or range of cells. The reference that is returned can be a single cell or a range of cells. You can specify the number of rows and the number of columns to be returned.
Syntax
OFFSET(reference, rows, cols, [height], [width])
The OFFSET function syntax has the following arguments:
-
Reference Required. The reference from which you want to base the offset. Reference must refer to a cell or range of adjacent cells; otherwise, OFFSET returns the #VALUE! error value.
-
Rows Required. The number of rows, up or down, that you want the upper-left cell to refer to. Using 5 as the rows argument specifies that the upper-left cell in the reference is five rows below reference. Rows can be positive (which means below the starting reference) or negative (which means above the starting reference).
-
Cols Required. The number of columns, to the left or right, that you want the upper-left cell of the result to refer to. Using 5 as the cols argument specifies that the upper-left cell in the reference is five columns to the right of reference. Cols can be positive (which means to the right of the starting reference) or negative (which means to the left of the starting reference).
-
Height Optional. The height, in number of rows, that you want the returned reference to be. Height must be a positive number.
-
Width Optional. The width, in number of columns, that you want the returned reference to be. Width must be a positive number.
Remarks
-
If rows and cols offset reference over the edge of the worksheet, OFFSET returns the #REF! error value.
-
If height or width is omitted, it is assumed to be the same height or width as reference.
-
OFFSET doesn’t actually move any cells or change the selection; it just returns a reference. OFFSET can be used with any function expecting a reference argument. For example, the formula SUM(OFFSET(C2,1,2,3,1)) calculates the total value of a 3-row by 1-column range that is 1 row below and 2 columns to the right of cell C2.
Example
Copy the example data in the following table, and paste it in cell A1 of a new Excel worksheet. For formulas to show results, select them, press F2, and then press Enter. If you need to, you can adjust the column widths to see all the data.
Formula |
Description |
Result |
---|---|---|
=OFFSET(D3,3,-2,1,1) |
Displays the value in cell B6 (4) |
4 |
=SUM(OFFSET(D3:F5,3,-2, 3, 3)) |
Sums the range B6:D8 |
34 |
=OFFSET(D3, -3, -3) |
Returns an error, because the reference is to a non-existent range on the worksheet. |
#REF! |
Data |
Data |
|
4 |
10 |
|
8 |
3 |
|
3 |
6 |
Need more help?
Want more options?
Explore subscription benefits, browse training courses, learn how to secure your device, and more.
Communities help you ask and answer questions, give feedback, and hear from experts with rich knowledge.
Функция СМЕЩ в Excel используется, когда вы хотите получить ссылку, которая смещается на указанное число строк и столбцов от начального положения.
Содержание
- Что возвращает функция
- Синтаксис
- Аргументы функции
- Основной принцип работы функции
- Примеры использования функции СМЕЩ в Excel
- Пример 1. Ищем последнюю заполненную ячейку в колонке
- Пример 2. Создаем динамический выпадающий список с автоматическим дополнением новых данных
- Дополнительная информация
- Альтернативы функции OFFSET (СМЕЩ) в Excel
Что возвращает функция
Возвращает ссылку, которая смещается на заданное количество ячеек.
Синтаксис
=OFFSET(reference, rows, cols, [height], [width]) — английская версия
=СМЕЩ(ссылка;смещ_по_строкам;смещ_по_столбцам;[высота];[ширина]) — русская версия
Аргументы функции
- reference (ссылка) — ссылка на ячейку, от которой вы хотите сделать смещение. Это может быть ссылка на ячейку или диапазон смежных ячеек;
- rows (смещ_по_строкам) — количество строк для смещения от изначальной позиции. Если вы укажете положительное число, то произойдет смещение строк ниже, если отрицательное — выше;
- cols (смещ_по_столбцам) — количество колонок для смещения от изначальной позиции. Если вы укажете положительное число, то произойдет смещение колонок вправо, если отрицательное число, то влево;
- [height] ([высота]) — количество строк в указанном диапазоне функции;
- [width] ([ширина]) — количество колонок в указанном диапазоне функции.
Основной принцип работы функции
Функция СМЕЩ, пожалуй, самая запутанная функция в Excel.
Давайте разберем ее работу на простом примере игры в шахматы. В шахматах есть фигура Ладья.
Источник фото: Wikipedia
По правилам игры в шахматы, Ладья может ходить только вправо, влево, вниз и вверх. Фигура не может передвигаться по диагонали.
Теперь давайте представим, что нашей Ладье нужно переместиться не строго влево или вправо, а на ячейку, находящуюся по диагонали от изначальной позиции. Что мы будем делать этом случае?
Правильно, мы будем использовать несколько шагов, для того чтобы привести Ладью к цели. Тот же принцип действует и в функции OFFSET (СМЕЩ).
Рассмотрим перемещение Ладьи на примере в Excel. Мы хотим начать с ячейки D5 (где находится ладья), а затем перейти на две строки вниз и два столбца вправо и извлечь значение из ячейки. Для этого будем использовать формулу:
=OFFSET(стартовая позиция, на сколько строк сместиться вниз, на сколько столбцов сместиться вправо) — английская версия
=СМЕЩ(стартовая позиция, на сколько строк сместиться вниз, на сколько столбцов сместиться вправо) — русская версия
Как вы видите формула по нашему примеру выглядит так:
=OFFSET(D5,2,2) — английская версия
=СМЕЩ(D5;2;2) — русская версия
Функции задан аргумент старта отсчета с ячейки «D5», затем смещение на две строки вниз, после этого на две колонки вправо. Так мы переместимся с ячейки «D5» на ячейку «F7». По завершении перемещения функция выдает значение ячейки «F7».
На примере выше мы рассмотрели функцию OFFSET (СМЕЩ) с тремя аргументами. Но есть еще два необязательных аргумента, которые можно использовать.
Давайте рассмотрим простой пример:
Больше лайфхаков в нашем Telegram Подписаться
Предположим, вы хотите использовать ссылку на ячейку «A1» (желтую), и хотите сослаться на весь диапазон, выделенный синим (C2:E4) в формуле.
Как бы вы это сделали с помощью клавиатуры? Сначала нужно перейти к ячейке C2, а затем выбрать все ячейки в диапазоне «C2:E4».
Теперь посмотрим, как это сделать, используя формулу OFFSET (СМЕЩ):
=OFFSET(A1,1,2,3,3) — английская версия
=СМЕЩ(A1;1;2;3;3) — русская версия
Если вы используете эту формулу в ячейке, она вернет #VALUE! Но если вы перейдете в режим редактирования, выберете формулу и нажмите клавишу «F9», вы увидите, что она возвращает все значения, выделенные синим цветом.
Надеюсь, теперь у вас есть базовое понимание использования функции OFFSET (СМЕЩ) в Excel.
Примеры использования функции СМЕЩ в Excel
Пример 1. Ищем последнюю заполненную ячейку в колонке
Представим, что у вас есть данные в колонке. Для того чтобы отобразить последнее значение в колонке используйте формулу:
=OFFSET(A1,COUNT(A:A)-1,0) — английская версия
=СМЕЩ(A1;СЧЁТ(A:A)-1;0) — русская версия
Эта формула предполагает, что кроме указанных значений нет никаких других, и в этой колонке нет пустых ячеек. Функция работает, подсчитывая общее количество заполненных ячеек и соответствующим образом смещает ячейку «A1».
Например, в указанном примере есть 8 значений, поэтому функция COUNT(A:A) или СЧЁТ(A:A) возвращает 8. Мы смещаем ячейку «A1» на 7, чтобы получить последнее значение.
Пример 2. Создаем динамический выпадающий список с автоматическим дополнением новых данных
Вы можете использовать принцип из Примера 1 для создания динамического выпадающего списка с автоматическим дополнением новых данных. Например, вы создали выпадающий список и хотите, чтобы при добавлении новых строк, значения автоматически подгружались в выпадающий список.
Обратите внимание, что на примере выше, значения автоматически появляются и исчезают из выпадающего списка, как только вы вносите изменения в диапазон ячеек, указанный для выпадающего списка.
Это происходит, поскольку формула, которая используется для создания раскрывающегося списка, является динамической и определяет любое добавление или удаление и соответствующим образом корректирует диапазон.
Как сделать такой список:
- Выберите ячейку, в которой вы хотите создать выпадающий список;
- Нажмите на вкладку Data => Data Tools => Data Validation;
- В диалоговом окне Data Validation, в разделе Настройки выберите List из выпадающего списка;
- В параметрах Source укажите формулу =OFFSET(A1,0,0,COUNT(A:A),1) или =СМЕЩ(A1;0;0;СЧЁТ(A:A);1)
- Нажмите ОК
Как эта формула работает:
Первые три аргумента функции OFFSET (СМЕЩ) A1, 0, 0. Это означает что начальное значение в ячейке «A1», которое не смещается ни по строкам и по колонкам (0, 0);
Четвертый аргумент функции указывает на высоту, и здесь функция COUNT (СЧЁТ) возвращает суммарное количество ячеек в диапазоне данных для выпадающего списка. Главное условие — отсутствие пустых ячеек в диапазоне.
Пятый аргумент функции “1”, обозначает ширину диапазона данных, которая в нашем случае равна одной колонке.
Дополнительная информация
- Функция OFFSET (СМЕЩ) — волатильная функция. Она пересчитывается каждый раз, как только вы открываете Excel файл. Работа этой функции может сильно сказываться на скорости работы всего файла.
- Если значения высоты и ширины не указаны, функция учитывает только первые три аргумента;
- Если значения аргументов rows (смещ_по_строкам) и cols (смещ_по_столбцам) отрицательны, то смещение будет происходить в обратную сторону.
Альтернативы функции OFFSET (СМЕЩ) в Excel
Ввиду некоторых ограничений функции, многие из вас рассматривают альтернативные методы:
- Функция INDEX (ИНДЕКС) также может использоваться для возврата ссылки на ячейку.
- Excel таблицы: если вы используете структурированные ссылки в таблице Excel, вам не нужно беспокоиться о добавлении новых данных и необходимости корректировки формул.
Функция
СМЕЩ(
)
, английский вариант 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 небольшой транспортный калькулятор для расчета расстояния проезда от одной заданной станции до другой:
В выпадающих списках в желтых ячейках F3 и F5 пользователь выбирает станции отправления и назначения, а в зеленой ячейке F7 должна подсчитываться сумма всех ячеек в заданном «окне» на листе. Для проезда от Останкино до Ховрино, как на рисунке, например, нужно будет просуммировать все ячейки в обведенном зеленым пунктиром диапазоне.
Как считать суммму — понятно, а вот как определить диапазон ячеек, которые нужно просуммировать? Ведь при выборе станций он будет постоянно трансформироваться?
В подобной ситуации может помочь функция СМЕЩ (OFFSET), способная выдать ссылку на «плавающее окно» — диапазон заданного размера, расположенный в определенном месте листа. Синтаксис у функции следующий:
=СМЕЩ(Точка_отсчета; Сдвиг_вниз; Свиг_вправо; Высота; Ширина)
Эта функция на выходе дает ссылку на диапазон, сдвинутый относительно некоей стартовой ячейки (Точка_отсчета) на определенное количество строк вниз и столбцов вправо. Причем размер диапазона («окна») тоже может задаваться параметрами Высота и Ширина.
В нашем случае, если взять за точку отсчета ячейку А1, то:
- Точка отсчета = А1
- Сдвиг_вниз = 4
- Свиг_вправо = 2
- Высота = 4
- Ширина = 1
Чтобы рассчитать необходимые для СМЕЩ аргументы, давайте сначала применим функцию ПОИСКПОЗ (MATCH), которую мы уже разбирали, для вычисления позиций станций отправления и назначения:
И, наконец, используем функцию СМЕЩ, чтобы получить ссылку на нужное «окно» на листе и просуммировать все ячейки из него:
Вот и все, задача решена
P.S.
В отличие от большинства остальных функций Excel, СМЕЩ является волатильной (volatile) или, как еще говорят, «летучей» функцией. Обычные функции пересчитываются только в том случае, если меняются ячейки с их аргументами. Волатильные же пересчитываются каждый раз при изменении любой ячейки. Само-собой, это отрицательно сказывается на быстродействии. В больших тяжелых таблицах разница по скорости работы книги может быть очень ощутимой (в разы). Для некоторых случаев быстрее оказывается заменить медленную СМЕЩ на неволатильную ИНДЕКС или другие аналоги.
Ссылки по теме
- Поиск позиции заданного элемента в списке функцией ПОИСКПОЗ (MATCH)
- 4 способа создать выпадающий список в ячейке листа Excel
- 5 вариантов применения функции ИНДЕКС
The Excel OFFSET function returns a dynamic range constructed with five inputs: (1) a starting point, (2) a row offset, (3) a column offset, (4) a height in rows, (5) a width in columns.
OFFSET is a volatile function, and can cause performance issues in large or complex worksheets.
The starting point (the reference argument) can be one cell or a range of cells. The rows and cols arguments are the number of cells to «offset» from the starting point. The height and width arguments are optional and determine the size of the range that is created. When height and width are omitted, they default to the height and width of reference.
For example, to reference C5 starting at A1, reference is A1, rows is 4 and cols is 2:
=OFFSET(A1,4,2) // returns reference to C5
To reference C1:C5 from A1, reference is A1, rows is 0, cols is 2, height is 5, and width is 1:
=OFFSET(A1,0,2,5,1) // returns reference to C1:C5
Note: width could be omitted, since it will default to 1.
It is common to see OFFSET wrapped in another function that expects a range. For example, to SUM C1:C5, beginning at A1:
=SUM(OFFSET(A1,0,2,5,1)) // SUM C1:C5
The main purpose of OFFSET is to allow formulas to dynamically adjust to available data or to user input. The OFFSET function can be used to build a dynamic named range for charts or pivot tables, to ensure that source data is always up to date.
Note: Excel documentation states height and width can’t be negative, but negative values appear to have worked fine since the early 1990’s. The OFFSET function in Google Sheets won’t allow a negative value for height or width arguments.
Examples
The examples below show how OFFSET can be configured to return different kinds of ranges. These screens were taken with Excel 365, so OFFSET returns a dynamic array when the result is more than one cell. In older versions of Excel, you can use the F9 key to check results returned from OFFSET.
Example #1
In the screen below, we use OFFSET to return the third value (March) in the second column (West). The formula in H4 is:
=OFFSET(B3,3,2) // returns D6
Example #2
In the screen below, we use OFFSET to return the last value (June) in the third column (North). The formula in H4 is:
=OFFSET(B3,6,3) // returns E9
Example #3
Below, we use OFFSET to return all values in the third column (North). The formula in H4 is:
=OFFSET(B3,1,3,6) // returns E4:E9
Example #4
Below, we use OFFSET to return all values for May (fifth row). The formula in H4 is:
=OFFSET(B3,5,1,1,4) // returns C8:F8
Example #5
Below, we use OFFSET to return April, May, and June values for the West region. The formula in H4 is:
=OFFSET(B3,4,2,3,1) // returns D7:D9
Example #6
Below, we use OFFSET to return April, May, and June values for West and North. The formula in H4 is:
=OFFSET(B3,4,2,3,2) // returns D7:E9
Notes
- OFFSET only returns a reference, no cells are moved.
- Both rows and cols can be supplied as negative numbers to reverse their normal offset direction — negative cols offset to the left, and negative rows offset above.
- OFFSET is a «volatile function». Volatile functions can make larger and more complex workbooks run slowly.
- OFFSET will display the #REF! error value if the offset is outside the edge of the worksheet.
- When height or width is omitted, the height and width of reference is used.
- OFFSET can be used with any other function that expects to receive a reference.
- Excel documentation says height and width can’t be negative, but negative values do work.