Если вы работаете с диапазонами более нескольких ячеек и не нуждаетесь в изменении ячеек, всегда рассматривайте возможность извлечения значений в массив и работайте с этим: взаимодействие между кодом и рабочим листом относительно (очень) дорого. Если вы работаете со сборкой .NET, это удваивается (может быть, в три раза, а может и больше), потому что есть еще несколько шагов, связанных с циклом.
В VBA примерно так:
Dim vals As Variant
Dim row As Long, col As Long
vals = Range("A1:Z100") ' or whatever
For col = UBound(vals,2) To LBound(vals,2) Step -1
For row = UBound(vals) To LBound(vals) Step -1
DoSomethingInterestingWith vals(row, col)
Next
Next