2013-09-26 71 views
1

我有一個Google電子表格,它維護事件的歷史記錄以及事件發生日期,如下所示(B列爲開始日期,C列爲結束日期) :日期範圍與一組其他日期範圍之間的累積重疊天數

Sheet A 
| | A  | B   | C   | 
|1| Event1 | 1/15/2013 | 2/20/2013 | 
|2| Event2 | 3/1/2013 | 3/10/2013 | 
|3| Event3 | 5/7/2013 | 5/9/2013 | 

我想要做的就是能夠找出在給定另一個日期範圍的情況下,與這些事件之間有多少重疊的天數。例如,如果我的日期範圍爲2/1/2013至3/15/2013,那麼計算應該能夠確定與Event1有20天的重疊,與Event2有10天的重疊,以及0天與Event3重疊。把它放在一起,我要顯示的值是30。

下面是表示欲計算作爲列C爲一對夫婦例如日期範圍的值的示例第二片:

Sheet B 
| | A   | B   | C | 
|1| 2/1/2013 | 3/15/2013 | 30 | 
|2| 3/20/2013 | 3/25/2013 | 0 | 
|3| 5/1/2013 | 5/7/2013 | 1 | 

問題我我的意思是,雖然我可以編寫單元格表達式來顯示SUM和FILTER幾乎可以讓我到達那裏,但我嘗試的最後一步(我嘗試了很多方法來實現它)似乎總是減少我的計算將所有事件都彙總爲單個標量,然後才能對每個事件進行彙總。

例如,如果我寫類似的下面表B的C1小區作爲一個步驟,以找出如何計算這樣的:

=SUM(MIN(B1,'Sheet A'!C:C) - MAX(A1,'Sheet A'!B:B)) 

然後SUM清楚地包括其中事件沒有負值與所討論的時間段重疊。 (您可以調整公式並將其展開爲表A的每一行以查看未取整的值。)

但是,如果我嘗試使用類似下面的內容過濾出那些不相交的行,我只會得到一個' #N/A'結果。我猜這是因爲過濾器功能不喜歡使用被總結的價值觀和標準的相同的範圍,但是這只是一個猜測:

=SUM(FILTER(MIN(B1,'Sheet A'!C:C)-MAX(A1,'Sheet A'!B:B) ; MIN(B1,'Sheet A'!C:C)>MAX(A1,'Sheet A'!B:B))) 

如果我不是嘗試使用MAX( )函數或IF()來清除非相交行產生的負值,SUM返回0.我認爲這是因爲MAX和IF正在減少我想要求和的數據範圍標量變量在求和之前完成。即SUM()在單個標量上運行。

=SUM(MAX(0, MIN(B1,'Sheet A'!C:C) - MAX(A1,'Sheet A'!B:B))) 

=SUM(IF(MIN(B1,'Sheet A'!C:C)>MAX(A1,'Sheet A'!B:B), MIN(B1,'Sheet A'!C:C) - MAX(A1,'Sheet A'!B:B), 0)) 

任何想法如何計算我想要什麼?我唯一的想法是將Sheet A分解出來,以便每一行只覆蓋一天。然後找到相交日期的總和應該更容易一些,但爲Sheet A添加新事件的努力卻非常大。

回答

0

嘗試了許多不同的方式讓Google電子表格允許IF列,MAXs,MINs,SUMs,FILTERs,SUMIFs,ARRAYFORUMLAs等在柱狀範圍內每行進行評估(多個單列範圍涉及calc,但它們都是相同的大小,如果我可以讓Google將每行視爲數據庫入口類型的東西,那麼它們都應該工作),我放棄並重構了我的事件表,以便一個事件跨越多行,每個事件排代表一個日曆日。也就是說,上述表A現在的樣子:

Sheet A 
| | A  | B   | 
|1 | Event1 | 1/15/2013 | 
... 
|17|  | 1/31/2013 | 
[18|  | 2/1/2013 | 
... 
|38|  | 2/20/2013 | 
|39| Event2 | 3/1/2013 | 
... 
|49|  | 3/10/2013 | 
|50| Event3 | 5/7/2013 | 
|51|  | 5/8/2013 | 
|52|  | 5/9/2013 | 

這樣,沒有複雜的範圍VS基於事件當天是否是內查詢範圍外期間的工作範圍相交計算這樣一個簡單的過濾器()。