К содержанию

Модуль 4 · Урок 4.3

Расчёт по соседним ячейкам

Накопления, соседние пары, номер строки, таблица из уже вычисленных ячеек и её края.

9 задач

Расходы по дням нужно превратить в «сколько потрачено к этому дню»: итог каждого дня — итог предыдущего плюс новый расход. Формула здесь берёт не только исходные данные. Формула может опираться на уже вычисленные ячейки — соседние или далёкие; так таблица строит новый результат из предыдущего.

Разберём накопленную сумму, соседние пары, сетку путей и порядок пересчёта.

Накопленная сумма

Накопленная сумма: каждая следующая ячейка — предыдущий результат плюс новый элемент. Если A2:A10 — ежедневные расходы, в B2 можно записать =A2, а в B3 — =B2+A3. После заполнения вниз B содержит накопленные расходы.

Другой вариант: =СУММ($A$2:A2) с заполнением вниз. Начало диапазона закреплено, конец расширяется. Закреплённая и незакреплённая части одного диапазона здесь играют разные роли.

B4=B3+A4
ABC
1РасходНакопленоТо же через СУММ
2120120120
380200200
4150350350
540390390
6210600600
Формулы в ячейках
  • B2=A2
  • B3скопирована до B6=B2+A3
  • C2скопирована до C6=СУММ($A$2:A2)

Выбери B4: рамки стоят на B3 — уже вычисленной ячейке — и на A4. А у C4 рамка охватывает A2:A4: закреплённое начало и сдвинувшийся конец. Поменяй расход во второй строке — пересчитается всё ниже.

Соседние пары

Формула для пары соседей берёт свою строку и следующую, поэтому её заполняют на одну строку меньше. Если в A2:A100 записана последовательность из 99 чисел, соседних пар 98: первая A2 и A3, последняя A99 и A100. Формулу для пары заполняют до строки 99, а не до 100 — иначе появится лишняя пара с пустой ячейкой за концом данных.

Для условия «хотя бы одно число пары делится на 3» в B2 можно написать =ЕСЛИ(ИЛИ(ОСТАТ(A2;3)=0;ОСТАТ(A3;3)=0);1;0), рядом — сумма пары =A2+A3. Пары перекрываются: каждое число, кроме крайних, входит в две.

Шесть чисел — пять пар. Формула пары стоит в строке её первого числа; выделены пары, где есть кратное 3.
B3=ЕСЛИ(ИЛИ(ОСТАТ(A3;3)=0;ОСТАТ(A4;3)=0);1;0)
ABCD
1ЧислоПара: есть кратное 3Сумма парыНомер строки пары
2409
351143
491164
57015
681206
712
8
9Итого3Первая подходящая строка3
Формулы в ячейках
  • B2скопирована до B6=ЕСЛИ(ИЛИ(ОСТАТ(A2;3)=0;ОСТАТ(A3;3)=0);1;0)
  • B9=СУММ(B2:B6)
  • C2скопирована до C6=A2+A3
  • D2скопирована до D6=ЕСЛИ(B2=1;СТРОКА();"")
  • D9=МИН(D2:D6)

Шесть чисел — пять пар, формулы стоят в строках 2–6, а строка 7 только участвует как вторая половина последней пары.

Номер строки, где стоит формула, даёт функция СТРОКА() без аргументов. Её удобно возвращать вместо 1 в признаке: тогда МИН находит первую подходящую строку, МАКС — последнюю. Пустой текст "" в неподходящих строках функции МИН и МАКС пропускают. Это ответ на вопрос «в какой строке», который количество подходящих строк не даёт.

Таблица из таблицы

Таблица из таблицы: внутренняя ячейка считается из уже вычисленных соседей слева и сверху, а крайние — отдельными формулами. Сколькими способами можно пройти из верхней левой клетки сетки в каждую другую, если шагать только вправо и вниз? В клетку можно прийти только слева или сверху, поэтому число способов — сумма способов для этих двух соседей. В верхней строке и левом столбце сосед один, туда ведёт ровно один путь.

  1. A1 — старт: в неё ведёт один путь — стоять на месте.
  2. Первая строка и первый столбец: туда можно прийти только по прямой — по одному пути.
  3. B2: прийти можно слева или сверху, поэтому путей 1 + 1 = 2.
  4. C2: прийти можно слева или сверху, поэтому путей 2 + 1 = 3.
  5. D2: прийти можно слева или сверху, поэтому путей 3 + 1 = 4.
  6. B3: прийти можно слева или сверху, поэтому путей 1 + 2 = 3.
  7. C3: прийти можно слева или сверху, поэтому путей 3 + 3 = 6.
  8. D3: прийти можно слева или сверху, поэтому путей 6 + 4 = 10.
  9. B4: прийти можно слева или сверху, поэтому путей 1 + 3 = 4.
  10. C4: прийти можно слева или сверху, поэтому путей 4 + 6 = 10.
  11. D4: прийти можно слева или сверху, поэтому путей 10 + 10 = 20.
  12. Сетка заполнена: в D4 ведут 20 путей. Каждая клетка посчитана из уже готовых соседей.
C3=B3+C2
ABCD
11111
21234
313610
4141020
Формулы в ячейках
  • A2скопирована до A4=A1
  • B1скопирована до D1=A1
  • B2скопирована до D4=A2+B1

