Страницы: 1
RSS
Помогите доработать аналог MS Project
 
Народ, помогите, пожалуйста, довести до законченного вида аналог MS Progect'a в части построения план-графиков работ (диаграмм Ганта)  
Сразу предупреждаю: статью "Календарный график проекта (диаграмма Ганта) версия 3.0" на http://www.planetaexcel.ru/tip.php?aid=83 я читал и файл "щупал". ИМХО, слишком сложно (по крайней мере для меня) и не гибко (если вдруг понадобимся что-то сдвинуть или добавить, то всё съедет).  
 
В своём варианте я использую одновременно и макросы, и формулы, и именованные диапазоны, и условное форматирование... В общем - полный фарш :)  
Применение именованных диапазонов позволяет не лезть в код при перемещении при необходимости таблицы по листу, изменения количества столбцов до начала графиков и изменения символа-заполнителя.  
 
Дабл-кликом в поле графика инвертируется значение конкретной ячейки в области графика (символ-заполнитель ставится/снимается).  
Можно просто при желании и просто стирать, вписывать, протягивать символы заполнения по области графика.  
УФ в ячейках строки дат закрашивает субботы, воскресенья, праздники и "чёрные выходные", назначенные из-за переноса рабочих дней.  
Поставив "гульку" в чек-боксе, можно выделять одновременно строки+столбцы "кликнутых" ячеек в области построения графика (за идею спасибо The_Prist, но реализовано по другому).  
 
Почти всё уже доделал. Осталось сделать зачистку строк и добавление новых строк событий. Но это мелочи.  
ПРОБЛЕМА:  
Формулы для вычисления первой и последней дат и длительности в столбцах C-D-E не мои. А там, похоже, удобнее использовать именно формулы листа, а не макросы.  
Я их списал у ber$erk здесь: http://www.planetaexcel.ru/forum.php?thread_id=44584 и где смог вместо прямого указания диапазонов подставил имена вычисляемых диапазонов.  
Но смог не везде (я не формулист, а макрописец).  
Никак не могу сообразить, как реализовать ИНДЕКС(... ПОИСКПОЗ()) ТОЛЬКО на именованных диапазонах?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
В формулах указан не весь диапазон.  
 
в С =ИНДЕКС(Даты;;ПОИСКПОЗ(Metka;F8:DW8;0))  
в D =ИНДЕКС(Даты;;ПОИСКПОЗ(СИМВОЛ(КОДСИМВ(Metka)+1);F8:DW8;1))  
 
А какой нужен результат если в строке нет Metka?
excel 2010
 
Alex, попробуйте:  
в С8 и ниже  
=ИНДЕКС(Даты;1;ПОИСКПОЗ(Metka;ИНДЕКС(Гант;СТРОКА()-СТРОКА(Гант)+1;);0))  
в D8 и ниже  
=ИНДЕКС(Даты;1;ПОИСКПОЗ(СИМВОЛ(КОДСИМВ(Metka)+1);ИНДЕКС(Гант;СТРОКА()-СТРОКА(Гант)+1;);1))
 
спасибо большое! То, что надо.  
А уж про Е8 я попробую и сам сообразить по аналогии :)  
 
Nic70y,  
а Вы думаете, что я этого не вижу?    
Я потому и попросил помощи, что именованные диапазоны у меня динамические, а в формулы не везде удалось их подставить вместо фиксированных.  
 
А там, где нет ни одного символа Metka пусть пока так #Н/Д и выдаёт. Ведь по сути это правильно, т.к. работа записана, а времени не занимает.  
Ну, может быть со временем посмотрю и заменю #Н/Д на ""
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
К сожалению, я как ни пытался, а не въехал почему в поиске последней даты ищется не сам символ Metka, а следующий за ним - СИМВОЛ(КОДСИМВ(Metka)+1) ???  
Но ведь работает!  
Жаль, что не понимаю, почему... Может быть кто-нибудь из знатоков объясним?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Алексей, у меня так тоже работает:  
=ИНДЕКС(Даты;1;ПОИСКПОЗ(Metka;ИНДЕКС(Гант;СТРОКА()-СТРОКА(Гант)+1;);1))
 
я так пробовал уже изначально - даёт ошибку на некоторых датах - пропускает последние даты.  
При чём не на всех, а только на состоящих из "рваных" отрезков и где-то начиная с ноября.  
Этот-то вариант логичный и понятный по Справке.  
А вот СИМВОЛ(КОДСИМВ(Metka)+1) хоть и не понятно, но работает!  
 
К стати, не подскажете всё-таки формулу для подсчёта дней чтобы мне завтра на работе не терять время?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Aaaaaa, вспомнил !  
Поиск последней метки (непустой ячейки):  ПОИСКПОЗ("я";[диапазон];1)
или (красивше):  ПОИСКПОЗ(СИМВОЛ(255);[диапазон];1)
-----------------  
Это ?  
=СЧЁТЗ(ИНДЕКС(Гант;СТРОКА()-СТРОКА(Гант)+1;))
 
ОГРОМНОЕ СПАСИБО!  
Теперь могу спокойно допиливать код, глянец наводить, не отвлекаясь на формулы.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Ну вот. Кажется, всё допилил...  
Если не лень, пощупайте кто-нибудь, пожалуйста.  
Там много всяких примочек (для себя же делал :) )
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Alex_ST прошу прощения, что не внимательно изучил Вашу тему,  
сознаюсь был не прав предложив свои формулы.  
 
Хочу только спросить для чего в формуле единица  
=ИНДЕКС(Даты;1;  
ведь диапазон Даты состоит из одной строки
excel 2010
 
Nic70y,  
а это кому-нибудь разве мешает?  
 
Читаем Справку:  
ИНДЕКС(массив;номер_строки;номер_столбца)  
Массив    — это диапазон ячеек или массив констант.  
Если массив содержит только одну строку или один столбец, то соответствующий аргумент номер_строки или номер_столбца не является обязательным.  
 
Но ведь никто и не запрещает указать номер строки в массиве-строке.  
А определённость мне нравится больше, чем две ; подряд.  
(тем более, что как я уже писал: формулы - это не мой конёк)
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1
Читают тему
Наверх