Это ваш исходный код с отступом:
Sub Test()
Range("AD" & i - 1).Select
Range("AD" & i - 1).Value = 0.3
If Range("AN" & i - 1) = "Safe" Then
Range("AD" & i - 1).Value = 0.3
ElseIf Range("AN" & i - 1) = "Not Safe" Then
Range("AD" & i - 1).Value = 0.35
End If
If Range("AN" & i - 1) = "Safe" Then
Range("AD" & i - 1).Value = 0.35
ElseIf Range("AN" & i - 1) = "Not Safe" Then
Range("AD" & i - 1).Value = 0.4
End If
If Range("AN" & i - 1) = "Safe" Then
Range("AD" & i - 1).Value = 0.4
ElseIf Range("AN" & i - 1) = "Not Safe" Then
Range("AD" & i - 1).Value = 0.45
End If
If Range("AN" & i - 1) = "Safe" Then
Range("AD" & i - 1).Value = 0.45
ElseIf Range("AN" & i - 1) = "Not Safe" Then
Range("AD" & i - 1).Value = 0.5
End If
End Sub
Этот код можно преобразовать в этот:
Sub Test2()
Range("AD" & i - 1) = 0.3
If Range("AN" & i - 1) = "Safe" Then
Range("AD" & i - 1).Value = 0.3
Range("AD" & i - 1).Value = 0.35
Range("AD" & i - 1).Value = 0.4
Range("AD" & i - 1).Value = 0.45
ElseIf Range("AN" & i - 1) = "Not Safe" Then
Range("AD" & i - 1).Value = 0.35
Range("AD" & i - 1).Value = 0.4
Range("AD" & i - 1).Value = 0.45
Range("AD" & i - 1).Value = 0.5
End If
End Sub
Как видите, вы проверяете только значение для Range("AN" & i - 1)
, и вы только проверяете, безопасно это или нет. Итак, что будет делать преобразованный код? Если это безопасно, будет:
Range("AD" & i - 1).Value = 0.3
Range("AD" & i - 1).Value = 0.35
Range("AD" & i - 1).Value = 0.4
Range("AD" & i - 1).Value = 0.45
Это означает, что значение для Range("AD" & i - 1)
будет последним, потому что VBA будет работать построчно.
То же самое произойдет, если это небезопасно.
Итак, вам нужно проверить разные условия, или проверить разные ячейки, или присвоить значение разным ячейкам.
Изменить: Что касается комментария и цели OP, это должно помочь:
Sub Test2()
'Here we have the values that we will input to turn the cell AN Safe
'If needed you can change (1 to 4) to (1 to x) yo increment or decrement the values
Dim Values(1 To 4) As Single
'here we populate the array with the values:
Values(1) = 0.35
Values(2) = 0.4
Values(3) = 0.45
Values(4) = 0.5
'A Range variable to loop through the cells in column AD from row 13 to the last
Dim C As Range
Dim i As Long
With ThisWorkbook.Sheets("Med Drain - 246 to 264 Km")
For Each C In .Range("AD13", .Cells(.Rows.Count, "AD").End(xlUp))
'Here we check if AN is safe or empty to ignore the row if true
If .Cells(C.Row, "AN") = vbNullString Or .Cells(C.Row, "AN") = "Safe" Then GoTo SkipRow
'Now we loop through the values inside the Values array and change the AD cell value
For i = LBound(Values) To UBound(Values)
'Change AD Value for the first in our array
C = Values(i)
'Recalculate the formulas
.Calculate
'If AN is now Safe then we exit this inner loop
If .Cells(C.Row, "AN") = "Safe" Then Exit For
Next i
SkipRow:
Next C
End With
End Sub