Строим умную диаграмму Ганта в Р7-Офис

Пост опубликован в блогах iXBT.com, его автор не имеет отношения к редакции iXBT.com
| Инструкция | ИИ, сервисы и приложения

Диаграммы Ганта — наверное, один из самых полезных инструментов для управления проектами, что придумало человечество за всю свою историю. Каждый мало-мальски сложный проект состоит из некоторого множества составляющих, процессов со своим временем старта и своей длительностью. Это касается любого проекта, как задач уровня «сварить борщ» (от покупки ингредиентов до финального «настояться за ночь»), так и проектов типа «построить атомную электростанцию». Просто уровни сложности разные. И если в деле строительства атомной электростанции без сложной системы управления проектами не обойтись, то в случае не таких глобальных затей несложный контроль можно наладить в табличном редакторе, например, Р7-Офис.

Для создания интриги сразу продемонстрируем, какого результата мы хотим добиться на примере простенького проекта по строительству условной теплицы в условном приусадебном хозяйстве.

При этом показатели прогресса процесса решения той или иной задачи в составе проекта у нас рассчитывается автоматически в зависимости от условной «даты отчета», что прописывается в поле B1. Кстати, на самом графике индикация текущего момента тоже присутствует — обратите внимание на желтую пунктирную линию. При этом из такого, достаточно громоздкого, вида наша таблица легко принимает более компактное и удобное для восприятия представление:

Приступим?

Итак, у нас есть условный список задач (пяти для примера нам хватит), а также даты их старта и завершения. Также мы предусмотрим отдельные столбцы для подсчёта общей длительности этапа, числа отработанных по задаче дней на текущую дату и прогресса в работе. Столбец «Прогресс» расположим рядом с «Этапами», так как мы планируем эту область закрепить для удобной навигации собственно по диаграмме Ганта, которая может быть и слишком длинной, чтобы поместиться на экране целиком.

И давайте сразу сгруппируем столбцы, которые мы в дальнейшем планируем сворачивать. На вкладке «Данные», выделив эти самые столбцы (на шкале, а не сами поля!), жмём «Сгруппировать».

Посчитать общую продолжительность этапа в днях достаточно просто — из даты финиша вычитаем дату старта, прибавляем единицу (день старта тоже ведь считается).

Протягиваем формулу за нижний правый уголок. Только формат ячеек в столбике стоит сменить на числовой, а то результат редактор выдаст также в виде даты.

Великий и ужасный ЕСЛИ

Получилось? Приступим к вычислению прогресса. Для этого сначала неплохо бы ввести текущую дату:

Чтобы посчитать число отработанных дней, воспользуемся функцией ЕСЛИ. Логика её работы довольно проста. Она проверяет, соответствует ли значение в определённой ячейке (у нас это текущая дата в поле B1, и её обязательно надо закрепить в нашей формуле символами доллара — $B$1 — чтобы при протягивании она обращалась к тому же самому полю) определённому условию. А потом через точку с запятой — что выдавать, если соответствует, и что, если не соответствует.

Но нам в одной формуле нужно будет уместить два таких сравнения. Первое ЕСЛИ проверит, наступила ли текущая дата раньше, чем дата начала этапа. Если так ($B$1<C5), значит работа еще даже не началась, и формула возвращает ноль.

=ЕСЛИ($B$1<C5;0;(…))

Если же текущая дата соответствует началу этапа или ещё более поздняя, нам пригодится второе ЕСЛИ. Оно проверит, не закончился ли уже этап к дате отчета. Если это так ($B$1>D5), значит этап завершен и отработаны все дни из столбца E (соответственно, возвращается значение E5). Дописываем формулу:

