具有多个条件之间的日期的行(仅限excel)

时间:2017-07-31 13:00:23

标签: excel date conditional

我有Column A

str 11/9/2007
end 10/10/2008
str 11/14/2008
end 5/29/2009
str 11/27/2009
end 2/5/2010
str 10/8/2010
end 4/8/2011
str 4/29/2011
end 5/20/2011
str 7/8/2011
end 10/21/2011

Column B

9/6/2007
9/7/2007
9/10/2007
9/11/2007
9/12/2007
9/13/2007
9/14/2007
9/17/2007
9/18/2007
9/19/2007
9/20/2007
9/21/2007
9/24/2007
9/25/2007
9/26/2007
9/27/2007
9/28/2007
10/1/2007
10/2/2007
10/3/2007
10/4/2007
10/5/2007
10/8/2007
10/9/2007
10/10/2007
10/11/2007
10/12/2007
10/15/2007
10/16/2007

如果1日期位于Column BColumn B范围内,我希望在start旁边的列中插入endColumn A。所以预期的输出是这样的:

0
0
0
1
1
1
1
1
1
1
1
1
1
1

请提示?

2 个答案:

答案 0 :(得分:1)

Sub CheckingDates()
Dim Value1 As Date, Value2 As Date, Value3 As Date

For j = 1 To 12 Step 2
    For i = 1 To 29
        Value1 = Right(Range("A" & j), Len(Range("A" & j)) - 4)
        Value2 = Right(Range("A" & j + 1), Len(Range("A" & j + 1)) - 4)
        Value3 = Range("B" & i).Value
            If Value3 > Value1 And Value3 < Value2 Then
                Range("C" & i).Value = "1"
            End If
    Next i
Next j
End Sub

答案 1 :(得分:1)

设s(i)和e(i)表示您的开始和结束日期(i = 1,2,3,...,N)和目标日期。

你需要找出是否存在i的值,使得s(i)&lt; = t&lt; = e(i)。

您可以使用MATCH功能执行此操作。

s(i)和e(i)(i = 1,2,3,...,N)应按升序排列(按照评论者@pnuts的建议)。让StartEnd分别表示包含这些开始日期和结束日期列的范围。让Target表示目标日期,t。

=MATCH(Target,Start,1)返回Start内日期的索引,该日期是目标日期或之前的最新日期。因此,它返回索引的候选值,i使得s(i)<= t。剩下的就是测试该候选值的e(i)> = t,即

=INDEX(End,MATCH(Target,Start,1))>=Target

通常,如果存在i的值,则这将传递TRUE,否则s(i)&lt; = t&lt; = e(i)和FALSE。当目标日期t出现在第一个开始日期s(1)之前时,会发生这种情况的例外。在这种情况下,传递错误值#N/A。你可以使用IFERROR函数来识别这一点来代替FALSE,你可以将布尔值TRUEFALSE转换为你想要的0和1结果--(双重否定)操作。

重要的是,开始日期和结束日期按升序(最早的第一个)顺序排列。如果不是这个解决方案将不起作用。