零基礎學Excel VBA-WE014【項目人力投入曲線】

一、簡單演示

零基礎學Excel VBA-WE014【項目人力投入曲線】

零基礎學Excel VBA-WE014【項目人力投入曲線】

注:VBA畫圖表的功能我用得不好,所以需要預先做好曲線框架,生成數據後,會同時生成曲線數據。

二、關鍵對象/方法的分析

Dictionary

一種比較常用的對象,儲存數據的方式為:關鍵字(稱為 Key) - 條目(稱為 Item)。

常用的屬性、方法包括:

  • Add,添加一對相對應的關鍵字和條目到 Dictionary 對象。
  • Exits,如果在 Dictionary 對象中指定的關鍵字存在,返回 True,若不存在,返回 False。
  • RemoveAll,刪除所有關鍵字和條目對。
  • Count,返回 Dictionary 對象中的條目數。
  • Keys,返回一個數組,該數組包含一個 Dictionary 對象中的全部已有的關鍵字。
  • Key,重新設置一個 Key 的 Key 值。

三、執行思路及過程分析

【1】需求分析

這是一個簡化了的項目人力投入表格,包括到位時間,釋放時間,投入佔比,還有人員的類別。

一般來說,這種人力表格,都需要獲取每個人、每種類別在項目中的投入時間,然後畫個曲線圖之類的。

【2】確定每個人每個月的投入時間

Range(Cells(2, 7), Cells(rmax1, cmax)),轉換到這張表,就是 G2~P9,這個區間就是填入每個人每個月的投入天數。

這條公式看起來有點複雜,理解了其實也很簡單。

拿個具體的月份作為栗子,比如 2018 年 8 月份,如果人員 X 在項目的時期並不跨越 8 月份,也就是他的 到位時間 晚於 2018 年 8 月,或者他的 釋放時間 早於 2018 年 8 月,那麼他在 2018 年 8 月份的投入天數就肯定是 0 。

我們看 IF 的條件判斷,用了一個 OR 函數——只要滿足任一條件,直接取 0 。

我們再看看,如果同時不滿足這兩個條件,那就代表著該人員在 8 月份是有投入的,總共會有 4 種情況:

1. 2018 年 8 月到位,並且當月釋放,那麼投入時間就是 釋放時間 - 到位時間 + 1。

2. 2018 年 8 月剛到,本月不釋放,那麼本月的投入時間就是 2018/8/31 - 到位時間 + 1。

3. 2018 年 8 月之前到位,本月釋放,那麼本月的投入時間就是 釋放時間 - 2018/8/1 + 1。

4. 2018 年 8 月之前到位,2018 年 8 月之後再釋放,那麼本月投入時間就是 8 月份的所有天數。

具體屬於那種情況,我們不需要逐一判斷,實際的投入天數,肯定是上面 4 種情況中的最小值。

也就得到 IF 函數條件為 False 時,取值為 MIN($C3-$B3+1,EOMONTH(H$1,0)-$B3+1,$C3-H$1+1,DAY(EOMONTH(H$1,0))),MIN裡面的 4 個值,分別對應上面所說的 4 種情況。

最後,再乘上一個投入佔比,就得到本月的投入天數。

【3】生成彙總行,包括總的人天,以及每個月的人天。

【4】統計每種類別的人員,所投入的總人天,以及每個月的人天。

第一步,創建一個 字典 d,獲取 類別 的清單,填在 E 列 rmax1+3 行,跟彙總行間隔一行。

字典的這種用法,在 E009 那期有相對詳細的介紹,這裡就不再重複。

第二步,用一個 SUMIF 公式,對各種類別進行統計,公式不難,難的是要把幾個變量融合進去,並且轉換為 R1C1 的樣式。建議先在 Excel 對應的位置,先把 A1 樣式的公式寫出來,再慢慢琢磨變量以及 R1C1 如何轉換——孰能生巧兮?熟能生巧也!

這樣,一個比較完整的項目投入數據就出來了。

關於曲線圖,雖然宏也有插入圖表的功能,但我研究了一段時間,找不到滿意的效果,還不如手動插入來得簡單(圖片我沒截,麻煩——

選擇 E12~E17,然後按住 Ctrl,複選 G12~P17,然後來到 插入 菜單,折線圖,先隨便選一個,生成。

選中剛生成的圖表,有個筆的圖標,點擊,有 樣式 和 顏色,任君選擇。

樣式滿意了,發現橫座標不滿意。

在圖表這裡點右鍵,選擇數據,在右邊 軸標籤(分類)這裡,有個編輯的圖標,點擊,彈出的窗口這裡選擇我們想要的座標標籤區域,回車,確定。

橫座標標籤就一下子改好了,剩下的,標題、顯示數據標籤什麼的,稍微調整一下就完事了。

零基礎學Excel VBA-WE014【項目人力投入曲線】


分享到:


相關文章: