they all take 3 mins to run.
Well... It's not the code. My code should not take more than a few milliseconds per "X".
Be sure and set Calculation to manual and Enable events to false. I left them out of my code.
you can pick up a Quite few CPU cycle by changing
If .Cells(4, iCol).Value > CLng(Now) + 3 Then
by Not computing CLng(Now) + 3, (and forcing VBA to convert numbers and dates,) every loop
Dim CheckValue as Date
CheckValue =  DateAdd("d", 3, Date)
'
'
If .Cells(4, iCol).Value > CheckValue Then 
'
'
'
If hours, minutes, and seconds are critical, change "Date" to "Now"