Вот пользовательская функция, которая будет работать на основе вашего дизайна.Введите два соответствующих массива в первых двух параметрах, затем контрольную дату в третьем.Вы получите список дат РЕГИСТРАЦИИ, которые отмечают начало диапазона (ов), содержащих эту контрольную дату:
Option Explicit
Function DateCAT(RegisterRng As Range, ExitRng As Range, MyDt As Date) As String
Dim DtARR As Variant, D As Long
If RegisterRng.Cells.Count <> ExitRng.Cells.Count Then
DateCAT = "date ranges do not match"
Exit Function
End If
DtARR = Union(RegisterRng, ExitRng)
For D = LBound(DtARR) To UBound(DtARR)
If DtARR(D, 1) <= MyDt And DtARR(D, 2) >= MyDt Then
DateCAT = DateCAT & ", " & DtARR(D, 1)
End If
Next D
If DateCAT = "" Then
DateCAT = "none"
Else
DateCAT = Mid(DateCAT, 3, Len(DateCAT))
End If
End Function
= DATECAT (REGISTER.DT, EXIT.DT, MYDATE)
![enter image description here](https://i.stack.imgur.com/LYtiN.jpg)
Кстати, формулы, которые я использовал для REGISTER.DT и EXIT.DT, являются динамическими.
= СМЕЩЕНИЕ (Sheet1! $ A $ 1 ,,, COUNTA (Sheet1! $ A: $ A),)
= OFFSET (Sheet1! $B $ 1 ,,, COUNTA (Лист1! $ B: $ B),)
=========================== Эта версия похожа на COUNTIFS (), сначала вы помещаете диапазон для возврата, затем перечисляете пары значений ... диапазон, затем тест для этого диапазона, затем другой необязательный диапазон и тест, всего до 5.
= DATECAT (значения, TstRng1, Test1, OptTstRng2, OptTest2, OptTstRng3, OptTest3)
Option Explicit
Function DateCAT(RegisterRng As Range, RNG1 As Range, TST1 As String, _
Optional RNG2 As Range, Optional TST2 As String, _
Optional RNG3 As Range, Optional TST3 As String, _
Optional RNG4 As Range, Optional TST4 As String, _
Optional RNG5 As Range, Optional TST5 As String) As String
Dim D As Long, Bad As Boolean, i As Long
D = RegisterRng.Cells.Count
If RNG1.Cells.Count <> D Then Bad = True
If Not RNG2 Is Nothing Then If RNG2.Cells.Count <> D Then Bad = True
If Not RNG3 Is Nothing Then If RNG3.Cells.Count <> D Then Bad = True
If Not RNG4 Is Nothing Then If RNG4.Cells.Count <> D Then Bad = True
If Not RNG5 Is Nothing Then If RNG5.Cells.Count <> D Then Bad = True
If Bad Then
DateCAT = "data ranges do not match"
Exit Function
End If
For i = 1 To RNG1.Cells.Count
If WorksheetFunction.CountIf(RNG1.Cells(i), TST1) = 0 Then Bad = True
If Not RNG2 Is Nothing Then If WorksheetFunction.CountIf(RNG2.Cells(i), TST2) = 0 Then Bad = True
If Not RNG3 Is Nothing Then If WorksheetFunction.CountIf(RNG3.Cells(i), TST3) = 0 Then Bad = True
If Not RNG4 Is Nothing Then If WorksheetFunction.CountIf(RNG4.Cells(i), TST4) = 0 Then Bad = True
If Not RNG5 Is Nothing Then If WorksheetFunction.CountIf(RNG5.Cells(i), TST5) = 0 Then Bad = True
If Not Bad Then DateCAT = DateCAT & ", " & RegisterRng.Cells(i).Value
Bad = False
Next i
If DateCAT = "" Then
DateCAT = "none"
Else
DateCAT = Mid(DateCAT, 3, Len(DateCAT))
End If
End Function
Важно: при проверке именованного диапазона (одна ячейка, с 1 значением) вам нужно ввести TST1 и т. д. в качестве оператора и именованного диапазона: ">"&MYCELL
![enter image description here](https://i.stack.imgur.com/2UGIQ.jpg)