2014-11-24 63 views
0

我是新來的Stackoverflow,所以請讓我知道如果沒有足夠的信息。過去我通過使用StackOverflow獲得了許多有益的見解,但是我找不到任何有用的線索,所以我希望你能幫助我。使用sumproduct Excel 2013高級日期範圍查找

我一直在一個excel(2013)問題一段時間了。我試圖建立一個營銷議程來存儲和跟蹤我們的郵件活動。活動本身是通過另一個系統發送的,但我們錯過了提前計劃我們的郵件活動的能力。由於我們活躍於歐洲的不同市場,因此我們決定發佈一個普通郵件(針對所有地區)和針對特定地區的郵寄活動(兩者都在同一議程中)。除此之外,我們還希望展示郵件重點(不同品牌)。我的想法是儘可能地將其視爲可視的(以使其適用於所有用戶)。我添加了一張小圖片來顯示我想要的最終結果(但此時沒有任何數據)。

此時,用戶要使用一個(谷歌)的形式進入活動信息並將此數據被下載到工作表(這樣做的所有用戶可以添加新的廣告活動,每個人總有進入最最近的數據)。這部分運作良好。

我正在使用助手錶來檢查日期是否屬於廣告系列範圍,如果確實屬於廣告系列範圍,它應該返回郵寄ID(也是行號)。我有另一種形式使用這些數據來搜索正確的品牌並以可視化方式顯示(使用大量條件格式)。

問題出現在輔助工具表中(當我檢查日期是否屬於活動範圍時)。我已經能夠用下面的公式得到它的工作(或多或少):

=IF(SUMPRODUCT(--(CountryHelper!$C$2:$C$100<=$B4);--(CountryHelper!$D$2:$D$100>=$B4);RIJ(CountryHelper!$C$2:$C$100))=0;"";INDEX(CountryHelper!$A$2:$A$100;SOMPRODUCT(--(CountryHelper!$C$2:$C$100<=$B4);--(CountryHelper!$D$2:$D$100>=$B4);ROW(CountryHelper!$A$2:$A$100)))) 

在這個公式中,CountryHelper!C:C被引用的郵件campaing的起始日期。 D:D將引用EndDates的列,並且A:A具有郵寄ID。單元格B4是需要檢查的日期。

起初它看起來很完美。如果日期落在日期範圍內,則會返回該ID。稍微玩了一下後,這個問題就暴露出來了。它只適用於不重疊的日期,一旦日期重疊excel會將行號添加到一起,它不會再工作。

是否有可能獲得sumproduct配方工作並返回第一個ID。我知道我必須再製作2個返回第二和第三個ID的公式(我確定我們沒有超過3個重疊日期)。這也是我迷失方向的一部分。我試圖使用MIN和MAX變化機智以下SUMPRODUCT式:

=SUMPRODUCT(--(CountryHelper!$C$2:$C$100<=$B4);--(CountryHelper_RSEU!$D$1:$D$100>=$B4);ROW(CountryHelper!$C$1:$C$100)) 

這將返回0(與MIN)或100(最大)。我認爲這是由公式引起的(目前它只搜索前99行)。我也冒險進入VBA/UDF來完成這項工作,但據我所知,這是不可能的。

無論如何,我對這個漫長的故事感到抱歉,我希望我的問題很明確,你可以幫助我。如果您需要更多信息。

謝謝!

empty Marketing Agenda overview

回答

1

的SUMPRODUCT是一種瑞士軍刀Excel函數的。但是在這裏它是錯誤的,因爲正如你已經看到的那樣,它最終真的會計算一個SUM。大多數情況下,它的工作原理是首先將0或1的條件與行號相乘,因此只有符合條件的行號纔會進入總和。但是如果兩個或更多的行號滿足條件,那麼它們被加在一起。你對數組公式有興趣嗎?以下數組公式應該是你想要的東西:

{=INDEX(CountryHelper!$A$2:$A$100;MIN(IF((CountryHelper!$C$2:$C$100<=$B4)*(CountryHelper!$D$2:$D$100>=$B4);ROW(CountryHelper!$A$2:$A$100)-1)))} 

要創建一個數組公式把公式進入細胞,而不大括號,然後按[Ctrl] + [SHIFT] + [Enter]鍵。然後花括號應該自動出現。

工作原理:

{IF((CountryHelper!$C$2:$C$100<=$B4)*(CountryHelper!$D$2:$D$100>=$B4);ROW(CountryHelper!$A$2:$A$100)-1)} 

獲取行號或一個陣列FALSE {FALSE,ROWNUMBER,FALSE,...}。如果兩個條件都滿足,那麼它得到的行號 - 1,如果不是那麼它會得到FALSE。 MIN函數然後從此數組中獲取最小(行號-1)。 然後INDEX表示滿足條件的最小(行號-1)。

它從行號減1,因爲您的INDEX範圍從第2行開始。如果第2行滿足條件,那麼它是該範圍內的索引1,如果第3行滿足條件,則它是索引2等等。

爲什麼它只能用作數組公式?因爲IF函數默認不會創建數組,即使它們的「Value_if_true」是一個範圍。在數組上下文中,它確實如此。

+0

嗨阿克塞爾,非常感謝您的快速回復。您的解決方案運作良好這種情況下使用數組公式的區別是什麼?我對數組公式還是有點新的。 – Martijn 2014-11-24 12:44:14

+0

請參閱我編輯的答案。 – 2014-11-24 13:35:57

+0

嗨Axel,非常感謝,這解釋了很多關於數組公式如何工作以及Excel如何處理它們的信息。無論如何,再次感謝,祝你有美好的一天! – Martijn 2014-11-24 14:00:37