2017-01-04 56 views
0

我有一個特定的數據集,它包含我們公司的項目信息。每個項目都可以通過五種不同的狀態,並且我們有一個列記錄每個日期項目被放入特定狀態。Excel Forumla/VBA跳過空白列進行計算

現在爲Excel部分。我們試圖計算每種狀態下的日期並找出總的項目時間。總之很容易,因爲我可以在項目提交日期和項目上線日期之間使用網絡日期。然而,狀態會給我帶來問題,因爲有時項目會跳過狀態,而使日期字段爲空。那麼會發生什麼情況是項目從狀態B轉到狀態D,狀態「B」中天數的公式在列「C」中查找日期以用作NETWORKDAYS公式中的第二個日期。當它爲空時,IF參數告訴公式使用TODAY()作爲第二個日期。我需要做的是搜索右邊的列(在該行的A:E的給定範圍內),並使用該日期(如果存在)。如果不是,那麼它可以默認爲TODAY(),因爲這將是一個尚未開啓的「活動」項目。

=IF(IF(OR([@STALLED]<>"",[@CANCELED]<>""),"",IF([@INTAKEDATE]="","",IF([@SCOPEATE]="",NETWORKDAYS([@INTAKEDATE],TODAY()),(NETWORKDAYS([@STATUSADATE],[@SCOPEATE])))))<0,"",(IF(OR([@STALLED]<>"",[@CANCELED]<>""),"",IF([@INTAKEDATE]="","",IF([@SCOPEATE]="",NETWORKDAYS([@INTAKEDATE],TODAY()),(NETWORKDAYS([@STATUSADATE],[@SCOPEATE]))))))) 

這是每個狀態的這樣做的表看起來是這樣的:

專案編號PROJECTNAME INTAKEDATE SCOPEATE創建日期TESTDATE GOLIVEDATE INTAKEDAYS SCOPEDAYS BUILDDAYS TESTDAYS

如果有任何宏觀或更好的公式有人可以幫我弄清楚,我會很感激。還有另外一個領域給出了當前的狀況,或者如果項目被認爲是現場的,如果這有幫助的話。我現在擅長阻止,不能想到任何有意義的東西。

+0

我還沒有考慮過使用'MAX',但我認爲在我的情況下,我需要使用'MIN',因爲如果它跳過下一個即時狀態日期,那麼日子就會歪斜。但也許這樣的事情應該是這樣的: SCOPEDAYS: = IF(IF(OR([@ STALLED] <>「」,[@ CANCELLED] <>「」),「」,IF([@ BUILDDATE] =「」 ,NETWORKDAYS([@ SCOPEDATE],MIN([@創建日期]:[@ GOLIVEDATE],(NETWORKDAYS([@ STATUSADATE],[@ SCOPEATE])))))<0 「」,(IF(OR([@ STALLED] <> 「」,[@取消] <> 「」), 「」,IF([@ INTAKEDATE] = 「」, 「」,F([@創建日期] = 「」,NETWORKDAYS([@ SCOPEDATE] MIN([@創建日期]:[@ GOLIVEDATE]))))))) – andresej21

回答

0

所以我想通了MIN和調整IF公式一點點。無論是之前發佈的關於MAX的那些人,真的幫助我走出這條道路。尊敬你先生/女士。

我不得不添加檢查SCOPEDATE = BUILDDATE,因爲如果日期匹配,沒有它返回1,與從INTAKEDATE運行網絡日期到GOLIVEDATE相比,增加了一天。

=IF(OR([@STALLED]<>"",[@CANCELED]<>""),"", 
    IF([@SCOPEDATE]="","", 
    IF([@SCOPEDATE]=[@BUILDDATE],0, 
    IF(NETWORKDAYS([@SCOPEDATE],(MIN([@BUILDDATE],[@TESTDATE],[@GOLIVEDATE])))<0,NETWORKDAYS([@SCOPEDATE],TODAY()),NETWORKDAYS([@SCOPEDATE],(MIN([@BUILDDATE],[@TESTDATE],[@GOLIVEDATE]))))))) 

我希望這對別人有幫助。