Microsoft Project (或 MSPROJ)是一個國際上享有盛譽的通用的項目管理工具軟件,凝集了許多成熟的項目管理現代理論和方法,可以幫助項目管理者實現時間、資源、成本計劃、控制。 用Project排定計劃時,通過簡單的升級和降級兩個操作就可以輕松地設置任務之間的層級關系,并且通過在【格式】菜單下勾選最右側的【大綱數字】,在任務名稱前面就會自動顯示任務的大綱數字了,這個功能非常實用,因為當任務較多時,真的很難分辨任務在哪個層級上。 ![]() 圖1 最近在學員群里有同學提了一個有意思的問題,他想讓計劃中的第一級任務顯示為里程碑0,然后它下面的任務比如1.1顯示為0.1,如圖2所示。也就是說,要讓所有任務的大綱數字統一降一級,即原來的1.1要顯示為0.1,原來的2.1要顯示為1.1,原來的3.1.1顯示為2.1.1,諸如此類。
圖2 那這個在Project中能不能實現呢? Project中的所有列分成兩類:預置列、自定義列。預置列的功能和數據格式及算法都已經被設定好了,我們如果想實現一些特殊的需求,只能想辦法通過自定義列來實現。 比如,任務的大綱數字統一降一級,我們就可以通過自定義列來間接實現。 假如說第一級的任務不多,且少于10個,就是說,【大綱級別】是1的一級任務最多有9個,其他任務都是二級、三級、四級等任務。(注意,即使計劃中有上千個任務,也有可能只有幾個一級任務) 由于只是降一級,所以我們只需要將【大綱數字】中的第一個字符降一級就解決了,比如原來有個任務的大綱數字是9.2.3.1,現在只需要將它的第一個字符減去1,變成8.2.3.1,就已經實現我們的目的了。 這里我們用到兩個函數。 LEFT(text,[num_chars]) 比如取A1單元中的第1個字符,就可以用公式LEFT(A1,1) MID(text,start_num,num_chars) 比如取A1單元格第1個字符后面的字符,就可以用公式MID(A!,2,10000) 注意MID函數第三個字段是代表字符串的長度,這里寫的10000,是因為一般的字符串也不會超過10000個字符,所以能涵蓋。 好了,我們需要用一個自定義列。在工作表區域點擊任意一列,鼠標右鍵選擇自定義字段,在彈出的自定義域窗口中,我們可以使用默認域類型【文本】,如圖3所示。隨便找一個文本列,比如文本7,給它重命名為“大綱數字統一降一級”,然后在自定義屬性中點擊【公式】。 公式設置為Left([大綱數字],1)-1 & Mid([大綱數字],2,10000) 這個公式中,&前面的公式是將大綱數字中的第一個字符的數字減去1,比如將大綱數字9.2.3.1中第1個字符“9”減去1,就得出8。&后面的公式是從大綱數字的第二位開始抽取字符,比如從大綱數字9.2.3.1的第2位開始抽取字符,就得出.2.3.1。&本身的意思是將前后兩部分的文本合并,這樣就得出8.2.3.1。你看通過這個公式,原來的大綱數字9.2.3.1就變成了8.2.3.1。 然后在自定義域窗口的計算工作分配行中,也要勾選【使用公式】,即摘要任務也使用剛才的公式。最后點擊自定義域窗口下方的【確定】。
圖3 返回到Project工作表中,點擊任何一列插入列【大綱數字】,再插入剛才自定義的那一列【文本7】或者它的新名字【大綱數字統一降一級】,如圖4所示。我們可以看到,現在已經將大綱數字的第一位減去1了,也就是給所有大綱數字降了一級。 ![]() 圖4 那么怎么讓任務名稱前顯示的大綱數字也像【文本7】列或者讓它降一級呢,我們再通過一個自定義列來實現。 點擊任何一列,鼠標右鍵選擇自定義字段,域類型還是使用默認的【文本】,隨便找一個文本列,比如文本8,給它重命名為“新任務名稱”,如圖5所示。然后在自定義屬性中,選擇使用公式,設置公式為 [文本7] & " " & [名稱]。 這個公式的意思是先顯示【文本7】的內容,即【大綱數字統一降一級】那一列的文本內容,然后顯示一個空格,再顯示【名稱】列的文本內容。 然后在計算任務和分組摘要行中也選擇使用公式,最后點擊自定義域窗口下方的【確定】。
圖5 返回到工作表中,點擊任何一列插入列【文本8】或者它的新名字【新任務名稱】,如圖6所示,這樣任務就顯示為,任務名稱+大綱數字統一降一級了。 ![]() 圖6 這樣就基本大功告成了。 想了解更多Project高手的秘密,上【網易云課堂】搜索“10天精通Project項目管理”或者“張連永”,全網最暢銷的Project視頻課程等著你。 喜歡看書的朋友,也可以在各電商平臺搜索“10天精通Project項目管理”,同樣能找到電子工業出版社發行的同名書籍,作者張連永。 不過不要高興的太早,上面這種方法是有局限的,它的局限在于,如果一級任務超過9個,即大綱級別為1的任務超過了9個,它就不靈了。比如有個任務的大綱數字為10.1,那么通過上面的公式,它在【大綱數字統一降一級】這一列中將顯示為00.1,因為我們用的公式,是將大綱數字這一列中的第一個字符減去1,那么當大綱數字為10.1時,它只將第一個字符1減去1,變成了00.1。 所以,如果一級任務超過9個的情況下,我們還需要另想辦法了。 比如我們可以在Project中,鼠標點中【大綱數字】列,然后按CTRL+C復制一下。再打開一個空白的Excel文件,直接CTRL+V粘貼過來,如圖7所示。
圖7 然后,我們在B列用LEFT函數取A列的第一個字符,見圖8. 然后在C列設置公式,用B列的數值減去1,見圖9。 再在D列用MID函數從A列第2個字符開始提取字符串,見圖10。 然后在E列,將C列和D列的文本合并,見圖11。
圖8
圖9
圖10
圖11 但是這種方式其實還是不行,對于大綱數字為10或10以上的,還是存在原來同樣的局限。比如圖12所示,原來的10.1并沒有顯示為9.1,而是現實為00.1
圖12 如果任務數量少,我們手動改一下就行了,如果任務確實很多很多,又特別想用某種方法批量讓大綱數字統一降一級,就得再想別的辦法。 我們來看一下大綱數字的規律,如果是一級任務,它將直接顯示為一個整數,沒有小數點。那么我們如果讓它統一降一級的話,直接減去1就可以了,比如原來的9變成8,原來的10變成9。 如果不是一級任務,那么大綱數字的字符中必然包含小數點“.”,比如1.2.1中就包含2個小數點“.”。 那么我們就可以總結如下規律
在Excel中有一個函數,可以判斷字符串中某個字符所在的位置,比如1.2.1中第一個小數點位于該字符串的第2位,我們就可以用函數FIND函數。 FIND(find_text,within_text,start_num) 第一個字段find_text,是指要查找的字符串,即關鍵字 第二個字段within_text,是指要查找關鍵字所在的單元格 第三個字段start_num,是指從該單元格字符串的第幾位開始查找,如果不輸入該函數的第三個字段,默認就是從第1位開始查找,即從最左側開始查找。 比如FIND(“.”,A1,1),就是從A1單元格第1個字符開始查找看小數點“.”在第幾位上。 我們在Excel的第F列輸入FIND函數,如圖13所示。比如A3單元格中的字符1.1,小數點“.”位于第2位,所以在F3單元格中返回結果為2。比如A2單元格中的字符1,不包含小數點“.”,所以在F2單元格中返回錯誤提示。 也就是說,如果在A列是一級任務的,那么在F列返回的是錯誤提示。如果在A列不是一級任務的,在F列返回的結果就是第一個小數點“.”位于第幾位上,返回結果為數值。
圖13 現在我們要做的工作是區分A列中的字符是否包含小數點,其實通過F列就可以判斷出來了,只要F列的結果為數字,那么就代表A列的字符中包含小數點。如果F列的結果是錯誤提示,就代表A列的字符中不包含小數點,也就是說它是一級任務。 在Excel中有一個函數,可以判斷字符是否為數字,這個函數是ISNUMBER。 ISNUMBER(value) 比如ISNUMBER(A1),如果A1單元格是數字,就返回TRUE,如果A1單元格不是數字,就返回FALSE。 我們在G列輸入ISNUMBER函數,如圖14所示。我們直接把F列的FIND函數也嵌套進去,即ISNUMBER(FIND(“.”,A2,1)),這個公式就可以判斷A列中是否包含小數點了。返回為TRUE的代表A列中包含小數點,比如G3單元格;返回為FALSE的代表A列中不包含小數點,比如G2單元格。
圖14 再次回顧之前總結的規律
就是兩種情形,一個帶小數點,一個不帶小數點,這樣我們就可以用一個IF函數來解決了。 我們現在將會用到以上所有提到的函數,再加上IF函數。 我們在H列輸入這個函數 =IF(ISNUMBER(FIND(".",A63,1))=FALSE,A63-1,LEFT(A63,FIND(".",A63,1)-1)-1&MID(A63,FIND(".",A63,1),10000)) 解釋為:如果A2單元格中不包含小數點“.”,那么直接用A2單元格的值減去1;如果A2單元格包含小數點,那么用A2單元格中第一個小數點“.”左側的數值減去1,再與第一個小數點“.”以及后面的字符進行合并。 如圖15所示。
圖15 好,我們將H列從H2開始的數據用CTRL+C復制一下。 然后返回Project文件,隨便插入一個文本列,比如【文本10】,然后用CTRL+V粘貼到【文本10】列中,如圖16所示。 ![]() 圖16 然后剩下的操作就可以參照本文圖5了。 在最新版本的Project中,微軟提供了更佳的用戶體驗。 |
溫馨提示:喜歡本站的話,請收藏一下本站!