Модуль 4 · Урок 4.3
Расчёт по соседним ячейкам
Накопления, соседние пары, номер строки, таблица из уже вычисленных ячеек и её края.
Расходы по дням нужно превратить в «сколько потрачено к этому дню»: итог каждого дня — итог предыдущего плюс новый расход. Формула здесь берёт не только исходные данные. Формула может опираться на уже вычисленные ячейки — соседние или далёкие; так таблица строит новый результат из предыдущего.
Разберём накопленную сумму, соседние пары, сетку путей и порядок пересчёта.
Накопленная сумма
Накопленная сумма: каждая следующая ячейка — предыдущий результат плюс новый элемент. Если A2:A10 — ежедневные расходы, в B2 можно записать =A2, а в B3 — =B2+A3. После заполнения вниз B содержит накопленные расходы.
Другой вариант: =СУММ($A$2:A2) с заполнением вниз. Начало диапазона закреплено, конец расширяется. Закреплённая и незакреплённая части одного диапазона здесь играют разные роли.
| A | B | C | |
|---|---|---|---|
| 1 | Расход | Накоплено | То же через СУММ |
| 2 | 120 | 120 | 120 |
| 3 | 80 | 200 | 200 |
| 4 | 150 | 350 | 350 |
| 5 | 40 | 390 | 390 |
| 6 | 210 | 600 | 600 |
B2=A2B3скопирована до B6=B2+A3C2скопирована до C6=СУММ($A$2:A2)
Выбери B4: рамки стоят на B3 — уже вычисленной ячейке — и на A4. А у C4 рамка охватывает A2:A4: закреплённое начало и сдвинувшийся конец. Поменяй расход во второй строке — пересчитается всё ниже.
Соседние пары
Формула для пары соседей берёт свою строку и следующую, поэтому её заполняют на одну строку меньше. Если в A2:A100 записана последовательность из 99 чисел, соседних пар 98: первая A2 и A3, последняя A99 и A100. Формулу для пары заполняют до строки 99, а не до 100 — иначе появится лишняя пара с пустой ячейкой за концом данных.
Для условия «хотя бы одно число пары делится на 3» в B2 можно написать =ЕСЛИ(ИЛИ(ОСТАТ(A2;, рядом — сумма пары =A2+A3. Пары перекрываются: каждое число, кроме крайних, входит в две.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Число | Пара: есть кратное 3 | Сумма пары | Номер строки пары |
| 2 | 4 | 0 | 9 | |
| 3 | 5 | 1 | 14 | 3 |
| 4 | 9 | 1 | 16 | 4 |
| 5 | 7 | 0 | 15 | |
| 6 | 8 | 1 | 20 | 6 |
| 7 | 12 | |||
| 8 | ||||
| 9 | Итого | 3 | Первая подходящая строка | 3 |
B2скопирована до B6=ЕСЛИ(ИЛИ(ОСТАТ(A2;3)=0;ОСТАТ(A3; 3)=0); 1; 0) B9=СУММ(B2:B6)C2скопирована до C6=A2+A3D2скопирована до D6=ЕСЛИ(B2=1;СТРОКА();"")D9=МИН(D2:D6)
Шесть чисел — пять пар, формулы стоят в строках 2–6, а строка 7 только участвует как вторая половина последней пары.
Номер строки, где стоит формула, даёт функция СТРОКА() без аргументов. Её удобно возвращать вместо 1 в признаке: тогда МИН находит первую подходящую строку, МАКС — последнюю. Пустой текст "" в неподходящих строках функции МИН и МАКС пропускают. Это ответ на вопрос «в какой строке», который количество подходящих строк не даёт.
Таблица из таблицы
Таблица из таблицы: внутренняя ячейка считается из уже вычисленных соседей слева и сверху, а крайние — отдельными формулами. Сколькими способами можно пройти из верхней левой клетки сетки в каждую другую, если шагать только вправо и вниз? В клетку можно прийти только слева или сверху, поэтому число способов — сумма способов для этих двух соседей. В верхней строке и левом столбце сосед один, туда ведёт ровно один путь.
- A1 — старт: в неё ведёт один путь — стоять на месте.
- Первая строка и первый столбец: туда можно прийти только по прямой — по одному пути.
- B2: прийти можно слева или сверху, поэтому путей 1 + 1 = 2.
- C2: прийти можно слева или сверху, поэтому путей 2 + 1 = 3.
- D2: прийти можно слева или сверху, поэтому путей 3 + 1 = 4.
- B3: прийти можно слева или сверху, поэтому путей 1 + 2 = 3.
- C3: прийти можно слева или сверху, поэтому путей 3 + 3 = 6.
- D3: прийти можно слева или сверху, поэтому путей 6 + 4 = 10.
- B4: прийти можно слева или сверху, поэтому путей 1 + 3 = 4.
- C4: прийти можно слева или сверху, поэтому путей 4 + 6 = 10.
- D4: прийти можно слева или сверху, поэтому путей 10 + 10 = 20.
- Сетка заполнена: в D4 ведут 20 путей. Каждая клетка посчитана из уже готовых соседей.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 1 |
| 2 | 1 | 2 | 3 | 4 |
| 3 | 1 | 3 | 6 | 10 |
| 4 | 1 | 4 | 10 | 20 |
A2скопирована до A4=A1B1скопирована до D1=A1B2скопирована до D4=A2+B1
Внутренняя формула написана один раз — =A2+B1 в B2 — и скопирована на прямоугольник B2:D4. Ссылки относительные, поэтому в каждой клетке они указывают на её соседа слева и соседа сверху. Выбери C3: рамки на B3 и C2. Крайние клетки нельзя считать той же формулой — у них нет соседа слева или сверху; для них отдельные формулы в первой строке и первом столбце.
Тот же приём — новая таблица того же размера, где клетка вычисляется из соседних уже вычисленных клеток, — решает задачи о лучшем маршруте по полю: меняется только то, что в клетке хранится и как объединяются соседи. Эти задачи разбирает тема 18.
Порядок пересчёта
Ссылка может вести в любую строку; Excel сам считает ячейки в порядке зависимостей. Формулу не обязательно вычислять сверху вниз: ячейка может ссылаться на строку ниже, если там лежит нужное значение. Excel пересчитывает ячейки так, чтобы каждая вычислялась после тех, на которые она ссылается.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Этап | Длительность | Начало | Окончание |
| 2 | Покраска | 2 | 5 | 7 |
| 3 | Подготовка | 1 | 0 | 1 |
| 4 | Шпаклёвка | 4 | 1 | 5 |
C2=D4C4=D3D2=C2+B2D3=C3+B3D4=C4+B4
Покраска стоит первой строкой, но начинается после шпаклёвки из строки 4. Поменяй длительность подготовки — сдвинутся и шпаклёвка, и покраска. Если же формулы образуют круг (C2 зависит от D4, а D4 — от C2), Excel сообщит о циклической ссылке: такой расчёт не имеет начала.
Перебор вариантов
Перебор вариантов — строки таблицы: каждый набор значений в своей строке, формула проверяет его. При двух логических переменных есть четыре набора 0/1: 00, 01, 10, 11. Их можно занести в строки и вычислить выражение по каждому набору. При n переменных наборов 2^n, потому что каждая переменная имеет два независимых варианта.
| A | B | C | |
|---|---|---|---|
| 1 | a | b | a ИЛИ НЕ b |
| 2 | 0 | 0 | 1 |
| 3 | 0 | 1 | 0 |
| 4 | 1 | 0 | 1 |
| 5 | 1 | 1 | 1 |
C2скопирована до C5=ЕСЛИ(ИЛИ(A2=1;B2=0); 1; 0)
Такой перебор помогает проверять логические идеи, но количество строк быстро растёт. Аналогично можно перечислять кандидаты на параметр и вычислять признак пригодности. Конечный перебор требует обоснованных границ: проверка первых тысячи чисел не доказывает утверждение обо всех натуральных числах.
Итог
Таблица удобна, когда каждая ячейка зависит от немногих соседей, а промежуточные результаты полезно видеть. Длинный перебор, большие числа и сложные структуры проще решать программой — об этом курс Python. Вот что понадобится дальше.
- Накопление
=B2+A3вниз или=СУММ($A$2:A2)с закреплённым началом. - Парыn чисел — n − 1 пар; формулу пары заполняют на строку меньше.
- СТРОКА()Номер строки формулы; с
МИНиМАКС— первая и последняя подходящие. - СеткаВнутренняя клетка — из готовых соседей, крайние — своими формулами.
- ПересчётExcel идёт по зависимостям; круговая ссылка — ошибка.
Проверьте себя
Ответь сначала сам, потом открой ответ.
В A2:A51 — 50 чисел. Сколько соседних пар и до какой строки заполнять формулу пары из B2?
ОтветСкрыть ответ
49 пар; последняя — A50 и A51, поэтому формулу заполняют до B50.
В сетке путей в клетку слева ведут 4 пути, в клетку сверху — 6. Сколько путей ведёт в эту клетку?
ОтветСкрыть ответ
10: каждый путь приходит либо слева, либо сверху, 4 + 6.
В B2 записано =СУММ($A$2:A2) и скопировано вниз. Какая формула окажется в B7?
ОтветСкрыть ответ
=СУММ($A$2:A7).
В C2 записано =D4, а в D4 — =C2+1. Что сообщит Excel?
ОтветСкрыть ответ
Циклическую ссылку: каждая ячейка ждёт другую, и расчёту не с чего начаться.
Почему в сетке путей нельзя скопировать внутреннюю формулу =A2+B1 и в первую строку?
ОтветСкрыть ответ
У клеток первой строки нет соседа сверху: формула сослалась бы на строку выше сетки — на пустую ячейку или за край листа.
Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Сколько пар
В A2:A101 записано 100 чисел. Сколько соседних пар?
Введите число.
Подсказка
n чисел дают n − 1 пар.
Разбор
Первая пара — A2 и A3, последняя — A100 и A101: 99 пар.
Ответ: 99
До какой строки формула пары
Те же 100 чисел в A2:A101, формула пары начинается в B2. До какой ячейки её заполнять?
Введите адрес ячейки латинскими буквами.
Подсказка
Последняя пара начинается в строке 100.
Разбор
Пара A100–A101 — последняя, её формула в B100.
Ответ: B100
Сделай сам: накопленный итог
Введите число.
Подсказка
Итог дня — итог предыдущего дня плюс расход этого дня.
Разбор
50, затем 50 + 30 = 80, затем 80 + 20 = 100: =B2+A3 вниз.
Ответ: 100
Пары с кратным 3
Для последовательности 4, 8, 6, 5, 7 посчитай соседние пары, в которых хотя бы одно число кратно 3.
Введите число.
Подсказка
Выпиши пары и найди в них 6.
Разбор
Пары (8, 6) и (6, 5) содержат 6; в (4, 8) и (5, 7) кратных 3 нет.
Ответ: 2
Первая подходящая строка
В столбце D для подходящих строк стоит =СТРОКА(), для остальных "". Подходят строки 4, 9 и 15. Что вернёт =МИН(D2:D20)?
Введите число.
Подсказка
МИН пропускает пустой текст.
Разбор
Числа 4, 9, 15 — наименьшее 4.
Ответ: 4
Последняя подходящая строка
В том же столбце что вернёт =МАКС(D2:D20)?
Введите число.
Подсказка
МАКС тоже пропускает пустой текст.
Разбор
Наибольший номер строки — 15.
Ответ: 15
Пути в C2
Сколько путей «только вправо и вниз» ведёт из A1 в C2?
Введите число.
Подсказка
Заполни сетку: края — по 1, внутри — сумма левого и верхнего.
Разбор
B2 = 2, C2 = B2 + C1 = 2 + 1 = 3.
Ответ: 3
Пути в D3
Сколько путей «только вправо и вниз» ведёт из A1 в D3?
Введите число.
Подсказка
Строка 2: 1, 2, 3, 4; строка 3 — суммы левого и верхнего.
Разбор
Строка 3: 1, 3, 6, 10 — в D3 ведут 10 путей.
Ответ: 10
Наборы трёх переменных
Сколько строк нужно, чтобы перебрать все наборы трёх логических переменных?
Введите число.
Подсказка
У каждой переменной два значения, выборы независимы.
Разбор
2 × 2 × 2 = 2³ = 8.
Ответ: 8