Създаване на линеен график (диаграма на Гант). Метод 1

Безплатни 20 урока
регистрирай се и научи

Ако сте вече потребител - Регистриран съм
Видео

Тест за преминаване към следващия урок

 
Какво е предимството на Ексел за създаване на линейни графици?
Можем да създадем бързо непретенциозен график, без да трябва да учим друга програма
Можем да създадем бързо подробен график с анализи, отчети, мрежови график и критичен път
Двупосочната асоциативност между графиката и датите
 
Какво се случва, когато в Excel добавим число към клетка с дата?
Excel възприема числото като брой дни и получаваме нова дата
Excel дава грешка, защото не можем да събираме число с дата
Excel възприема числото като секунди и получаваме нова дата
 
Има ли Excel вградени инструменти за работа с линейни графици?
Да, както е показано във видеото
Не, използваме заобиколни методи, както е показано във видеото

Въпроси и отговори

  • Как да поставя данните 1 по ос Y -2?

    Ели Петрова:


    Здравейте,
    Не успявам да модифицирам графиката като поставя по ос у остойностените  часове. Те се появиха като етикет.
    Въпрос: Как да разположа стойностите от десния блок, обозначени със стрелка 1 по вертикалата -ос У?
    Как може да се модифицира ос У и да се разположат други данни на нея?
    Работя с Ексел 2010 и там има известни различия. Доста време разглеждах вариантите, но не мога да намеря начин.Моля за помощ.

    Христина Машева:

    Здравей,

    ако съм разбрала правилно, ти искаш по X да са ти дните, а по Y да са ти разходите. Само че това не може да стане с такъв тип диаграма. Тук идеята е да гледаме разходите по дни. Ако искаш да направиш диаграма с дните по X, а разходите по Y, то това става по начина описан на изображение 1, като на изображение 2 след натискане на Select Data, от прозореца се избира Add и след това стъпки 2,3.
    Пламен Кузманов:

    Здравей,

    Мислям,че може да стане и с колонната диаграма, просто трябва да зададеш през Select data на Series 1 чрез Edit да дърпа данните от реда с разходи, а не с часовете. Описал съм стъпките в 3-те снимки. Дано съм бил полезен:)
    Yrusinov:

    Здравейте , интересуваме как в една графика можем да сложим по едната Y ос разходит ,а от другата страна часовете , като едната графика примерно е линейна , а другата със стълбове.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    X оста си остава една и съща за двете графики седмиците.

    Също така откъде можем да видим освен традиционните графики и такива които са направени ,като темплейти нещо по разчупено , като за графиката която споменавам по горе , които да изпозваме на готово , а и по интересното е как можем ние да правим такива темплейти , това би био интересно за мен а не само традиционните графики.

    Предварително багодаря за съдействието.

    Юлиян

    Yrusinov:

    Ако съм задал въпроса си , като отговор на някой въпрос на колега се ивинявам , това трябваше да е нов въпрос

    Теодор Димитров:

    Надявам се да съм помогнал

  • Краси Кръстев:

    Здравей, отиди на Chart - a ( графиката ) избери я отстрани и избери Select data Sourse ( снимка 1 )- ще ти се отвори прозорец като този показан на снимка 2, маркирай series 2 така е да стане на сив фон ( това означава че избраното е активно ) след което отиди на Edit след което в полето Series name може да зададеш директно клетка от която да гледа името или да напишеш нещо ( снимка 3) така след това затваряш всички прозорци с ОК и ето името вече е сменено с това което си написал ( снимка 4 ) . Надявам се да съм бил полезен с отговора.

    Диана Палева:

    Благодаря много! С ваша помощ станаха нещата!Благодаря!

    Теменужка Тасева:

    Здравейте като изгледах  двата урока за диаграмата на Гант всичко ми се видя много сложно. Направо се стресирах, мислех, че няма да се справя. После започнах бавно, лека полека  следвах инструкциите и всичко се получи. Благодаря много  за така добре поднесения материал. С малко или повече тренировки всичко се получава.

  • Как да пресметна броя седмици и дни между две дати ?

    Boyana Ivanova:

    Здравейте! Защо като се използва функцията weeknum за де се преброят седмиците от 25.03.2015г. до 24.01.2016г. броят им е 42, а реалният брой за 305 дни е 43 седмици и 4 дни?Как е по-точно да бъдат смятани?

    Краси Кръстев:

    Здравейте,


     когато използвате weeknum най - вероятно го ползвате по следния начин

    = weeknum ( дата 2 - дата 1 ; 2 ) и очаквате да получите броя на седмиците 

    между тези две дати, това НЕ е така от снимка 1 може да се обедите че 

    ползвайки така формулата Excel ми пресмята е между 01.01.2015 и 04.01.2015 

    са две седмици.



    weeknum работи на принцип да показва номера на седмицата за дадения ден от 

    годината.Какво ще рече това ако ползвам чист = weeknum (01.01.2015;2) Еxcel 

    следва да ми даде номера на седмицата за дадената дата ... в случая тази 

    седмица е седмица 1 съответно следва = weeknum (01.01.2015;2) да ми даде 

    резултат 1 - снимка 2, което какво означава .... означава това че правейки 

    формуалта  = weeknum ( дата 2 - дата 1 ; 2 ) ние получаваме от дата 2 - дата 1 

    някакво число и съответно на база на това число Excel  ни показва в коя 

    седмица от годината се намира този ден.

    Важно е да се отбележи че задавайки ; 2  - >  First day = Monday system 1 ние 

    задаваме следната зависимост при пресмятане на седмиците.... ден първи е в 

    седмица 1 ..... дните  от 2 до 8 са в седмица 2, дните от 9 до 15 са в седмица 

    3.... ако зададем ; 21 -> First Day = Monday system 2 броенето става малко по 

    сложно първата седмица е от 1 до 8 ( реално първата седмица започва със 

    сряда затова ) и след това са през седем дни т.е. седмица 2 са от 9 до 15.



    В случай на използване на Excel с формула = weeknum (дата 2 - дата 1;2)

    показва номера на седмицата на база стойносттта и настройките ( 2 или 21 ) и 

    няма как да разпознае 



    На снимка 3 съм дал пример при стойност 2 какво точно се случва.



    Може и сама да тествате това което описах по - горе. Надявам да е ясно и от 

    самото 



    --------------------------------------------------------------------------------------------------------------



    Но сега на въпроса как в крайна сметка мога да покажа между две дати мога да покажа колко седмици и колко дни има между тях.


    Не знам до колко е адекватна формулата която нарпавих, но все пак ето я :

    =((B29-A29)/7)-MOD((B29-A29)/7;1)&"   седмици  и "&((MOD((B29-A29);7)))&" дни "

    На снимка 4 може да се види по - добре.

    Ето какво правя.... от дата 2 изваждам дата 1 и деля на 7 така получавам едно 

    число коеото не е цяло 305 / 7 = 43.57 за да напправя това число цяло, НО 

    същевременно освен и цяло на мен ми трябва да е и делимо на 7, което 

    означава че от него трябва да извадя онази стойност от 43,57 докато не 

    достигна исканото от мен число... затова използвам функция MOD като за 

    стойност за тази функция пак използвам 305 / 7 = 43,57 като за делител 

    задавам числото 7 ... функцията MOD ще сметне най - голямото цяло число 

    което се дели на 7 на база 305 / 7 и ще запише остатъка ми т.е.

    MOD((B29-A29)/7;1)  = 0,57 ( 43 * 7 = 301 ) след което от преди това имам (B29-A29)/7) = 43,57

     което означава че 43,57 - 0,57 следва да ми даде точно 43 седмици, след което 

     пак ще използвам още един MOD 


    MOD((B29-A29);7) в който какво правя изваждам дата 2 - дата 1 и задавам 

    делител пак 7 , какво означава това че от числото 305 MOD ще ми намери най - 

    голямото цяло число което се дели на 7 и следва да ми запише остатъка до 305 

    т.е. числото което е цяло и се дели на 7 е 301 остатъка до 305 е 4 - това са ми 

    дните.


    ----------------------------------------------------------------------------------------------------------------------


    Аз лично бих се справил с проблема така на база на формулите и функциите 

    които знам 

    възможно е и да има доста по - лесни варианти аз лично не се сещам, ако 

    някой знае нека сподели... 



    -------------------------------------------------------------------------------------------------------------------

    Благодаря за въпроса интересен е .... Надявам се да съм бил полезен с 

    отговора, ако нещо неразбираш като дейтвие на функция или друго нещо пише 

    ще дообесня.



    Boyana Ivanova:

    Благодаря Ви много за отговора. Разгледах предложената формула и с нея съвсем точно успях  да определя броя на седмиците и дните и между други дати. 

    Димитринка:

    Здравейте, ето още едно решение за изчисляване на броя седмици и дни между две дати с функцията DATEDIF. Тази функция е включена за първи път в MS Office 2000, но досега не е документирана, т.е. не се показва в списъка на вградените функции, но работи и дава много точни резултати, но все пак имайте едно наум :-)


    Димитринка:

    Моля да ме извините за не най-доброто изображение!  

    Краси Кръстев:

    @Димитринка, да още един вариант за справяне с проблема ... даже бих казал по - удачен  т.к. формулите изглеждат доста по семпли :) спрямо моята дълга формула  :) въреки че ако се обединят в една клектка и твоята би била доста дълга :)

    Димитринка:

    Краси, така е, няма как да се приложи само една функция. Създаването на т. нар. "мегафункции" , т.е. комбиниране на повече функции в една формула е много полезна възможност в Excel. А по-краткият вариант е да се създаде UDF
     :-)

    Miroslav Markov:

    Здравейте,

    Ето и един вариант за смятане на седмици и дни, който използвах преди доста години. Мисля, че е най-компактен като дължина на формулите. Лесно може и да се конкатенират стойностите в една клетка, в моя файл са по отделно.

    Сега, като гледам горния коментар, май е добре да си добавя още един полезен UDF към колекцията то

    Поздрави,

    Miroslav Markov:

    Здравейте,

    Във връзка с горния коментар, намерих малко време и си направих един UDF за пресмятане на седмици и дни между две дати, и реших да го споделя с вас:

    Public Function WD_DateDiff (Start_Date As Variant, End_Date As Variant, _
                        Optional Function_Type_1_or_2 As Integer = 1) As Variant


        Dim FResult As Variant
        Dim Week_Value As Integer
        Dim Week_Value_trunc As Integer
        Dim Day_Value As Integer
       
       
        Select Case Function_Type_1_or_2
       
            Case 1
                GoTo Weeks_only
               
            Case 2
                GoTo Weeks_and_days
               
            Case Else
                GoTo Error_handler
               
        End Select
       
    Exit Function
       
    '------------------------
    Weeks_only:
            FResult = (End_Date - Start_Date) / 7
       
            WD_DateDiff = FResult
        Exit Function
       
    '------------------------
    Weeks_and_days:
            Week_Value = (End_Date - Start_Date) / 7
            Week_Value_trunc = Int(Week_Value)
            Day_Value = (Week_Value - Week_Value_trunc) * 7
            Day_Value = Int(Day_Value)
            FResult = Week_Value_trunc & " weeks and " & Day_Value & " days"
           
            WD_DateDiff = FResult
        Exit Function
       
    '------------------------
    Error_handler:
        FResult = "#N/A"
        WD_DateDiff = FResult
       
        Exit Function


    End Function

    Всъщност, това е комбинация от две функции - при подаване на 1 като опционален аргумент изчислява само седмиците като десетична дроб, а при подаване на 2 като опционален аргумент изчислява едновременно седмици и дни и подава резултата във формат "13 weeks and 1 days".

    Надявам се да го намерите за полезно.
    Ще се радвам и ако някой от по-опитните колеги дадат своя коментар или предложение за корекция/подобрение.

    Поздрави,
    Миро

    Silviya:

    Често използвам различни UDF-и и разбира се забравям какви са аргументите и техния ред на въвеждане. Скоро разбрах за страхотен начин как да се подсетим за синтаксиса:

    1. Въвежда се името на функцията и отварящата скоба
    2. Натиска се клавишна комбинация Ctrl+Shift+A
    Като резултат функцията се запълва с наименованията и подредбата на нейните аргументи.

    Например за горната функция ще се получи:
    =WD_DateDiff(Start_Date;End_Date;Function_Type_1_or_2)

    Надявам се този трик да ви бъде полезен.
    Димитринка Вълкова:

    Здравейте Мирослав,
    Тествах функцията, която предлагате, но тя не изчислява правилно дните, ако задам 2 за допълнителния аргумент (Function_Type_1_or_2 = 2), т.е. резултатът е винаги "X weeks and 0 days" - седмиците Х се изчисляват правилно.
    Препоръчвам да направите следните промени:
    1. Декларирате променливата 
    Dim Week_Value As Integer, а след това в процедурата

    използвате
    Week_Value_trunc = Int(Week_Value)
     Day_Value = (Week_Value - Week_Value_trunc) * 7
    Получава се  (Week_Value - Week_Value_trunc) = 0 и оттук 
     Day_Value = 0.
    Затова не се изчисляват оставащите дни.
    2. След като променливата 
    Dim Week_Value As Integer,
    тогава променливата Week_Value_trunc 
    е напълно излишна.
    3. Аналогично и за променливата 
    Day_Value
    4. Може да изчислите оставащите дни (променливата Day_Value) с аритметичния оператор MOD на VBA. MOD смята така както екселската функция MOD, но във VBA има предимството, че връща резултат цяло число.
    5. Горещо препоръчвам винаги, когато е възможно, да избягвате GOTO.
    6. Достатъчно е в Select Case да включите как да се изчислява формулата, когато
    липсва допълнителният аргумент или е 1, тогава ще изчислява само седмиците.
    Когато допълнителният аргумент е 2, ще изчислява седмиците и дните. За всички останали случаи ще излиза #N/A.
    7. По-добре е двата аргумента на функцията Start_Date, End_Date да бъдат декларирани като Date, а не Variant.
    Надявам се, че коментарите ще Ви бъдат полезни!
    Пишете, ако има нещо неясно.
    Boyana Ivanova:

    Здравейте,  намерих още един вариант за изчисление. Тук използвам само функцията ROUNDDOWN. Мисля, че резултата с тази формула е реален.

    Димитринка Вълкова:

    Също така функцията ROUNDDOWN може да се замени с функцията INT, която връща като резултат само целите числа. По този начин се избягва закръгляването, което понякога крие изненади :-)

    Краси Кръстев:

    Бих добавил че с всяка функция в Excel трябва да се внимава за изненади :)

  • Как да изчисля секцията за нощно работно време?

    Теменужка Бояджиева:

    ЗДРАВЕЙТЕ! МОЛЯ ЗА СЪВЕТ! Това е таблица за заработка. Въпросът ми е свързан със секцията за изчисляване на нощното работно време( точка 3). Каква да е формулата за изчисляването му, като се вземат данните от 2., вместо да се въвеждат ръчно в 1 ( т.е. колоната от 1 да отпадне)? И се вземе под внимание , че нощният труд е в диапазон от 22,00ч- 06,00ч.

    Дарина Иванова:

    Ако има качено изображение на таблица, при мен не се вижда. Бихте ли обяснили по-подробно задачата.

    Теменужка Бояджиева:

    Привет! Много се извинявам. Ето това е коректното изображение. Благодаря !

    Димитринка Вълкова:

    Здравейте, Теменужка. Разгледах много внимателно примера. Сигурно имате сериозна причина да се скрият колоните за нощния труд. Но тези колони са полезни, защото опростяват изчисленията. Ще споделя, че се опитах с вградените функции на Excel да съставя формула и така стигнах до 8 вложени IF в комбинация с AND и OR. Според мен скриването на колоните може да стане по 2 начина: 1. Просто да се скрият двете колони или да се преместят на друг лист. Тогава в таблицата ще се показва само нощния труд с референция към листа където се изчислява Нощен труд От, Нощен труд До. 2. Да се създаде UDF (User Defined Function), с която автоматично да се изчислява нощния труд. Веднага искам да отбележа, че създаването и използването на UDF изисква познания за VBA.

    Ако имате още въпроси, моля пишете ми.

    Теменужка Бояджиева:

    Димитринка, Здравейте! Много Ви благодаря за положените усилия и време. Желанието ми е да изчисля 3. , като се вземат данните от 2. Ако изобщо може да се случи.И така ще мога да махна 1.( не ми е нужна колоната). Дано ме разбирате правилно.

    Димитринка Вълкова:

    Разбирам те много добре. Според мен по-лесно е като скриеш ("hide") колоните, 1. При по-сложни изчисления, както е при теб, е по-добре да имаш колони с междинни резултати, които могат да се "скрият", ако не искаш да се показват или отпечатват.

    Теменужка Бояджиева:

    Eто тук се вижда формулата , която е сполучлива за 1- работното време преминва през 0 часа. Но за 2. не изчислява правилно, защото работното време започва след 0 часа. Аз питам , може ли в показаната формуала да се направи корекция и директно с нея да се изчисли и в т.1и надолу в т. 2? Формулата е: =IF(B6<22/24;2/24;1-B6)+IF(C6<6/24;C6;6/24)

    Димитринка Вълкова:

    Много добро решение, браво! Както вече споменах трябва да се направят допълнителни проверки с IF, затова е по-добре да се използват междинни колони, които след това, ако искаш можеш да ги скриеш. Корекцията, за която споменаваш, по всяка вероятност означава да се прецизират изчисленията, за да стане формулата универсална, т.е. винаги да изчислява коректно. На изображението показвам пример, в който допълвам твоята формула като включвам още проверки с IF. Важното е, че формулите дават коректни изчисления, а на теб могат да ти подскажат и по-добри решения.

    Димитринка Вълкова:

    На изображението се вижда моето решение: колона start - показва началото, колона end - края. Тъй като формулите включват повече проверки, за да бъде коректен резултата, са показани над таблицата. Обърни внимание, че за 1 и 2 резултатите не са коректни, но за 3 и 4, тъй като часовете са извън нощния труд, резултатът е 0. С 5 е показана отрицателна. Надявам се, че това ще ти помогне.

    Димитринка Вълкова:

    По-добро решение е да се напише UDF (User Defined Function). Когато се правят по-сложни изчисления и формулите стават много "дълги", е по-добре изчисленията да се правят с UDF, както е в твоя пример. На първата картинка показвам функцията NightTime (UDF, която написах, за да изчислява нощното време), достатъчно е да се въведат два аргумента - начало и край! На втората картинка показвам част от кода на функцията NightTime. Тъй като процедурата е по-дълга, не се вижда целия код. Ако това решение ще ти свърши работа, изпрати ми на лично съобщение имейл, за да изпратя файла. За съжаление във форума няма възможност да се прикачват файлове.

    Теменужка Бояджиева:

    Димитринка, здравей. Много ти благодаря за съдействието ти. Ще разледам подробно всичко и ако имам въпроси, ще попитам пак.