索引并匹配附加条件(仅限excel)

时间:2017-08-01 04:03:19

标签: excel date conditional

继续this主题,我想补充一个条件。我有以下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天(前周末)。我想做以下事情:

  • 如果target天的日期属于startend AND actionSELL,然后打印出-1;
  • 如果target天的日期属于startend AND actionBUY,然后打印出1;
  • 如果target天不在startend个日期范围内,则打印出0;

任何指导/提示一如既往地受到赞赏。

2 个答案:

答案 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。