Соберите двумерный массив, выключите ScreenUpdating и запишите блок. Даты в Value2 — числа; задайте NumberFormat после записи.
Записать массив на лист за одно действие
Выгрузка из кода по ячейкам занимает минуты.
Код
Sub WriteBlock(ws As Worksheet, startCell As Range, data As Variant)
Dim nRows As Long, nCols As Long
nRows = UBound(data, 1) - LBound(data, 1) + 1
nCols = UBound(data, 2) - LBound(data, 2) + 1
startCell.Resize(nRows, nCols).Value2 = data
End Sub