#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