具有多个条件之间date的行(仅适用于Excel)

我有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 

如果Column Bdate位于Column A任何startend范围内,我想在Column B旁边的列中插入1 。 所以预期的输出是这样的:

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

请提供任何提示?

设s(i)和e(i)分别表示你的开始和结束date(i = 1,2,3,…,N)和目标date。

你需要find是否存在一个值,使得s(i)<= t <= e(i)。

您可以使用MATCHfunction来执行此操作。

s(i)和e(i)(i = 1,2,3,…,N)应该按照列中的顺序排列(如评论者@pnuts所build议的)。 让“ Start和“ End分别表示包含这些开始和结束date列的范围。 让Target表示一个目标datet。

=MATCH(Target,Start,1)返回=MATCH(Target,Start,1)中的date索引,即Start Time中的最后date。 所以它为索引返回一个候选值,例如s(i)<= t。 剩下的就是testing这个候选值是否e(i)> = t,即

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

一般来说,如果存在s(i)<= t <= e(i)的值,则它将传递TRUE ,否则将返回FALSE 。 当目标datet发生在第一个开始dates(1)之前时,会发生这种情况。 在这种情况下,传送错误值#N/A 您可以使用IFERROR函数来捕获这个函数以提供FALSE ,您可以使用通常的-- (双重否定)操作将布尔值TRUEFALSE转换为您正在查找的0和1结果。

开始date和结束date按升序(最早的第一个)排列是很重要的。 如果不是这种解决scheme将无法正常工

 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