Vba 对于下一步包含If-Then语句,是否有更有效的方法?
我正在提高两个宏的效率。除了标题上描述的方法外,我还设法改进了他们的所有方法。它功能齐全,但我相信有更好的方法来纠正我在下面提供的代码部分:Vba 对于下一步包含If-Then语句,是否有更有效的方法?,vba,excel,for-loop,if-statement,Vba,Excel,For Loop,If Statement,我正在提高两个宏的效率。除了标题上描述的方法外,我还设法改进了他们的所有方法。它功能齐全,但我相信有更好的方法来纠正我在下面提供的代码部分: For Each cell2 In Range("L2:L" & lastrow2) If Not cell2.Offset(0, -1).Value = 0 Then If cell2.Offset(0, -5).Value = "SOCHACZEW" Then cell2.Value = 31.2 ElseIf ce
For Each cell2 In Range("L2:L" & lastrow2)
If Not cell2.Offset(0, -1).Value = 0 Then
If cell2.Offset(0, -5).Value = "SOCHACZEW" Then
cell2.Value = 31.2
ElseIf cell2.Offset(0, -5).Value = "SEKERPINAR" Then
cell2.Value = 33
ElseIf cell2.Offset(0, -5).Value = "ATHENS" Then
cell2.Value = 28
ElseIf cell2.Offset(0, -5).Value = "MECHELEN" Then
cell2.Value = 33
ElseIf cell2.Offset(0, -5).Value = "TIMISOARA" Then
cell2.Value = 34
ElseIf cell2.Offset(0, -5).Value = "STRANCICE" Then
cell2.Value = 33
ElseIf cell2.Offset(0, -5).Value = "KLIPPAN" Then
cell2.Value = 33
ElseIf cell2.Offset(0, -5).Value = "MATARO" Then
cell2.Value = 33
ElseIf cell2.Offset(0, -5).Value = "KIEV" Then
cell2.Value = 32
ElseIf cell2.Offset(0, -5).Value = "ROSTOV" Then
cell2.Value = 32.6
ElseIf cell2.Offset(0, -5).Value = "ITELLA" Then
cell2.Value = 32
End If
End If
Next cell2
您可以将几个elseif组合在一起,因为它们共享相同的结果,再加上切换到Select Case,您的代码可以更短,如下所示:
For Each cell2 In Range("L2:L" & lastrow2)
With cell2
If Not .Offset(0, -1).Value = 0 Then
Select Case .Offset(0, -5).Value
Case "SOCHACZEW"
.Value = 31.2
Case "SEKERPINAR", "MECHELEN", "STRANCICE", "KLIPPAN", "MATARO"
.Value = 33
Case "ATHENS"
.Value = 28
Case "KIEV", "ITELLA"
.Value = 32
Case "ROSTOV"
.Value = 32.6
Case "TIMISOARA"
.Value = 34
End Select
End If
End With
Next cell2
您可以将几个elseif组合在一起,因为它们共享相同的结果,再加上切换到Select Case,您的代码可以更短,如下所示:
For Each cell2 In Range("L2:L" & lastrow2)
With cell2
If Not .Offset(0, -1).Value = 0 Then
Select Case .Offset(0, -5).Value
Case "SOCHACZEW"
.Value = 31.2
Case "SEKERPINAR", "MECHELEN", "STRANCICE", "KLIPPAN", "MATARO"
.Value = 33
Case "ATHENS"
.Value = 28
Case "KIEV", "ITELLA"
.Value = 32
Case "ROSTOV"
.Value = 32.6
Case "TIMISOARA"
.Value = 34
End Select
End If
End With
Next cell2
@ShaiRado answer确实缩短了代码,但为了提高性能,您应该使用数组来最小化与范围的交互: 或者至少在执行前关闭Application.ScreenUpdate,然后在执行后重新打开
您还应该完全限定所有范围以明确工作表@ShaiRado answer确实会缩短代码,但为了提高性能,您应该使用数组来最小化与范围的交互: 或者至少在执行前关闭Application.ScreenUpdate,然后在执行后重新打开
您还应该完全限定所有范围以明确工作表您可以使用Select Case cell2.Offset0,-5.Value而不是您的多个ElseIf。因此,我应该将ElseIf替换为Select Case cell2.Offset0,-5.Value?请参阅下面的答案和代码,看看它是否有助于您使用Select Case cell2.Offset0,-5.Value而不是您的多个elseifso,我应该用Select Case cell2.Offset0,-5.Value替换ElseIf?请参阅下面的答案和代码,看看它是否对您有很大帮助谢谢!那么,在你看来,你的代码是尽可能高效的,对吗?@PericlesFaliagas,你提供的当前数据是的。还有一个问题。。。如果我没有其他具有相同数据的文件,是否值得使用此方法?我想说的是,这种方法是否比我所说的更有效used@PericlesFaliagas不确定,很可能你可以在多个ElseIf和Select Case之间搜索基准性能,我只是觉得如果你想在未来的数据库中添加更多的场景,代码更干净,调试也更容易!那么,在你看来,你的代码是尽可能高效的,对吗?@PericlesFaliagas,你提供的当前数据是的。还有一个问题。。。如果我没有其他具有相同数据的文件,是否值得使用此方法?我想说的是,这种方法是否比我所说的更有效used@PericlesFaliagas不确定,很可能您可以在多个ElseIf和Select Case之间用谷歌搜索基准性能,我只是觉得如果您想在将来添加更多场景,代码更干净,更容易调试