2017-08-01 86 views
0

繼續this話題,我想補充一個條件。我有以下startendaction列:索引和附加條件匹配(僅限excel)

11/9/2007 10/10/2008 SELL 
11/14/2008 5/29/2009 BUY 
11/27/2009 2/5/2010 SELL 
10/8/2010 4/8/2011 SELL 

我也有target天(前週末)起,從2007年4月1日到今天。我想做到以下幾點:

  • 如果target天是在startend日期 actionSELL的範圍內,然後打印出-1;
  • 如果target天是在startend日期 actionBUY的範圍內,然後打印出1;
  • 如果target天是不是在startend日期的範圍,然後打印出0;

任何指導/技巧一如既往的讚賞。

回答

2

我覺得這個代碼將有助於你的問題

Dim dStart As Date 
Dim dEnd As Date 
Dim dDate As Date 
Dim iCol As Integer 

iCol = 2 

Do While Cells(iCol, 2).Value <> "" 
    dStart = Format(Cells(iCol, 2).Value, "mm/dd/yyyy") 
    dEnd = Format(Cells(iCol, 3).Value, "mm/dd/yyyy") 
    if dDate > dStart and dDate < dEnd then 
     if Cell(iCol,4).Value = "SELL" then 
      printout -1 
     else 
      printout 1 
     end if 
    else 
     printout 0 
    end if 
    iCol = iCol + 1 
Loop 

如果你只是只需要Excel函數

=IF(AND(J3 >= F3,J3 <= G3, H3="SELL"),-1,IF(AND(J3 >= F3,J3 <= G3, H3="BUY"),1,0)) 
+0

我希望我可以使用VBA。這只是優秀的...無論如何,+1。 – AK88

+0

@ AK88如果您只需要excel功能,請再次查看答案上面的 – hung34k

+0

就可以了,一會兒就會查。謝謝。 – AK88

0

繼續在我的答案上的樣式,你提到的早期問題...

index列添加到包含值1,2,3,...的輸入表中。表達式 =SUMPRODUCT((target>=start)*(target<=end)*index)將指示target所在的輸入表(如果有的話)中的哪一行。如果表達式返回值0,則target不在任何日期範圍內。該表達式依賴於不重疊的日期範圍(因此target最多可以落入一個日期範圍內)。如果日期範圍可以重疊,那麼如果一個target落在2個或更多日期範圍內,則表達式將返回它所處範圍的索引之和。這將是一個問題,因爲例如,您將無法告訴3的結果是否意味着target落在第三個日期範圍內或者前兩個都是。

使用此表達式的結果作爲INDEX()函數的第二個參數,其中第一個參數是action範圍。然後根據target日期是否落入買入區間,賣出區間或不在任何區間內,交割買入,賣出或#N/A。使用任何你想要的方法將這些結果轉換爲你想要的+1,-1和0。