I'm fairly sure I understood what you wanted from msg#3.
The following macro works in your latest sample file and places the dates in columns G:H so that they can be compared to your expected values in columns D:E.
They're all the same except where you've made a mistake in D12 and where some dates in those columns contain a time element.
This macro is unlikely to work on real data; I've used your blank rows to delineate different people and assumed each persons data is already sorted on column B or C.
I'm not proud of this macro - I put it together in haste - it would need a lot of tweaking to make it more efficient, perhaps (if there are thousands of rows) doing ALL the processing in memory and only writing once to the sheet.
I wasn't going to invest serious time in doing this since I feel your file is not anywhere near true-to-life.
However, it does contain a methodolgy for doing what you want and maybe that's all you need.
If you want more, then review the requests in msgs #4,5 and 6.
Sub blah()
With ActiveSheet
Set DataArea = Intersect(.UsedRange, .Range("A2:C" & .Rows.Count))
For Each are In DataArea.Columns(1).SpecialCells(2).Areas
lastRowOfBlock = are.Row + are.Rows.Count - 1
Set BlockStart = are.Cells(1)
Set BlockEnd = are.Cells(1)
If are.Rows.Count > 1 Then 'several rows in the block:
For Each cll In are.Resize(are.Rows.Count - 1).Cells
If cll.Offset(1, 1).Value - cll.Offset(, 2).Value > 1 Then
'end of contiguity:
Set BlockEnd = cll
'place values on the sheet:
Range(BlockStart, BlockEnd).Offset(, 6).Value = Application.Min(Range(BlockStart, BlockEnd).Offset(, 1))
Range(BlockStart, BlockEnd).Offset(, 7).Value = Application.Max(Range(BlockStart, BlockEnd).Offset(, 2))
'set for next block:
Set BlockStart = cll.Offset(1)
Set BlockEnd = cll.Offset(1)
If cll.Row + 1 >= lastRowOfBlock Then 'it's the last row of the block:
'place values on the sheet:
Range(BlockStart, BlockEnd).Offset(, 6).Value = Application.Min(Range(BlockStart, BlockEnd).Offset(, 1))
Range(BlockStart, BlockEnd).Offset(, 7).Value = Application.Max(Range(BlockStart, BlockEnd).Offset(, 2))
End If
Else
'contiguous:
Set BlockEnd = cll.Offset(1)
If cll.Row + 1 >= lastRowOfBlock Then 'it's the last row of the block:
'place values on the sheet:
Range(BlockStart, BlockEnd).Offset(, 6).Value = Application.Min(Range(BlockStart, BlockEnd).Offset(, 1))
Range(BlockStart, BlockEnd).Offset(, 7).Value = Application.Max(Range(BlockStart, BlockEnd).Offset(, 2))
End If
End If
Next cll
Else 'only one row in the block:
'place values on the sheet:
Range(BlockStart, BlockEnd).Offset(, 6).Value = Application.Min(Range(BlockStart, BlockEnd).Offset(, 1))
Range(BlockStart, BlockEnd).Offset(, 7).Value = Application.Max(Range(BlockStart, BlockEnd).Offset(, 2))
End If
Next are
End With
End Sub