Строим умную диаграмму Ганта в Р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

2 комментария

s
нормально, только картинки из 90х, не имеют даже 1024*768
araxx
нормально, только картинки из 90х, не имеют даже 1024*768

спасибо за коммент!) да действительно, но главное видно вроде нормально) для следующих статей постараюсь получше разрешение сделать, но не обещаю

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

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

Новости

Публикации

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

У старых домашних колонок часто можно увидеть серые бумажные диффузоры. У современных встречаются гладкие пластиковые и блестящие металлические. По внешнему виду можно подумать, что бумага...

Обзор наушников Kiwi Ears Stardust: музыкальность с долькой мониторности

В данной статье рассмотрим Kiwi Ears Stardust — эргономичные пятидрайверные гибридные наушники с тёплым, нейтральным и музыкальным звучанием. Параметры Упаковка и комплектация Комплект...

Главный обман 2010-х: почему 3D-телевизоры исчезли так же быстро, как появились

В 2010 году казалось, что телевидение переживает второе рождение: с конвейеров сходили экраны, обещавшие глубину, объём и полное погружение. Семь лет спустя ни один крупный производитель уже не...

Обход ГОСТа на ВЭФ Спидола-232: как советские радиолюбители открывали 100-метровый диапазон

ВЭФ Спидола-232 выпускал Рижский государственный электротехнический завод ВЭФ, с первого квартала 1979 года. Переносной приёмник второго класса сложности, вес 3,4 килограмма, габариты 260х360х110...

Двести лет без солнца: что скрывает легенда о Фимбульвинтере

Весна должна была прийти. Люди ждали, когда земля прогреется, взойдут посевы и скот снова можно будет выгнать на пастбища. Но солнце оставалось тусклым, лето не приносило привычного тепла, а запасы...