索引并与其他条件匹配(仅适用于Excel)
继续这个话题,我想补充一个条件。 我有以下start
, end
和action
列:
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
日(周末除外)。 我想要做以下事情:
- 如果
target
date在start
date和end
date的范围内并且action
是SELL
,则打印出-1
; - 如果
target
date在start
date和end
date的范围内并且action
为BUY
,则打印出1
; - 如果
target
date不在start
date和end
date的范围内,则打印出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
范围。 然后根据target
date是否落入买入区间,卖出区间或不在任何区间内,交割买入,卖出或#N / A。 使用任何您想要的方法将这些结果转换为您想要的+1,-1和0。