Unire colonne elenchi



  • Unire colonne elenchi
    di Alesmazzo (utente non iscritto) data: 10/12/2014 18:21:36

    Buongiorno a tutti,
    ho un problema: registro i dati di presenza mensile dei partecipanti ad alcunicorsi di formazione in semplici tabelle Excel.
    Giunta la fine dell'anno vorrei riunire i dati cosi che ogni studente abbia le proprie presenze mensili riportate in una sola riga.

    Avendo centinaia di studenti, anche con presenze saltuarie, vorrei unire le diverse tabelle con l'utilizzo di una funzione automatica per avere in un unica riga tutti i dati della stessa persona.
    è possibile?
    per chiarezza inserisco una stralcio della mia tabella in cui ho già incollato, di seguito, i dati dei vai mesi (ad ogni voce studente, corso di xx e ore presenza corrisponde una diversa colonna).

    Studente....Corso di aprile....ore pres.....Corso di maggio....ore pres.....Corso di giugno...ore pres.

    Angelo...............x..................5
    Giulio.................x..................2
    Francesco...........x..................4
    Michele..............N................../
    Zeno.................N................../

    Angelo......................................................x....................5
    Giulio.......................................................N..................../
    Francesco.................................................N..................../
    Michele.....................................................x....................1
    Zeno........................................................x....................3

    Angelo......................................................................................................N................/
    Giulio........................................................................................................x...............3
    Francesco..................................................................................................x................6
    Michele.....................................................................................................x...............6
    Zeno........................................................................................................N................./

    Ordinando in ordine alfabetico riesco ad “avvicinare” le righe con i dati di ogni singolo studente, ma tuttavia ognuno avrà i propri dati in tante righe per quanti sono i mesi in cui ha frequentato. Mentre io li vorrei in un'unica riga.

    Ringrazio anticipatamente chi mi saprà aiutare, senza di voi ci metterei una vita a farlo !

    Alessandro



  • di Lucas87 data: 11/12/2014 08:26:34

    Allega un file di esempio.
    Magari utilizza nomi di fantasia


  • allegato
    di Alesmazzo (utente non iscritto) data: 11/12/2014 10:16:22

    Ho allegato un fac simile del mio archivio (semplificato visto che ho centinaia di studenti).
    Nella tabella ho già affiancato le colonne relative al registro presenze dei diversi mesi.

    Grazie a chi mi aiuterà,
    Alessandro



  • di Lucas87 data: 11/12/2014 11:31:33

    I nominativi rimangono sempre quelli in tutto il foglio oppure ne vengono aggiunti/tolti?


  • allegato aggiornato
    di Alesmazzo (utente non iscritto) data: 11/12/2014 12:03:26

    ciao,
    grazie Lucas della precisazione, che mi ha fatto capire di aver troppo semplificato l'esempio.
    Il mio problema è proprio che ad ogni mese possono comparire o scomparire studenti diversi, il che rende difficile unire gli elenchi (fossero sempre gli stessi, come in una classe standard sarebbe ovviamente più facile).
    Allego un nuovo file che descrive meglio la mia situazione (righe azzurre) e quanto vorrei ottenere con una funzione automatica di "fusione" elenchi, sotto, (righe verdi).

    Spero di essermi spiegato.

    Grazie ancora
    Alessandro



  • di Lucas87 data: 11/12/2014 12:44:55

    Prova questo.
    Dal tuo foglio togli la tabella verde, il risultato finale.
    Riporta sul foglio2 le prime 2 righe dell'intestazione.
    Il codice va a scrivere sul foglio2.
     
    Sheets(2).Rows("3:" & Rows.Count).Delete
    ur = Range("a" & Rows.Count).End(xlUp).Row
    uc = Cells(1, Columns.Count).End(xlToLeft).Column
    r = 3
    For i = 3 To ur
        ct = False
        If Cells(i, 1) <> "" Then
            Set ctr = Sheets(2).Columns(1).Find(what:=Cells(i, 1), lookat:=xlWhole)
            If Not ctr Is Nothing Then
                firstaddress = ctr.Address
                Do
                    If ctr.Offset(0, 1) = Cells(i, 1).Offset(0, 1) Then
                        ct = True
                        Exit Do
                    End If
                    Set ctr = Sheets(2).Columns(1).FindNext(ctr)
                Loop While Not ctr Is Nothing And ctr.Address <> firstaddress
            End If
            If ct <> True Then
                Sheets(2).Rows(r) = Rows(i).Value
                Set fin = Columns(1).Find(what:=Cells(i, 1), after:=Cells(i, 1), lookat:=xlWhole)
                If Not fin Is Nothing Then
                    Do
                        If Cells(i, 2) = fin.Offset(0, 1) Then
                            For j = 3 To uc Step 2
                                If Cells(fin.Row, j) <> "" Then
                                    n = Cells(fin.Row, Columns.Count).End(xlToLeft).Column
                                    Sheets(2).Range(Sheets(2).Cells(r, n - 1), Sheets(2).Cells(r, n)) = Range(Cells(fin.Row, j), Cells(fin.Row, j + 1)).Value
                                    Exit For
                                End If
                            Next
                        End If
                        Set fin = Columns(1).FindNext(fin)
                    Loop While Not fin Is Nothing And fin.Row > i
                End If
                r = r + 1
             End If
        End If
    Next
    


  • ?
    di Alesmazzo (utente non iscritto) data: 11/12/2014 15:54:56

    Lucas saresti così gentile da darmi una dritta su come e dove montare il codice?
    non riesco a venirne a capo... sono davvero disastroso!!


  • evvai
    di Alesmazzo (utente non iscritto) data: 11/12/2014 16:07:48

    sono riuscito grazie!
    ora carico tutti i dati e vedo se funziona.... in caso affermativo erigerò una statua a Lucas!



  • di Lucas87 data: 11/12/2014 16:16:37

    Dipende da come vuoi usare il codice.
    Se lo devi usare una volta ogni tanto:
    Clicca con il DX sulla linguetta del foglio con la tabella, quella con il nome in basso a SX, e seleziona "Visualizza codice".
    Si apre l'editor di VBA.
    Scrivi "Sub unisci_elenchi" e premi INVIO. Compare in automatico "End sub".
    Inserisci il codice tra le due righe. Premi F5 per eseguirlo.

    Se invece è un'operazione che ripeti periodicamente:
    Hai la versione 2003. Clicca con il DX sulla barra degli strumenti e seleziona "Strumenti di controllo". Compare una nuova barra.
    Seleziona "Pulsante di comando" e crea il pulsante sul foglio.
    Fai doppio click sul pulsante. Si apre l'editor di VBA con
    Private Sub CommandButton1_Click()
    ...
    End Sub

    Incolla il codice al posto dei puntini.
    Tornato sul foglio cliccando con il DX sul pulsante trovi "Oggetto pulsante di controllo"-->"Modifica" e hai la possibilità di cambiare la dicitura del pulsante.
    Sulla nuova barra c'è un'icona con matita righello e squadra (Modalità progettazione). Quando è attiva puoi fare delle modifiche al pulsante. Per usare il pulsante devi disattivarla.



  • di Albatros54 (utente non iscritto) data: 11/12/2014 16:24:39

    Puoi cominciare ad erigere la statua, ho provato è funziona tutto!!!
    Ciao
    Albatros54