If



  • "If" vs "Case"
    di beppexile data: 31/08/2015 13:50:24

    Salve a tutti,
    osservate le 2 Sub in basso; entrambe fanno la stessa cosa.
    Ora immaginatela 20 volte più grande ed elaborata:
    Secondo voi, qual'è la più veloce nell'esecuzione del codice?
    Grazie delle risposte  
     
    Sub prova1()
        prova = Range("A1").Value
        If prova = 1 Then
            Sheets(1).Select
            Range("G:G").ColumnWidth = 9
            Range("H:H,J:J,L:L,N:N,P:P").ColumnWidth = 4
            Range("I:I,K:K,M:M,O:O,Q:Q").ColumnWidth = 10
        ElseIf prova = 2 Then
            Range("G:G").ColumnWidth = 9
            Range("H:H,J:J,L:L,N:N,P:P").ColumnWidth = 4
            Range("I:I,K:K,M:M,O:O,Q:Q").ColumnWidth = 10
            Range("R:R").ColumnWidth = 9
            Range("S:S,U:U,W:W,Y:Y,AA:AA").ColumnWidth = 4
            Range("T:T,V:V,X:X,Z:Z,AB:AB").ColumnWidth = 10
        ElseIf prova = 3 Then
            Range("G:G").ColumnWidth = 9
            Range("H:H,J:J,L:L,N:N,P:P").ColumnWidth = 4
            Range("I:I,K:K,M:M,O:O,Q:Q").ColumnWidth = 10
            Range("R:R").ColumnWidth = 9
            Range("S:S,U:U,W:W,Y:Y,AA:AA").ColumnWidth = 4
            Range("T:T,V:V,X:X,Z:Z,AB:AB").ColumnWidth = 10
            Range("AC:AC").ColumnWidth = 9
            Range("AD:AD,AF:AF,AH:AH,AJ:AJ,AL:AL").ColumnWidth = 4
            Range("AE:AE,AG:AG,AI:AI,AK:AK,AM:AM").ColumnWidth = 10
        End If
    End Sub
    
    Sub prova2()
        prova = Range("A1").Value
        Select Case prova
        Case Is = 1
            Range("G:G").ColumnWidth = 9
            Range("H:H,J:J,L:L,N:N,P:P").ColumnWidth = 4
            Range("I:I,K:K,M:M,O:O,Q:Q").ColumnWidth = 10
        Case Is = 2
            Range("G:G").ColumnWidth = 9
            Range("H:H,J:J,L:L,N:N,P:P").ColumnWidth = 4
            Range("I:I,K:K,M:M,O:O,Q:Q").ColumnWidth = 10
            Range("R:R").ColumnWidth = 9
            Range("S:S,U:U,W:W,Y:Y,AA:AA").ColumnWidth = 4
            Range("T:T,V:V,X:X,Z:Z,AB:AB").ColumnWidth = 10
        Case Is = 3
            Range("G:G").ColumnWidth = 9
            Range("H:H,J:J,L:L,N:N,P:P").ColumnWidth = 4
            Range("I:I,K:K,M:M,O:O,Q:Q").ColumnWidth = 10
            Range("R:R").ColumnWidth = 9
            Range("S:S,U:U,W:W,Y:Y,AA:AA").ColumnWidth = 4
            Range("T:T,V:V,X:X,Z:Z,AB:AB").ColumnWidth = 10
            Range("AC:AC").ColumnWidth = 9
            Range("AD:AD,AF:AF,AH:AH,AJ:AJ,AL:AL").ColumnWidth = 4
            Range("AE:AE,AG:AG,AI:AI,AK:AK,AM:AM").ColumnWidth = 10
        End Select
    End Sub
    



  • di scossa data: 31/08/2015 14:12:52

    cit.: "Secondo voi, qual'è la più veloce nell'esecuzione del codice?"

    Il modo migliore per scoprirlo è fare dei test.

    Sicuramente saranno entrambe più veloci se le "condensi":



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)

     
    Sub prova1()
        prova = Range("A1").Value
        If prova = 1 Then
            Sheets(1).Select
            Range("G:G").ColumnWidth = 9
            Range("H:H,J:J,L:L,N:N,P:P").ColumnWidth = 4
            Range("I:I,K:K,M:M,O:O,Q:Q").ColumnWidth = 10
        ElseIf prova = 2 Then
            Range("G:G,R:R").ColumnWidth = 9
            Range("H:H,J:J,L:L,N:N,P:P,S:S,U:U,W:W,Y:Y,AA:AA").ColumnWidth = 4
            Range("I:I,K:K,M:M,O:O,Q:Q,T:T,V:V,X:X,Z:Z,AB:AB").ColumnWidth = 10
        ElseIf prova = 3 Then
            Range("G:G,R:R,AC:AC").ColumnWidth = 9
            Range("H:H,J:J,L:L,N:N,P:P,S:S,U:U,W:W,Y:Y,AA:AA,AD:AD,AF:AF,AH:AH,AJ:AJ,AL:AL").ColumnWidth = 4
            Range("I:I,K:K,M:M,O:O,Q:Q,T:T,V:V,X:X,Z:Z,AB:AB,AE:AE,AG:AG,AI:AI,AK:AK,AM:AM").ColumnWidth = 10
        End If
    End Sub
    
    Sub prova2()
        prova = Range("A1").Value
        Select Case prova
        Case Is = 1
            Range("G:G").ColumnWidth = 9
            Range("H:H,J:J,L:L,N:N,P:P").ColumnWidth = 4
            Range("I:I,K:K,M:M,O:O,Q:Q").ColumnWidth = 10
        Case Is = 2
            Range("G:G,R:R").ColumnWidth = 9
            Range("H:H,J:J,L:L,N:N,P:P,S:S,U:U,W:W,Y:Y,AA:AA").ColumnWidth = 4
            Range("I:I,K:K,M:M,O:O,Q:Q,T:T,V:V,X:X,Z:Z,AB:AB").ColumnWidth = 10
        Case Is = 3
            Range("G:G,R:R,AC:AC").ColumnWidth = 9
            Range("H:H,J:J,L:L,N:N,P:P,S:S,U:U,W:W,Y:Y,AA:AA,AD:AD,AF:AF,AH:AH,AJ:AJ,AL:AL").ColumnWidth = 4
            Range("I:I,K:K,M:M,O:O,Q:Q,T:T,V:V,X:X,Z:Z,AB:AB,AE:AE,AG:AG,AI:AI,AK:AK,AM:AM").ColumnWidth = 10
        End Select
    End Sub
    
    



  • di scossa data: 31/08/2015 14:31:53

    Comunque non credo ci siano troppe differenze di prestazioni: entrambe, appena trovano una condizione vera, interrompono la verifica delle condizioni successive quindi direi che poco cambia.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di beppexile data: 31/08/2015 15:26:59

    Grazie Scossa.
    Il dubbio sulla velocità di esecuzione mi è venuto perchè ho letto un'articolo sulla questione dove diceva che il Select Case è più veloce, e lo spiegava con gli esempi seguenti:
     
    Select Case True
    Case OptionButton1
    MsgBox "pippo uno"
    Case OptionButton2
    MsgBox "pippo due"
    Case OptionButton3
    MsgBox "pippo tre"
    End Select
    
    
    If OptionButton1.Value = True Then
    MsgBox "pippo uno"
    End If
    If OptionButton2.Value = True Then
    MsgBox "pippo due"
    End If
    If OptionButton3.Value = True Then
    MsgBox "pippo tre"
    End If



  • di scossa data: 31/08/2015 15:37:41

    cit.: "dove diceva che il Select Case è più veloce, e lo spiegava con gli esempi seguenti:"

    Un modo per "addomesticare" il risultato: ha utilizzato 3 If Then End If, anziché un solo If Then ElseIf .... End IF


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)