Подтема 2 из 6
Расписание в Excel
Как посчитать начала и окончания для таблицы из файла: поставщики по столбцам, их окончания через ВПР, начало — МАКС.
Таблица в Excel
В файле экзамена процессов двадцать и больше. Как посчитать расписание, не делая всё руками?
Записать то же правило формулами: для каждого процесса найти окончания его поставщиков, взять из них максимум и прибавить время работы. Формулы будут одинаковыми для всех строк — их напишем один раз и протянем. Порядок такой:
- разложить список поставщиков по отдельным столбцам;
- для каждого поставщика найти его окончание по ID;
- начало — максимум этих окончаний, окончание — начало плюс время;
- общее время — максимум столбца окончаний.
Столбцы расположим так: A — ID, B — время работы, C и D — поставщики, E и F — их окончания, G — начало, H — окончание. Покажем на восьми процессах учебного примера — должно получиться то же, что руками: итог 14.
Поставщики по столбцам
В ячейке записано «1;2». Как искать каждого поставщика отдельно?
Разложить список по столбцам: Данные → Текст по столбцам, с разделителями, разделитель — точка с запятой. Тогда «1;2» станет двумя ячейками: 1 и 2. В LibreOffice команда называется так же и стоит в меню «Данные».
Столбцов под поставщиков нужно столько, сколько их у процесса с самым длинным списком. У нас их два — C и D. Справа от столбца со списком должны быть пустые столбцы, иначе разложенные значения затрут соседние данные.
После разложения все ID становятся числами. Это важно: в файлах одиночный поставщик часто записан текстом, а ВПР не находит число «5», записанное как текст.
Окончание поставщика: ВПР
Как по ID поставщика найти, когда он закончился?
Функцией : она находит строку с нужным ID и берёт из неё окончание. Окончания поставщиков ставим в E и F, начало — в G, окончание — в H:
=ЕСНД(ВПР(C2; $A$1:$H1; 8; 0); 0)C2— ID поставщика, которого ищем.$A$1:$H1— где ищем: строки выше текущей. Поставщики стоят выше тех, кто их ждёт, поэтому этого хватает. При протягивании вниз конец диапазона растёт:$A$1:$H2,$A$1:$H3и так далее.8— номер столбца в диапазоне: восьмой — H, окончание.0— искать точное совпадение ID.ЕСНД(…;0)— если ВПР ничего не нашла (ID 0 или пустая ячейка), вместо ошибки #Н/Д будет 0.
Формулу протягиваем вправо на F2 — там будет второй поставщик из D2 — и вниз до девятой строки. Знак закрепляет столбцы диапазона и его первую строку, а последняя строка без $ — она и растёт.
Тонкости:почему не вся таблица
Если искать во всём диапазоне, формула строки увидит и окончание своего же процесса, которое от неё зависит. Excel сочтёт это циклической ссылкой. Строки выше этой проблемы не имеют.
Но тогда поставщик должен стоять выше. В файлах экзамена так и есть: процесс зависит только от процессов с меньшими ID. Если встретится таблица, где это не так, сначала переставь строки так, чтобы поставщики шли выше тех, кто их ждёт (сортировка по ID это не гарантирует), а ЕСНД здесь опасна — она молча подставит 0 вместо ненайденного поставщика.
Начало, окончание, итог
Окончания поставщиков найдены. Что дальше?
Начало — их максимум, окончание — начало плюс время, общее время — максимум столбца окончаний.
=МАКС(E2:F2)=G2+B2=МАКС(H2:H9)G2 и H2 протягиваем вниз. Весь расчёт на одном листе — значения те же, что в расчёте руками:
| A | B | C | D | E | F | G | H | |
|---|---|---|---|---|---|---|---|---|
| 1 | ID | Время | Пост. 1 | Пост. 2 | Оконч. 1 | Оконч. 2 | Начало | Окончание |
| 2 | 1 | 4 | 0 | 0 | 0 | 0 | 4 | |
| 3 | 2 | 6 | 0 | 0 | 0 | 0 | 6 | |
| 4 | 3 | 3 | 1 | 4 | 0 | 4 | 7 | |
| 5 | 4 | 2 | 1 | 2 | 4 | 6 | 6 | 8 |
| 6 | 5 | 5 | 2 | 6 | 0 | 6 | 11 | |
| 7 | 6 | 4 | 3 | 4 | 7 | 8 | 8 | 12 |
| 8 | 7 | 2 | 4 | 5 | 8 | 11 | 11 | 13 |
| 9 | 8 | 1 | 6 | 7 | 12 | 13 | 13 | 14 |
| 10 | ||||||||
| 11 | Все готовы | 14 |
E2скопирована до F9=ЕСНД(ВПР(C2;$A$1:$H1; 8; 0); 0) G2скопирована до G9=МАКС(E2:F2)H2скопирована до H9=G2+B2H11=МАКС(H2:H9)
Выбери G5 — начало процесса 4: рамки стоят на окончаниях его поставщиков, 4 и 6. Поменяй время процесса 6 в B7 с 4 на 6 — итог станет 15, как в расчёте руками.
Итого
- ПоставщикиДанные → Текст по столбцам, разделитель «;»
- Окончание поставщика
=ЕСНД(ВПР(C2;$A$1:$H1; 8; 0); 0) - Где ищемстроки выше: поставщики стоят выше
- Начало
=МАКС(E2:F2) - Окончание
=G2+B2 - Общее время
=МАКС(H2:H9)
Проверьте себя
Ответь сначала сам, потом открой ответ.
C7 и D7. Что покажут E7, F7 и G7?ОтветСкрыть ответ
ВПР(C2;$A$1:$H1;8;0) для процесса 1, у которого в C2 стоит 0? Зачем вокруг ЕСНД?ОтветСкрыть ответ
E5 диапазон поиска — $A$1:$H4, а не вся таблица?ОтветСкрыть ответ
ВПР(C2;$A$1:$H1;8;0)?ОтветСкрыть ответ
ОтветСкрыть ответ
Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Результат ВПР
Что вернёт =ВПР(30; для таблицы из примера (10 — 5, 20 — 8, 30 — 12)?
Введите число.
Подсказка
ВПР ищет 30 в первом столбце и берёт значение из второго.
Решение
12.
Ответ: 12
Общее время по файлу 22-1
В файле 22-1.xlsx приведены данные о процессах: ID процесса B, время его выполнения (мс) и ID процессов A, от которых он зависит. Независимые процессы начинаются в момент 0, зависимый — сразу после завершения всех процессов, от которых он зависит. Определите минимальное время (в мс), через которое завершится выполнение всей совокупности процессов. Реши через ВПР, разделив список поставщиков по столбцам.
Введите число.
Подсказка
Разложи поставщиков по столбцам и найди их окончания через ВПР.
Решение
69 — наибольшее окончание.
Формулы в Excel
C: Данные → Текст по столбцам, разделитель «;» → C:EF2: =ЕСНД(ВПР(C2;$A$1:$J1;10;0);0) — на F2:H…I2: =МАКС(F2:H2) — началоJ2: =I2+B2 — окончание; всё протянуть внизОтвет: =МАКС(J2:J19)Ответ: 69