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之间用谷歌搜索基准性能,我只是觉得如果您想在将来添加更多场景,代码更干净,更容易调试