继续this主题,我想补充一个条件。我有以下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
天的日期属于start
和end
AND action
为SELL
,然后打印出-1
; target
天的日期属于start
和end
AND action
为BUY
,然后打印出1
; target
天不在start
和end
个日期范围内,则打印出0
; 任何指导/提示一如既往地受到赞赏。
答案 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))
答案 1 :(得分:0)
继续我对你引用的早期问题的答案的风格......
在输入表中添加index
列,其中包含值1,2,3,...表达式
=SUMPRODUCT((target>=start)*(target<=end)*index)
将指示target
所属的输入表格中的哪一行(如果有)。如果表达式返回值0,则target
不属于任何日期范围。表达式依赖于不重叠的日期范围(因此target
最多可以在1个日期范围内)。如果日期范围可以重叠,那么如果target
落在2个或更多日期范围内,则表达式将返回其所属范围的索引之和。这将是一个问题,因为,例如,您赢了&# 39;能够判断3的结果是否意味着target
落在第三个日期范围内,或者两个都落在前两个范围内。
使用此表达式的结果作为INDEX()
函数的第二个参数,其中第一个参数是action
范围。然后,根据target
日期是否在任何范围内的买入范围或卖出范围内,这将提供买入,卖出或#N / A.使用您想要的任何方法将这些结果转换为您想要的+1,-1和0。