Внутренняя формула написана один раз — =A2+B1 в B2 — и скопирована на прямоугольник B2:D4. Ссылки относительные, поэтому в каждой клетке они указывают на её соседа слева и соседа сверху. Выбери C3: рамки на B3 и C2. Крайние клетки нельзя считать той же формулой — у них нет соседа слева или сверху; для них отдельные формулы в первой строке и первом столбце.

Тот же приём — новая таблица того же размера, где клетка вычисляется из соседних уже вычисленных клеток, — решает задачи о лучшем маршруте по полю: меняется только то, что в клетке хранится и как объединяются соседи. Эти задачи разбирает тема 18.

Порядок пересчёта

Ссылка может вести в любую строку; Excel сам считает ячейки в порядке зависимостей. Формулу не обязательно вычислять сверху вниз: ячейка может ссылаться на строку ниже, если там лежит нужное значение. Excel пересчитывает ячейки так, чтобы каждая вычислялась после тех, на которые она ссылается.

C2=D4
ABCD
1ЭтапДлительностьНачалоОкончание
2Покраска257
3Подготовка101
4Шпаклёвка415
Формулы в ячейках
  • C2=D4
  • C4=D3
  • D2=C2+B2
  • D3=C3+B3
  • D4=C4+B4

Покраска стоит первой строкой, но начинается после шпаклёвки из строки 4. Поменяй длительность подготовки — сдвинутся и шпаклёвка, и покраска. Если же формулы образуют круг (C2 зависит от D4, а D4 — от C2), Excel сообщит о циклической ссылке: такой расчёт не имеет начала.

Перебор вариантов

Перебор вариантов — строки таблицы: каждый набор значений в своей строке, формула проверяет его. При двух логических переменных есть четыре набора 0/1: 00, 01, 10, 11. Их можно занести в строки и вычислить выражение по каждому набору. При n переменных наборов 2^n, потому что каждая переменная имеет два независимых варианта.

C3=ЕСЛИ(ИЛИ(A3=1;B3=0);1;0)
ABC
1aba ИЛИ НЕ b
2001
3010
4101
5111
Формулы в ячейках
  • C2скопирована до C5=ЕСЛИ(ИЛИ(A2=1;B2=0);1;0)

Такой перебор помогает проверять логические идеи, но количество строк быстро растёт. Аналогично можно перечислять кандидаты на параметр и вычислять признак пригодности. Конечный перебор требует обоснованных границ: проверка первых тысячи чисел не доказывает утверждение обо всех натуральных числах.

Итог

Таблица удобна, когда каждая ячейка зависит от немногих соседей, а промежуточные результаты полезно видеть. Длинный перебор, большие числа и сложные структуры проще решать программой — об этом курс Python. Вот что понадобится дальше.

  • Накопление=B2+A3 вниз или =СУММ($A$2:A2) с закреплённым началом.
  • Парыn чисел — n − 1 пар; формулу пары заполняют на строку меньше.
  • СТРОКА()Номер строки формулы; с МИН и МАКС — первая и последняя подходящие.
  • СеткаВнутренняя клетка — из готовых соседей, крайние — своими формулами.
  • ПересчётExcel идёт по зависимостям; круговая ссылка — ошибка.

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1

В A2:A51 — 50 чисел. Сколько соседних пар и до какой строки заполнять формулу пары из B2?

ОтветСкрыть ответ
Ответ

49 пар; последняя — A50 и A51, поэтому формулу заполняют до B50.

Вопрос 2

В сетке путей в клетку слева ведут 4 пути, в клетку сверху — 6. Сколько путей ведёт в эту клетку?

ОтветСкрыть ответ
Ответ

10: каждый путь приходит либо слева, либо сверху, 4 + 6.

Вопрос 3

В B2 записано =СУММ($A$2:A2) и скопировано вниз. Какая формула окажется в B7?

ОтветСкрыть ответ
Ответ

=СУММ($A$2:A7).

Вопрос 4

В C2 записано =D4, а в D4 — =C2+1. Что сообщит Excel?

ОтветСкрыть ответ
Ответ

Циклическую ссылку: каждая ячейка ждёт другую, и расчёту не с чего начаться.

Вопрос 5

Почему в сетке путей нельзя скопировать внутреннюю формулу =A2+B1 и в первую строку?

ОтветСкрыть ответ
Ответ

У клеток первой строки нет соседа сверху: формула сослалась бы на строку выше сетки — на пустую ячейку или за край листа.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Сколько пар

В A2:A101 записано 100 чисел. Сколько соседних пар?

Введите число.

До какой строки формула пары

Те же 100 чисел в A2:A101, формула пары начинается в B2. До какой ячейки её заполнять?

Введите адрес ячейки латинскими буквами.

Сделай сам: накопленный итог

Введите число.

Пары с кратным 3

Для последовательности 4, 8, 6, 5, 7 посчитай соседние пары, в которых хотя бы одно число кратно 3.

Введите число.

Первая подходящая строка

В столбце D для подходящих строк стоит =СТРОКА(), для остальных "". Подходят строки 4, 9 и 15. Что вернёт =МИН(D2:D20)?

Введите число.

Последняя подходящая строка

В том же столбце что вернёт =МАКС(D2:D20)?

Введите число.

Пути в C2

Сколько путей «только вправо и вниз» ведёт из A1 в C2?

Введите число.

Пути в D3

Сколько путей «только вправо и вниз» ведёт из A1 в D3?

Введите число.

Наборы трёх переменных

Сколько строк нужно, чтобы перебрать все наборы трёх логических переменных?

Введите число.