Лучше всего использовать переменные, которые что-то значат, и избегать использования скобок для диапазонов. Вы не можете проверить логи c, если не можете определить диапазон. Ваш лог c не проверяет, есть ли дата, превышающая вашу начальную точку, или дата уже существует в диапазоне. Это отправная точка, и вы можете изменить ее, чтобы протестировать другие логи c, но это не даст вам ошибки.
Sub DateLoopTest()
Dim LC As Long
Dim MaxDate As Date
Dim TargetDate As Date
LC = Cells(2, Columns.Count).End(xlToLeft).Column
Dim HdrRng As Range
Set HdrRng = Range(Cells(2, 2), Cells(2, LC))
MaxDate = WorksheetFunction.Max(HdrRng)
TargetDate = Cells(1, 2)
i = 2
If TargetDate < MaxDate And WorksheetFunction.CountIf(HdrRng, TargetDate) = 0 Then
Do Until TargetDate > Cells(2, i)
i = i + 1
Loop
Cells(2, i).EntireColumn.Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
Cells(2, i).Offset(0, 1) = TargetDate
ElseIf WorksheetFunction.CountIf(HdrRng, TargetDate) > 0 Then
Z = HdrRng.Find(TargetDate).Column
Cells(2, Z + 1).EntireColumn.Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
Cells(2, Z + 1) = TargetDate
End If
End Sub