Для каждого цикла в Excel VBA завершается только после двух итераций

#excel #vba #for-loop

#excel #vba #for-цикл #предначертание

Вопрос:

Я написал очень маленький макрос, который должен запускать формулу VLOOKUP для диапазона ячеек, если ячейка в следующем столбце пуста.

Моя проблема в том, что я запускаю For Each цикл, и он работает, но после 2 итераций макрос завершается. Предполагается, что он продолжает проверять каждую ячейку.

 Sub copyFormula()

Dim i As Long
Dim cell As Variant

i = 4

For Each cell In Sheets

cell = Range("B" amp; i)

    If Not (IsEmpty(cell)) Then
     Range("C" amp; i).FormulaR1C1 = "=VLOOKUP(RC[-2],Locations!C[-2]:C[-1],2,FALSE)"
     Else: Range("B" amp; i).Offset(1, 0).Activate
    End If
    
    i = i   1
    
Next cell

End Sub
 

Вот как выглядит рабочая тетрадь:

введите описание изображения здесь

Комментарии:

1. Это потому, что вы cell представляете листы, а не ячейки. Вы просматриваете каждый лист. Кроме того, вы не захотите перебирать каждую ячейку на листе. Вы должны указать точный диапазон, который вы хотите выполнить.

2. Не могли бы вы посоветовать, пожалуйста, что мне нужно добавить или изменить, чтобы устранить эту проблему — ссылаться на листы вместо ячеек?

Ответ №1:

Этот код будет проходить по каждой ячейке активированного листа в диапазоне B4:B100 . Если он пуст , он добавит формулу в столбец C .

 Sub copyFormula()

Dim cell As Range

For Each cell In ActiveSheet.Range("B4:B100")
  If Not (IsEmpty(cell)) Then
    cell.Offset(, 1).FormulaR1C1 = "=VLOOKUP(RC[-2],Locations!C[-2]:C[-1],2,FALSE)"
  End If
Next

End Sub