=ЕСЛИ($B$1<C5;0;ЕСЛИ($B$1>D5;E5;

Если ни одно из этих условий не выполняется, значит этап сейчас в процессе выполнения. В этом случае формула считает, сколько дней прошло от начала этапа до введённой в качестве текущей даты: $B$1-C5+1. Напомним, единица добавляется, чтобы включить в расчет и сам день старта.

=ЕСЛИ($B$1<C5;0;ЕСЛИ($B$1>D5;E5;$B$1-C5+1))

На финише не забываем проставить две закрывающие скобки (завершили аргумент вложенного ЕСЛИ и «большого» ЕСЛИ). И протягиваем вниз.

Отлично, а теперь просчитаем прогресс. Если делать по-простому, то формулы вида F5 (число отработанных дней) разделить на E5 (полная длительность этапа) достаточно. Но представьте, что будет, если у нас не для всех задач определены точные сроки (и продорлжительность, соответственно)? Возникнет ошибка деления на ноль, которая нам не нужна. Так что с помощью той же ЕСЛИ организуем проверку как раз на этот случай. Если в «Дней всего» ноль, вернуть ноль, если не ноль — разделить отработанные на полную длительность. Выглядеть это будет так:

=ЕСЛИ(E5=0; 0; F5/E5)

Протягиваем, и не забываем, что формат столбика должен быть процентным.

Делаем ось времени красиво

Самое время заняться, собственно, диаграммой. И нам нужна будет ось времени. Для удобства свернём пока столбцы с данными о длительности этапов, что мы сгруппировали в самом начале. И вставим нашу первую дату.

Дальше можно протянуть её за уголок ячейки достаточно далеко вправо, но тогда мы получим что-то такое:

Нам этого не хочется, так что поколдуем с форматом. В поле первой проставленной даты либо в контекстном меню, либо в выпадающем списке на вкладке «Главная» выбираем «Другие форматы», затем — выбираем категорию «Особый».

А потом убираем /ММ/ГГ, оставив только ДД, чтобы сэкономить место и сделать график более компактным.

И протянем вправо. Всё равно ряд дат получается довольно длинным — ячейки слишком широкие по умолчанию, так что попробуем их уменьшить. Выделим столбцы на строке заголовков (клик на первый в раду, а потом через Shift — на последний; как вариант — то же самое с клавиатуры). Вызываем контекстное меню строки заголовков (а не какой-нибудь ячейки). И через пункты «Задать ширину столбца» и «Особая ширина столбца» задаём три символа.

Так лучше, не правда ли?

А чтобы было понятно, что месяц у нас — июнь, так и запишем строкой выше.

Теперь займёмся днями недели — эта шкала лишней точно не будет, плюс, на ней можно визуально отметить выходные. Здесь нам пригодится, во-первых, функция ДЕНЬНЕД, которая возвращает нам порядковый номер дня недели в зависимости от значения даты в соответствующей строке. В нашем случае — ДЕНЬНЕД(G2; 2), где 2 после точки с запятой просигнализирует редактору, что неделя у нас с понедельника стартует, а не с воскресения, как в западной традиции.

Но номер дня недели — это только полдела. Воспользуемся функцуией ВЫБОР, которая в зависимости от значения в ячейке выбирает соответствующее слово из списка. А список будет состоять из сокращений дней недели — «Пн» «Вт» «Ср» «Чт» «Пт» «Сб» «Вс». И да, кавычки здесь обязательны. В итоге должно получиться что-то такое:

=ВЫБОР(ДЕНЬНЕД(G2; 2); «Пн» «Вт» «Ср» «Чт» «Пт» «Сб» «Вс»)

Протягиваем получившуюся формулу по ряду и отцентрируем для красоты.

Условное форматирование — залог наглядности!

Для начала закончим со шкалой с днями недели — надо визуально выделить выходные. Выделим всю строку с днями недели (начиная с G3) и на вкладке «Главная» в меню кнопки условного форматирования выберем «Формула».

Здесь воспользуемся функцией ИЛИ. Она применяет выбранное пользователем условное форматирование (мы выберем розоватую заливку и красный шрифт для заметности), если значение в ячейке соответствует хотя бы одному из условий. Из двух в нашем случае. Нас интересует шестой или седьмой день недели. Условия сформулируем с помощью уже известной нам формулы ДЕНЬНЕД(G2; 2), только номер строки закрепим символом доллара.

=ИЛИ(ДЕНЬНЕД(G$2; 2)=6; ДЕНЬНЕД(G$2; 2)=7)

Результат:

А где же диаграмма?

Действительно, пора заняться главным. Разумеется, тоже с помощью условного форматирования по формуле. Выделяем весь диапазон, в котором расположится график. Можно мышкой через зажатый Shift, выделив последовательно левую верхнюю и правую нижнюю ячейки — теперь у нас эта область таблицы довольно компактна, так что скроллить не придётся. А понимать, какие ячейки надо закрашивать, будем через функцию И (определяет истинность, соответствие заданному критерию).

Сначала закрасим ярко-зелёным уже пройденную часть проекта. Нам нужно проверить, попадает ли дата календаря в G2 и далее (запишем как G$2, где символ доллара — для закрепления строки в формуле) в период от старта до количества уже отработанных дней. Чтобы покраситься, G$2 должно быть больше или равно дате старта, которая записана в поле С5 (в формуле — $C5, нам же надо закрепить столбец), и в то же время меньше просуммированных даты старта и количества уже отработанных дней — ($C5+$F5). По итогу выражение примет такой вид:

=И(G$2>=$C5; G$2<($C5+$F5))

Снова идём в меню условного форматирования, выбираем формулу, вводим наше выражение, не забывая про ярко-зелёную заливку:

Что ж, всё покрасилось правильно:

А теперь можно, не снимая выделения, покрасить ещё не выполненную часть проекта в более светлый зелёный. Действовать будем по тому же принципу, что и в случае с закраской уже пройденного пути. Только теперь нам нужно, чтобы дата для закраски попадала в интервал между днём, следующим за текущим (что уже закрашен ярким зелёным) и датой финиша задачи. То есть, условие первое: G$2 больше или равно (к дате старта прибавляем отработанные дни) $C5+$F5. Также G$2 должно быть меньше или равно $D5. Получится:

=И(G$2>=($C5+$F5); G$2<=$D5)

Чтобы более чётко разделить задачи, можно применить обрамление в виде горизонтальных линий.

А теперь займёмся идентификацией текущей даты. Тоже через условное форматирование и формулу. Благо, она будет совсем короткой: =G$2=$B$1. То есть, если данные о дате из второй строки (которая зафиксирована «долларом») соответствуют значению в поле B1 (тут зафиксировать надо и строку и столбец, чтобы формула обращалась только к одной ячейке) — применим условное форматирование. Мы выберем в качестве такового желтый пунктир.

Теперь текущую дату на графике легко опознать:

Проверим, меняется ли процент исполнения и сам график в зависимости от введённой даты.

Значит, всё работает правильно:)

Изображение в превью:
Автор: https://www.magnific.com/ru/author/kamranaydinov
Источник: Сайт Magnific

0 комментариев

Добавить комментарий

Сейчас на главной

Новости

Публикации

Гигантские воронки на плотинах кажутся бездонными: куда на самом деле уходит вода?

Когда вода начинает переливаться через край такой воронки, зрелище выглядит тревожно. Поток сходится со всех сторон, ускоряется и исчезает в отверстии, под которым не видно дна. Со стороны кажется,...

Боди: самый популярный город-призрак США, застывший во временах Дикого Запада

Хотели побывать на Диком Западе? Том самом, с золотой лихорадкой, ковбоями и эпичными перестрелками, как в вестернах? В таком случае самое время брать билеты в жаркую Калифорнию, где посреди...

Сон собаки: дешёвая уловка или гениальный ход в кино и играх?

Когда восторги вокруг Clair Obscur: Expedition 33 утихли, зазвучало разочарованное: «Так это был сон собаки?» Но действительно ли подобный приём обесценивает историю или делает её только интереснее?

DeepSeek или Qwen: сравниваем две бесплатные нейросети на 7 задачах

DeepSeek и Qwen — две популярные у нас китайские нейросети. Обе бесплатные, и обе за последние месяцы серьёзно обновились. DeepSeek научился понимать картинки, а у Qwen вышла флагманская...

Ловушка «избыточной надежности»: как не переплатить за лишний вес катушки для спиннинга

Когда вы стоите в рыболовном магазине и рассматриваете витрину, рука сама тянется к увесистой катушке. Появляется мысль, что эта мощь и надежность прослужат десятилетиями. Это типичная ловушка для...

Строим умную диаграмму Ганта в Р7-Офис

Диаграмма Ганта в табличном редакторе: пошаговый гайд, как своими руками построить удобный график проекта в обычной таблице — с прогрессом, осью времени и автоматическим выделением текущей даты.