Excel_使用條件格式製作甘特圖

 

之前想用Excel做一個可以反映項目進度計劃的自動甘特圖,網上查了一些教程,但都只能反映計劃,不能反映項目進度情況。然後發現Excel的聯機模板裏面就有一個比較好的甘特圖模板,於是參考其原理仿做了一個簡單的Excel甘特圖。

 

原資料分析

 

參考的Excel聯機模板

 

這個甘特圖模板有幾個特點:

 

  • 可以反映出計劃週期與實際週期的關係
  • 日期高亮
  • 百分比換算表示實際進度
  • 配色和排版都漂亮

 

分析了一下這個模板的甘特圖實現原理,其實就是利用Excel的條件格式功能進行單元格填充,那做起來還是比較簡單的。

 

製作前的思考

 

爲了方便實際項目使用,我想要的甘特圖還需要做一些調整:

 

  • 原模板是使用單位時間計劃任務的,需要將其調整爲使用日期計算
  • 除了原本的日期高亮,還需要實現節點日高亮
  • 添加週末高亮
  • 原模板實際工期不輸入的話甘特圖顯示是錯誤的,那只有等到計劃任務全部完成後這個甘特圖才能顯示正確,所以這個完成百分比就顯得很雞肋了,乾脆去掉百分比的相關顯示
  • 我好像做不出這麼好的配色...鋼鐵直男無所謂了,好用就行

 

成品演示

 

 

製作解析

 

首先講一下原理,Excel有一個叫條件格式的功能,這個功能允許通過公式判定單元格內的數據,如果滿足條件,則按照設定修改單元格格式。所實現的這個甘特圖就是使用了日期進行判定運算,然後對甘特圖內的單元格進行顏色填充或者邊框線調整。

 

下面進行步驟解析

 

首先在Excel中調整一個格式,後面涉及到公式部分都基於下圖格式

 

 


 

先實現週末高亮,邏輯很簡單,通過Excel的weekday函數判斷一下就可以了:

 

  1. 光標放在H12,在開始選項卡里點擊 條件格式 下拉按鈕
  2. 點擊 新建規則
  3. 點擊 使用公式確定要設置格式的單元格
  4. 公式輸入 "=WEEKDAY(H$12,2)>5"
  5. 設定格式
  6. 調整條件格式應用範圍

 

公式:"=WEEKDAY(H$12,2)>5"

 

使用WEEKDAY(serial_number,return_type)這個Excel函數可以返回輸入數值在一週內是第幾天,輸入H12裏面的數值的話返回值應爲6,再判斷這個返回值是否大於5就可以知道是否爲週末了。

 

 

 


 

然後實現計劃週期顯示,邏輯是判斷單元格內日期是否在計劃開始日期與計劃結束日期之間:

 

  1. 光標放在H13,其他步驟參考上一小節
  2. 公式輸入 "=AND(H$12>=$C13,H$12<=MAX($C13,$D13),$C13>0)"
  3. 注意調整條件格式應用範圍

 

公式:"=AND(H$12>=$C13,H$12<=MAX($C13,$D13),$C13>0)"

 

使用Excel函數AND(logical1,logical2,...)可以判斷多個條件,當條件全部滿足時則返回真值,這裏輸入了三個條件:

 

H$12>=$C13——判斷H12單元格內的值是否大於或等於C13單元格內的值;

 

H$12<=MAX($C13,$D13)——首先判斷C13的值大還是D13的值大,再判讀H12單元格內的值是否小於或等於這個值。這樣做是考慮如果沒有輸入結束日期或者結束日期比開始日期還早(輸入錯誤)的時候,就會用開始日期當作結束日期,保證甘特圖顯示不會反邏輯;

 

$C13>0——當C13單元格大於0,即開始日期需要有輸入,甘特圖才顯示相關數據。

 

 


 

計劃週期內的實際工作時間顯示,邏輯是判斷出在計劃週期內,實際啓動日期到計劃結束日期的單元格。

 

  1. 光標放在H13,其他步驟參考第一小節
  2. 公式輸入 "=AND(H$12>=MAX($C13,$E13),H$12<=MIN(MAX($E13,$F13),$D13),$E13>0)"
  3. 注意調整條件格式應用範圍

 

公式:"=AND(H$12>=MAX($C13,$E13),H$12<=MIN(MAX($E13,$F13),$D13),$E13>0)"

 

