Для массивов f и g мы могли бы просто сделать следующее:
np.pad(np.diff(np.array(f > g).astype(int)), (1,0), 'constant', constant_values = (0,))
Это даст массив всех точек кроссовера. Каждый 1 - это кроссовер снизу вверх и каждый -1 - кроссовер сверху вниз.
У вас есть формулы и, возможно, даже внешние ссылки? Тогда, пожалуйста, попробуйте это:
ActiveWorkbook.UpdateLinks = xlUpdateLinksNever
ActiveWorkbook.UpdateRemoteReferences = False
Application.Calculation = xlManual
ActiveSheet.Columns("E:E").Cut
ActiveSheet.Columns("C:C").Insert Shift:=xlToRight
ActiveWorkbook.UpdateLinks = xlUpdateLinksAlways
ActiveWorkbook.UpdateRemoteReferences = True
Application.Calculation = xlCalculationAutomatic
' If it's faster, then uncomment following line additionally
' Application.CalculateFull