索引并与其他条件匹配(仅适用于Excel)

继续这个话题,我想补充一个条件。 我有以下startendaction列:

 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 

我也有从2007年4月1日至今天的target日(周末除外)。 我想要做以下事情:

  • 如果targetdate在startdate和enddate的范围内并且actionSELL ,则打印出-1 ;
  • 如果targetdate在startdate和enddate的范围内并且actionBUY ,则打印出1 ;
  • 如果targetdate不在startdate和enddate的范围内,则打印出0 ;

任何指导/技巧一如既往的赞赏。

我认为这个代码会帮助你解决问题

 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 

如果你只是需要excelfunction

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

继续回答你引用的前一个问题。

添加一个index列到您的input表,包含值1,2,3 …expression式=SUMPRODUCT((target>=start)*(target<=end)*index)将指示您的input表中的哪一行如果有的话)的target落入。 如果expression式返回值0,则target不在任何date范围内。 该expression式依赖于不重叠的date范围(以便target可以落入至多一个date范围内)。 如果date范围可以重叠,那么如果一个target落在2个或多个date范围内,则expression式将返回它所在范围的索引之和。这将是一个问题,因为,例如,您将无法告诉3的结果是否意味着target落在第三个date范围内或者前两个都是。

使用此expression式的结果作为INDEX()函数的第二个参数,其中第一个参数是action范围。 然后根据targetdate是否落入买入区间,卖出区间或不在任何区间内,交割买入,卖出或#N / A。 使用任何您想要的方法将这些结果转换为您想要的+1,-1和0。