實現方法與前一節相仿,條件稍微調一下:

 

(H$12>=MAX($C13,$E13)——先判斷C13與E13的最大值,可獲得計劃週期內的實際啓動日期,再判斷H12單元格是否大於或等於這個日期;

 

H$12<=MIN(MAX($E13,$F13),$D13)——先用MAX處理,避免出現結束日期未輸入或輸入錯誤的情況,再用MIN比較計劃結束日期與實際結束日期較哪個更小,最後判斷H12裏的值是否小於等於這個日期;

 

$E13>0——當實際啓動日期有輸入纔在甘特圖中顯示相關數據。

 

 


注意檢查條件格式的順序,越上面的條件格式會將下方的條件格式覆蓋

 


 

計劃週期前的實際工作時間顯示,邏輯是判斷出實際啓動日期及實際結束日期在計劃啓動日期之前的單元格。

 

  1. 光標放在H13,其他步驟參考第一小節
  2. 公式輸入 "=AND(H$12>=$E13,H$12<=MIN($C13-1,MAX($E13,$F13)),$E13>0)"
  3. 注意調整條件格式應用範圍

 

公式:"=AND(H$12>=$E13,H$12<=MIN($C13-1,MAX($E13,$F13)),$E13>0)"

 

同樣是三個條件:

 

H$12>=$E13——判斷單元格是否大於及等於實際啓動日期;

 

H$12<=MIN($C13-1,MAX($E13,$F13))——MAX的使用原因同前面小節,然後通過MIN判斷實際結束日期是否早於計劃開始日期,最後判斷單元格是否小於或等於這個日期;

 

$E13>0——同上一小節。

 

 


 

計劃週期後的實際工作時間顯示,體現項目延期的這個部分我用了兩個條件格式,分別用來判定兩種情況,一種是實際啓動日期早於計劃結束日期,一種是實際啓動日期比計劃結束日期還晚。公式分別如下:

 

"=AND(H$12>=MAX($D13+1,$E13),H$12<=MAX($E13,$F13),$E13>0)"

 

"=AND(H$12>$D13,H$12<$E13)"

 

公式:"=AND(H$12>=MAX($D13+1,$E13),H$12<=MAX($E13,$F13),$E13>0)"

 

老套路:

 

H$12>=MAX($D13+1,$E13)——MAX函數判斷實際啓動日期晚還是計劃結束日期晚,單元格值需要等於或者大於這個日期;

 

H$12<=MAX($E13,$F13)——此次MAX函數也是爲了解決結束日期輸入的問題,然後判斷單元格值是否小於等於實際結束日期;

 

$E13>0——同樣用於判斷是否有開始日期的輸入。

 

公式:"=AND(H$12>$D13,H$12<$E13)"

 

這次只需要兩個條件:

 

H$12>$D13——單元格值需大於計劃結束日期;

 

H$12<$E13——單元格值需小於實際啓動日期;

 

 


 

接下來實現日期高亮,日期高亮也是由兩個條件格式完成,但都使用一條公式,只是公式的應用範圍及替換的格式不一樣。

 

第一個條件格式光標先定在H10,公式輸入"=H$12=$S$7"

 

第二格條件格式光標定在H11,公式輸入"=H$12=$S$7"

 

公式:"=H$12=$S$7"

 

 

這個判斷非常簡單,直接判斷甘特圖上的日期與設定日期是否一致就可以了。

 

 

單元格使用了一個公式賦值

 


 

節點日期高亮實現方法與上一節大致一樣,也是兩個條件格式。

 

第一個條件格式光標先定在H11,公式輸入"=H$11="節點"

 

第二格條件格式光標定在H12,公式輸入"=H$11="節點"

 

公式:"=H$11="節點"

 

這個公式就是直接判斷H11這行是否有輸入"節點"這兩個字,有的話替換相關範圍的單元格格式。

 

 


 

至此,甘特圖的核心功能就全部做好了,後面還可以做一些其他的美化或者格式調整。

 

其實在我的觀點中,每個領域通常都有這個領域的專業軟件,包括項目管理上我相信也有軟件比Excel做得更好,功能更全。但我相信在一般的辦公室,沒有任何一款軟件比Excel更普及,更容易讓人接受。一些時候只是簡單有了個想法,想要一些簡單的功能,果然還是強大的Excel更直接。

 

當然了,最主要的是我好久沒折騰軟件了,有時候折騰也是一種快樂呀~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章