ciclo for each



  • ciclo for each
    di deborah (utente non iscritto) data: 24/03/2016 14:59:19

    Ciao a tutti,
    voglio confrontare le stringhe contenute in due colonne di due fogli (dest1 e dest3).
    Se la cella della colonna del foglio dest3 è contenuto nella colonna del foglio dest1, vorrei che mi scrivessi il valore della cella dest3, nella prima colonna del foglio dest1. Ho scopiazzato di qua e di là una routine ma va in errore. Qualcuno può aiutarmi a correggerla?

     
    Sub SCRIVI_NOMI_FILE()
    Dim CL  As Object 
    Dim iRow As Integer 
    Set dest1 = Worksheets("DATI_RT") 'è il foglio di destinazione del file riassuntivo
    Set dest3 = Worksheets("ELENCO_PROSPETTI_RT") 'è il foglio di destinazione del file riassuntivo
    iRow = 2
    dest1.Range("A:A").NumberFormat = "General"
    
    For Each CL In dest3.Range("A2:A15")
    If CL.Value Like dest1.Range("D:D") & "*" Then
    dest1.Cells(iRow, 1) = CL.Value 
    
    End If
    Next
    End Sub
    



  • di Luca73 data: 24/03/2016 15:12:42

    Ciao Prova ad analizzare quanto allegato
    alcune note
    - non avevi dichiarato tutte le variabili: usa option explicit ad inizio macro
    - non avevi definito il secondo cico for cercavi di confrontare una stringa on un vettore di celle.
    - Rimetti i Nome dei fogli giusti
    - la prossima volta allega il file aiuti che ti aiuta...
    - sistema il range di arrivo ora ho inserito dest1.Range("D1:D15") usare tutta la colonna sarebbe troppo lungo.
    Ciao
    Luca

     
    Sub SCRIVI_NOMI_FILE()
    Dim CL  As Range
    Dim CLD  As Range
    Option Explicit
    
    Dim iRow As Integer
    Dim dest1 As Worksheet
    Dim dest3 As Worksheet
    Set dest1 = Worksheets("Foglio1") 'è il foglio di destinazione del file riassuntivo
    Set dest3 = Worksheets("Foglio2") 'è il foglio di destinazione del file riassuntivo
    iRow = 2
    dest1.Range("A:A").NumberFormat = "General"
    
    For Each CL In dest3.Range("A2:A15")
        For Each CLD In dest1.Range("D1:D15")
            If CL.Value Like CLD.Value & "*" Then
                dest1.Cells(iRow, 1) = CL.Value
            End If
        Next
    Next
    End Sub






  • di deborah (utente non iscritto) data: 25/03/2016 12:15:46

    Grazie Luca73,
    funziona alla grande. L'ho leggermente modificato perchè deve scorrere tutta la colonna del foglio dest3, ma funzionissima!!
    Ho dovuto commentare option Explicit, perchè mi dava "Errore di compilazione. non valido all'interno di una routine".


     
    Sub SCRIVI_NOMI_FILE()
    Dim CL  As Range
    Dim CLD  As Range
    'Option Explicit
    
    Dim iRow As Integer
    Dim dest1 As Worksheet
    Dim dest3 As Worksheet
    Set dest1 = Worksheets("DATI_RT") 'c il foglio di destinazione del file riassuntivo
    Set dest3 = Worksheets("ELENCO_PROSPETTI_RT") 'c il foglio di destinazione del file riassuntivo
    iRow = 2
    dest1.Range("A:A").NumberFormat = "General"
     
     For Each CLD In dest1.Range("D2:D250")
        For Each CL In dest3.Range("A2:A15")
               If CLD.Value Like CL.Value & "*" Then
                dest1.Cells(iRow, 1) = CL.Value
            End If
        Next
        iRow = iRow + 1
        
    Next
    
    
    End Sub
    



  • di Luca73 data: 25/03/2016 13:49:03

    Ciao
    option explicit deve essere la prima riga del modulo.
    se vuoi falo comparire in automatico bisogna andare nelle opzioni dell pagine di VBA e selezionare la voce Dichiarazioine di variabili obbligatoria

    Ciao
    Luca