Код работает нормально, но не так, как вы предполагали. Это наиболее вероятно, потому что вы использовали неявную ссылку на лист;
LR = Cells(Rows.Count, 1).End(xlUp).Row
В строке выше будет взята последняя использованная строка из текущего активного листа, поэтому указанную выше строку также можно прочитать как LR = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
То же самое произойдет с такими вещами, как Cells(i, 8).Value
и Cells(i, 13).Value = (Cells(i, 12).Value - Cells(i, 11).Value)
, которые будут читаться как ActiveSheet.Cells(i,8).Value
и т. Д.
Явная ссылка будет включать лист, на который вы хотите сослаться. Так, например: LR = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
Чтобы предотвратить многократное повторение ссылки на одну и ту же таблицу, я бы рекомендовал использовать оператор With
, чтобы сделать ваши ссылки явными:
Dim LR As Long i as long
With Sheet1 'Change according to your sheets CodeName
LR = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To LR
If .Cells(i, 8).Value <> "" Then
.Cells(i, 13).Value = .Cells(i, 12).Value - .Cells(i, 11).Value
End If
Next i
End with
Еслиэто все равно не запустит ваш цикл, вам придется проверить ваш первый столбец, чтобы увидеть, есть ли реальные данные за строкой 2.