Попробуйте сразу собрать его в массив, а затем сбросить значения обратно.
dim arr as variant, tmp as variant, i as long
with rngDestination
arr = .Range(rngDestination.Cells(1, 14), rngDestination.Cells(lastRow, 14)).value2
tmp = .Range(rngDestination.Cells(1, 5), rngDestination.Cells(lastRow, 5)).value2
for i =lbound(arr, 1) to ubound(arr, 1)
if cbool(len(arr(i, 1))) then
arr(i, 1) = int(arr(i, 1))
else
arr(i, 1) = vbnullstring
end if
next i
.Cells(1, 23).resize(ubound(arr, 1), ubound(arr, 1)) = arr
.Cells(1, 23).resize(ubound(arr, 1), ubound(arr, 1)).numberformat = "dd/mm/yyyy"
for i =lbound(arr, 1) to ubound(arr, 1)
arr(i, 1) = format(arr(i, 1), "dd/mm/yyyy") & tmp(i, 1)
next i
.Cells(1, 0).resize(ubound(arr, 1), ubound(arr, 1)) = arr
end with