Trasposizione dati colonna riga
Hai un problema con Excel? 
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
Vuoi Approfondire?