2017-08-01 85 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。