IfGoTo



  • If...GoTo
    di mirtylla (utente non iscritto) data: 17/11/2015 11:18:32

    Buongiorno a tutti,
    posto una macro in cui riporto, nel primo ciclo Do, il mio problema scritto tra virgolette.
    Mi spiego. Vorrei che, nel caso in cui la condizione If del primo ciclo Do non è verificata, il ciclo scriva "NV" nelle celle N4 e O4 (e qui non ci sono problemi).
    Vorrei inoltre che, sempre nel caso in cui la condizione If non è verificata, la macro salti tutti i cicli successivi fino ad arrivare direttamente al salvataggio del file (Riga 138).
    Non riesco però ad inserire la condizione GoTo.
    Credo si un problema semplice ma proprio non riesco a scrivere la giusta formula.
    Vi ringrazio.
     
    Sub PROVA()
    '
    ' PROVA Macro
    '
    Sheets("INSERIMENTO DATI").Select
        fpath = "C:"
        
            For n = 23 To 41
            For m = 23 To 41
              Range("B4").Value = Range("AV" & n).Value
              Range("F4").Value = Range("AV" & m).Value
              
        Do
            For a = 4 To 10
                For b = 7 To 8
    
                    Range("N4").Value = Range("BM" & a).Value
                    Range("O4").Value = Range("BQ" & b).Value
    
                    If Range("V4").Value > Range("V8").Value Then Exit Do
                Next
            Next
            "se la condizione If non è verificata scrivi:"
            Range("N4").Value = "NV"
            Range("O4").Value = "NV"
            "e vai direttamente alla riga 138 (salvataggio file)"
            Exit Do
        Loop
    
        Do
            For a = 10 To 40
    
                    Range("Z5").Value = a
    
                    If Range("V5").Value > Range("V8").Value Then Exit Do
                Next
                
            Range("Z5").Value = "NV"
            Exit Do
        Loop
    
         Do
             For a = 10 To 40
    
                    Range("Z6").Value = a
    
                    If Range("V6").Value > Range("V8").Value Then Exit Do
                Next
                
            Range("Z6").Value = "NV"
            Exit Do
        Loop
    
        Do
            For a = 0 To Range("K31").Value
            
            Range("Z11").Value = Range("B9").Value + a
    
                   If Range("V11").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z11").Value = "NV"
            Exit Do
        Loop
           
         Do
            For a = 0 To Range("K31").Value
            
            Range("Z12").Value = Range("B9").Value + a
    
                   If Range("V12").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z12").Value = "NV"
            Exit Do
        Loop
          
        Do
            For a = 0 To Range("K30").Value
            
            Range("Z15").Value = Range("B11").Value + a
    
                    If Range("V15").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z15").Value = "NV"
            Exit Do
        Loop
        
        Do
            For a = 0 To Range("K30").Value
            
            Range("Z18").Value = Range("B11").Value + a
    
                    If Range("V18").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z18").Value = "NV"
            Exit Do
        Loop
        
        Do
            For a = 0 To Range("K32").Value
            
            Range("Z21").Value = Range("F9").Value + a
    
                    If Range("V21").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z21").Value = "NV"
            Exit Do
        Loop
        
        Do
            For a = 0 To Range("K30").Value
            
            Range("Z24").Value = Range("B11").Value + a
    
                    If Range("V24").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z24").Value = "NV"
            Exit Do
        Loop
        
        Do
            For a = 0 To Range("K33").Value
            
            Range("Z27").Value = Range("F11").Value + a
    
                    If Range("V27").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z27").Value = "NV"
            Exit Do
        Loop
        
         ActiveWorkbook.SaveAs Filename:= _
             fpath & Range("AV" & n).Value & Range("AV" & m).Value & ".xls", _
            FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
         
       Next
       Next
        
    End Sub
    
    
    
    



  • di Cucù data: 17/11/2015 11:26:42

    Cit" la macro salti tutti i cicli successivi fino ad arrivare direttamente al salvataggio del file (Riga 138). "

    Occhio che tale riga è all'interno dei cicli for n to.. e for m to...



  • di mirtylla (utente non iscritto) data: 17/11/2015 11:35:28

    Ciao,
    si è giusto perché il ciclo For deve continuare a girare per creare le altre combinazioni delle celle B4 ed F4. Ma se una combinazione mi restituisce quella condizione If non verificata allora tutti i cicli successivi devono essere salatati, il file deve essere salvato e si passa alla successiva combinazione.



  • di Cucù data: 17/11/2015 11:42:43

    Ok
    La condizione che vuoi verificare è questa?
    If Range("V4").Value > Range("V8").Value



  • di mirtylla (utente non iscritto) data: 17/11/2015 11:49:34

    Si, è quella


  • macro lentissima
    di camacio (utente non iscritto) data: 17/11/2015 11:52:27

    Salve, ho seriamente bisogno di risolvere la lentezza assurda di una macro da me realizzata.Il tempo richiesto per acquisire elaborare e copiare una riga e di circa 1,8 secondi.
    Spiego meglio il lavoro che devo fare:
    devo assegnare di volta in volta due valori a due celle AD1 e AE1.
    Con delle formule, altre celle prelevano il valore da AD1 e AE1 elaborano e restituiscono un risultato nell'intervallo OJ572:OY572. che sarà copiato in un punto diverso dello stesso foglio.Caricati tutti i valori ci sara unelaborazione dei dati che restituira un nuovo risultato che dovrà essere copiato in un'altro foglio nell'intervallo
    A2, A3,...A4 ecc

    In sostanza sono 380 valori per ogni nazione e le nazioni sono 6 riferiti a gli ultimi 6 anni
    Quiindi: ITALIA 2010 ITALIA 2011... ITALIA2015
    GERMANIA 2010 GERMANIA 2011.. GERMANIA 15
    Eccc.un ciclo da 36

    Application.ScreenUpdating = False
    'Application.Calculation = xlCalculationManual


    Ho già provato ad utilizzare queste due funzioni ma nessun risultato soddisfacente,
    con il calcolo manuale non lavora bene cioè mi copia sempre lo stesso valore e non fa elaborare le formule del foglio.

    Grazie
     
    Sub copiaFREQUENZEPOISSON()
    Dim r As Integer, y As Integer, A As Variant, B As Integer C As,Integer
    Application.ScreenUpdating = False
    'Application.Calculation = xlCalculationManual
    Sheets("COPIAPOISSON").Select
    A = 3
    C= 2
    
    Range("B1") = Cells(2, 2)
    
                                                  '--1° CICLO DI 6 CAMPIONATI X 6 NAZIONI ESEMPIO ITALIA 2010, ITALIA 2011 .. GERMANIA 2010 GERMANIA 2011.. GERMANIA 2015
    For r = 1 To 36
    Range("B1") = Cells(r + 1, 2)           '---assegno alla cella B1 nome e anno del primo campionato.Con delle formule collegate a questa cella carico tutte le partite con relativi risultati.
    
                                                 '-----------------------------------------INIZIO ISTRUZIONI X ELIMINARE DUPLICATI SQUADRE
    
        Range("E2:E61").Select
        Selection.Copy
        Range("B40").Select
        Selection.PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
        ActiveSheet.Range("$B$40:$B$99").RemoveDuplicates Columns:=1, Header:=xlNo
    
                                                    '-------------------------------------------FINE ELIMINA DUPLICATI----INIZIO CICLO ASSEGNAZIONE VALORE ALLE CELLE AD1,AE1
    B = Range("A1") 'numero di partite giocate in questo campionato, 380
    
    For y = 1 To B
    Range("AD1") = Cells(y + 1, 16) 'acquisisce di volta in volta tutti i 380 valori del relativo campionato caricato
    Range("AE1") = Cells(y + 1, 22) 'acquisisce di volta in volta tutti i 380 valori
                                                            -----------------------INIZIO FASE ELABORAZIONE SEMPRE STESSO FOGLIO
    
    Range("OJ572:OY572").Select      '---------------------ottengo il risultato elaborato nell'intervallo  
                                                           
    Selection.Copy                  '------------------------------- copio il risultato nella cella AF2 dello stesso foglio
    Cells(C, 32).Select
        Selection.PasteSpecial Paste:=xlPasteValues
                                                                
                                        
       C = (1 + C)              
    Next Y
    
                                                             '----- FINE ASSEGNAZIONI DI TUTTI I 380 VALORI ALLE CELLE AD1 AE1'
    Range("dx485:if486").Select
                                                             '-----------'FINE FASE ELABORAZIONE OTTENGO RISULTATO CHE COPIERO NEL FOGLIO COPIARISULTATI POISSON
    
    Selection.Copy
    Sheets("COPIARISULTATIPOISSON").Select
    Cells(A, 1).Select
        Selection.PasteSpecial Paste:=xlPasteValues
     A = (2 + A)
     Sheets("COPIAPOISSON").Select
    
    Next r
    
    Application.ScreenUpdating = True
    'Application.Calculation = xlCalculationAutomatic
    End Sub
    
    
    
    
    
    
    
    



  • di Cucù data: 17/11/2015 11:58:28

    Sottolineando che sarebbe meglio evitare il Goto.... e senza poter provare il file...
    Cucù
     
    Sub PROVA()
    '
    ' PROVA Macro
    '
    Sheets("INSERIMENTO DATI").Select
        fpath = "C:"
        
            For n = 23 To 41
            For m = 23 To 41
              Range("B4").Value = Range("AV" & n).Value
              Range("F4").Value = Range("AV" & m).Value
              
        Do
            For a = 4 To 10
                For b = 7 To 8
    
                    Range("N4").Value = Range("BM" & a).Value
                    Range("O4").Value = Range("BQ" & b).Value
    
                    If Range("V4").Value > Range("V8").Value Then 
                        Exit Do
                    else
                        Range("N4").Value = "NV"
                        Range("O4").Value = "NV"
                        GoTo 10
                Next
            Next
         Loop
    
        Do
            For a = 10 To 40
    
                    Range("Z5").Value = a
    
                    If Range("V5").Value > Range("V8").Value Then Exit Do
                Next
                
            Range("Z5").Value = "NV"
            Exit Do
        Loop
    
         Do
             For a = 10 To 40
    
                    Range("Z6").Value = a
    
                    If Range("V6").Value > Range("V8").Value Then Exit Do
                Next
                
            Range("Z6").Value = "NV"
            Exit Do
        Loop
    
        Do
            For a = 0 To Range("K31").Value
            
            Range("Z11").Value = Range("B9").Value + a
    
                   If Range("V11").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z11").Value = "NV"
            Exit Do
        Loop
           
         Do
            For a = 0 To Range("K31").Value
            
            Range("Z12").Value = Range("B9").Value + a
    
                   If Range("V12").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z12").Value = "NV"
            Exit Do
        Loop
          
        Do
            For a = 0 To Range("K30").Value
            
            Range("Z15").Value = Range("B11").Value + a
    
                    If Range("V15").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z15").Value = "NV"
            Exit Do
        Loop
        
        Do
            For a = 0 To Range("K30").Value
            
            Range("Z18").Value = Range("B11").Value + a
    
                    If Range("V18").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z18").Value = "NV"
            Exit Do
        Loop
        
        Do
            For a = 0 To Range("K32").Value
            
            Range("Z21").Value = Range("F9").Value + a
    
                    If Range("V21").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z21").Value = "NV"
            Exit Do
        Loop
        
        Do
            For a = 0 To Range("K30").Value
            
            Range("Z24").Value = Range("B11").Value + a
    
                    If Range("V24").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z24").Value = "NV"
            Exit Do
        Loop
        
        Do
            For a = 0 To Range("K33").Value
            
            Range("Z27").Value = Range("F11").Value + a
    
                    If Range("V27").Value > Range("V8").Value Then Exit Do
                Next
    
            Range("Z27").Value = "NV"
            Exit Do
        Loop
    
    10:   
         ActiveWorkbook.SaveAs Filename:= _
             fpath & Range("AV" & n).Value & Range("AV" & m).Value & ".xls", _
            FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
         
       Next
       Next
        
    End Sub
    



  • di Cucù data: 17/11/2015 12:03:19

    @ camacio
    Ti sei inserito in una discussione già avviata.
    Devi postare la domanda aprendone tu nuova (cliccando sul pulsante Nuova discussione) e magari allegando il file di esempio
    Cucù



  • di mirtylla (utente non iscritto) data: 17/11/2015 12:18:51

    Ho modificato la macro in questo modo perché con Else mi diceva "Next senza For". Infatti era il problema che avevo avuto anche io quando ho provato ad utilizzarlo, ma sembra che anche senza Else funzioni benissimo.
    Problema risolto alla grande....
    Grazie mille Cucù
     
        Do
            For a = 4 To 10
                For b = 7 To 8
    
                    Range("N4").Value = Range("BM" & a).Value
                    Range("O4").Value = Range("BQ" & b).Value
    
                    If Range("V4").Value > Range("V8").Value Then Exit Do
              Next
            Next
                Range("N4").Value = "NV"
                Range("O4").Value = "NV"
                GoTo 10
            
        Loop
    



  • di Cucù data: 17/11/2015 12:21:03

    In effetti mancava End If
    Cucù



  • di camacio (utente non iscritto) data: 17/11/2015 13:29:31

    scusate, ho combinato un casino.



  • di mirtylla (utente non iscritto) data: 17/11/2015 15:00:21