检查date是否在某个范围内

我有类似的数据:

A1: ID B1: Start date C1: End Date 

我有另一个工作表(称为新),有

 A1: ID and B1: Date 

我需要知道新工作表中ID的date是否已经在前面的工作表中。 如果date是开始date,结束date或之间的任何内容,我希望它显示有一个已经存在的logging。

这里假设一些更实用的解决scheme

  • 具有ID,开始date,结束date(多行)的主表
  • 其他带有ID和date的表单(多行)
  • 使用用户定义函数(UDF)和ID单元作为input
  • 一个缺点是,如果其他工作表已经更新,您将需要“计算工作表”

示例截图:
公式Sheet1 D2: =FindDuplicates(A2)

工作表Sheet1Sheet2中表Sheet 3

代码模块:

 Option Explicit Function FindDuplicates(oRngID As Range) As String Dim sID As String, dStart As Date, dEnd As Date, lCount As Long, sWhere As String Dim oWS As Worksheet, oRngFound As Range, dFound As Date, sFirstFound As String sID = oRngID.Text dStart = oRngID.Offset(0, 1).Value dEnd = oRngID.Offset(0, 2).Value lCount = 0 sWhere = "" For Each oWS In ThisWorkbook.Worksheets ' Find all IDs in other worksheeets If oWS.Name <> oRngID.Worksheet.Name Then sFirstFound = "" Set oRngFound = oWS.Cells.Find(What:=sID) If Not oRngFound Is Nothing Then sFirstFound = oRngFound.Address ' Keep searching until the first found address is met Do ' Check the dates, only add if within the dates dFound = oRngFound.Offset(0, 1).Value If dStart <= dFound And dFound <= dEnd Then lCount = lCount + 1 If lCount = 1 Then sWhere = sWhere & lCount & ") '" & oWS.Name & "'!" & oRngFound.Address Else sWhere = sWhere & vbCrLf & lCount & ") '" & oWS.Name & "'!" & oRngFound.Address End If End If Set oRngFound = oWS.Cells.Find(What:=sID, After:=oRngFound) Loop Until oRngFound.Address = sFirstFound End If End If Next If lCount = 0 Then sWhere = "Not Found" FindDuplicates = Replace(sWhere, "$", "") ' Removes the $ sign in Addresses End Function 

所以,你有三个问题:

1)从另一个工作表中获取价值:

 Dim startDate As Date startDate = ActiveWorkbook.worksheets("OtherSheetName").cells(row,col).Value 

2)比较数据:

 If startDate <= actualDate And actualDate <= endDate Then ... Else ... End If 

3)设置单元格值:

 ActiveWorkbook.worksheets("SheetName").cells(row,col).Value = something 

结合这些步骤,你会得到解决你的问题。

我有点喜欢这个问题

我会这样做的方式是使用SUMPRODUCT()函数来检查多个标准(在这个网站上有许多参考文献,Google解释了这个标准是如何工作的)

在您的New工作表中,假设第一行用于标题,请在C2单元格中input以下公式:

 =SUMPRODUCT(--(Sheet1!$A$2:$A$180=A2),--((B2-Sheet1!$B$2:$B$180)>=0),--((Sheet1!$C$2:$C$180-B2)>=0)) > 0 

并将其拖放到整个范围(显然,调整180行参考以适合您的数据集)

基本上,你说的是:

 Give me a TRUE only if there is at least one row in my other sheet where: - The IDs match - [My Date] minus row's [Start date] >= 0 - Row's [End Date] - [My Date] >= 0 

希望是有道理的!