da matrice a vettore



  • da matrice a vettore
    di lucippo (utente non iscritto) data: 01/05/2013 16:22:35

    Ciao VBAers!
    eccomi con una nuova domanda...
    Nel file allegato in foglio uno, ho una matrice in cui per ogni macchina (col A) posso avere (sulla stessa riga) diversi proprietari assegnati (da col B fino alla fine).
    Nel foglio 2 vorrei ottenere,sulla base dei dati in foglio1, un ordinamento dei dati diverso, ovvero vorrei avere nella prima colona --> il nome del proprietario e nella seconda colonna --> la macchina che possiede.
    Ovviamente nel caso di proprietari che possiedono piu macchine, il loro nome comparirà piu volte.

    Qual è secondo voi il metodo piu efficiente per raggiungere il risultato? anche se richiede codice VBA va benissimo



  • di Vecchio Frac data: 01/05/2013 17:51:40

    Facendo un incolla speciale - Trasponi, questo è il risultato nel modo più veloce possibile:


    Macchina Mercedes BMW FIAT Skoda
    Proprietario Luca Marco Maria Sandra
    Sandra Maria gino
    Sandra Francesca
    Luca Mario
    Monica
    Pasquale


    Si avvicina al risultato voluto?
    Se invece vuoi scandagliare i proprietari per associare a ciascuno una macchina, senza ripetizioni, penso con qualche riga di codice si può fare.





  • di lucippo (utente non iscritto) data: 01/05/2013 18:18:41

    sarebbe bello ma non è quello che cerco veramente
    a me servirebbe questa organizzazione dei dati:

    Proprietario Macchina
    luca Mercedes
    luca BMW
    Sandra Mercedes
    Sandra BMW
    Sandra Skoda
    Marco BMW
    Maria BMW
    Maria FIAT
    gino FIAT
    Francesca FIAT
    Mario FIAT
    Monica FIAT
    Pasquale FIAT



  • di totygno71 data: 01/05/2013 18:30:21

    Forse 2 righe di codice non farebbero male ^_^



  • di Vecchio Frac data: 01/05/2013 18:40:46

    Ecco la mia proposta.
    I dati devono essere in foglio1 a partire da A1, come dall'esempio che hai postato.
     
    Option Explicit
    
    Sub riordina()
    Dim rng As Range, cell As Range, r As Range, i As Integer
    
        Set r = [A1].CurrentRegion
        Set rng = [A1].CurrentRegion.Resize(r.Rows.Count - 1, r.Columns.Count - 1).Offset(1, 1)
        
        With Sheets("foglio2")
            .[A1] = "Proprietario"
            .[B1] = "Macchina"
            .[A1].Font.Bold = True
            .[B1].Font.Bold = True
        End With
        
        i = 2
        
        For Each cell In rng
            If Trim(cell) <> "" Then
                Sheets("Foglio2").Cells(i, "A") = cell
                Sheets("Foglio2").Cells(i, "B") = Cells(cell.Row, "A")
                i = i + 1
            End If
        Next
        
        Sheets("Foglio2").[A1].CurrentRegion.Sort key1:=Sheets("Foglio2").[A1], header:=xlYes
    End Sub






  • di totygno71 data: 01/05/2013 18:45:15

    Manca qualcosa... U_U

    Un bel pulsantone.... ^_^



  • di lucippo (utente non iscritto) data: 01/05/2013 18:57:33

    @ VecchioFrac: YOU ARE THE BEST!!!
    @Totygno: pulsante inserito e pezzo di codice qui sotto inserito in oggetto "Foglio1". Funziona che è una favola!!

    GRAZIE MILLE RAGAZZI!!!


     
    Private Sub CommandButton1_Click()
    riordina
    End Sub