我尝试使用多个if-then-else块,但出现了“ else without if”问题,然后我将其更改为以下代码,但它始终给出if值,它不会在第一个“ safe”值处退出
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
以下代码是最后一个的替代方法
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
ElseIf 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
ElseIf 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
ElseIf Range("AN" & i - 1) = "Safe" Then Range("AD" & i - 1).Value = 0.45
End If
但是在仅给出值0.35并且不寻找下一行之后退出
答案 0 :(得分:3)
这是您的原始代码缩进:
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