Trasposizione dati colonna riga



  • Trasposizione dati colonna riga
    di Pascà60 (utente non iscritto) data: 03/05/2016 16:56:47

    Buona sera a tutti. Premetto che ho scarsissima conoscenza di VBA e che le macro le ottengo con il registratore di excel riuscendo, alcune volte, a modificarle un po’ per adattarle a singoli casi.
    Ho un file con dei dati sensibili ordinati come nel Foglio 1. Quello che vorrei è una macro per ottenere un ordinamento come nel Foglio 2, senza dover fare centinaia di volte: foglio1-seleziona-copia-foglio2-incolla speciale- trasponi. Come posso fare? Grazie per l'aiuto!



  • di ninai data: 03/05/2016 17:12:13

    ciao
    se ti accontenti di una formula, in A2:
    =INDICE(Foglio1!$B$1:$B$56;1+(INT(RIF.RIGA(A1)-1)*14)+RESTO(RIF.COLONNA(A1)-1;14))
    e trascini in basso ed a destra



  • di Pascà60 (utente non iscritto) data: 03/05/2016 18:39:40

    Grazie Ninai, avrei preferito una Macro in VBA per non dover poi ricopiare in un terzo foglio i valori con (Copia/Incolla valori) ma in mancanza utilizzerò la tua formula.



  • di Albatros54 data: 03/05/2016 18:41:34

    spulciado ho trova questo codice, con alcuni aggiustamenti lo puoi adattare alle tue esigenze.
    albatros54
     
    Option Explicit
    
    Public RR As Double, I As Double, J As Integer, Passo As Integer
    
    
    
    Sub Trasponi_Dati()
    
    ' I dati da copiare sono in colonna "B"
    
        RR = Range("b" & Rows.Count).End(xlUp).Row
    
        Passo = 14  ' Scrivi il numero di righe per soggetto: modifica il valore
    
        J = 2 ' è la riga di destinazione dei dati trasposti
    
        For I = 1 To RR Step Passo
    
            Range("B" & I & ":B" & I + Passo - 1).Copy
    
    ' I dati vengono copiati sono in colonna "G" a partire dalla riga "1" (valore di "J"): modifica in base alla tue colonne e righe
    
            Range("D" & J).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    
                  J = J + 1
    
        Next I
    
        MsgBox "Trasposizione dei dati Effettuata"
    
    End Sub
    
    






  • di Mister_x (utente non iscritto) data: 03/05/2016 18:44:24

    ciao

    da inserire in un modulo standar
    in base ai tuoi dati

    ciao
     
    Sub trasponiSh1_a_Sh2()
    Dim Sh1, Sh2 As String
    Dim i As Long
    Dim Nriga As Long
    Sh1 = "Foglio1"  ''nome del foglio dove troviamo i dati
    Sh2 = "Foglio2"  ''nome del foglio dove spastarli
    Nriga = 2
    For i = 1 To Sheets(Sh1).Cells(Rows.Count, "B").End(xlUp).Row Step 14
    Sheets(Sh1).Range("B" & i & ":B" & i + 13).Copy
    Sheets(Sh2).Cells(Nriga, "A").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=True
    Nriga = Nriga + 1
    Next
    End Sub






  • di Pascà60 (utente non iscritto) data: 03/05/2016 18:49:40

    Ciao ninai, ho fatto una simulazione con la formula utilizzando una decina di nominativi. Perché da alcune celle in poi mi esce (#RIF!) ? Allego il file con la simulazione.

    Grazie Albatros. Stasera a casa o domani mattina vedrò se riesco ad adattare il codice al mio caso.



  • di ninai data: 03/05/2016 19:22:01

    ciao
    i segnali di errore di riferimento escono quando va a "pescare" fuori dal range delle righe previste nell'INDICE() (tu hai previsto 200).
    Pui ottimizzare la formula, sia aumentando il range di righe sia occultando sia gli zeri che i messaggi di errore,facendola diventare:
    =SE.ERRORE(INDICE(Foglio1!$B$1:$B$200;1+(INT(RIF.RIGA(A1)-1)*14)+RESTO(RIF.COLONNA(A1)-1;14))&"";"")


    CMQ sono d' accordo che in questicasi è meglio il VBA



  • di Pascà60 (utente non iscritto) data: 04/05/2016 10:01:42

    Grazie a tutti per l'aiuto. Ho provato la soluzione di Mister_x e sembra funzionare alla perfezione.
    Pascà60