Macro per trasposizione dati

Anonimo
2024-04-24T12:39:06+00:00

Salve,

ho un foglio dati contenente in una sola colonna (e fino altre riga 6000) tre dati diversi (tipo Nominativo, Sede e Telefono) da riorganizzare in un nuovo foglio di lavoro su tre distinte colonne.

A complicare le cose queste serie di dati sono intervallate costantemente da tre righe vuote: ho passato un bel po' di tempo a cercare, trovando anche una soluzione che facesse al mio caso ma poi non ha funzionato. Ed un rookie come me non è assolutamente in grado di mettere mano ad una macro in VB (rimpiango le registrazioni macro delle prime versioni di excel, roba di 30 anni fa!).

Qualcuno è in grado di aiutarmi?

Allego un esempio della tabella in questione con il layout di quella da ottenere...

Tizio Tizio Nomentano 1234567
Nomentano Caio Garbatella 9875464
1234567 Sempronio Ostiense 78210373
Cesare Laurentino 24681012
Caio
Garbatella
9875464
Sempronio
Ostiense
78210373
Cesare
Laurentino
24681012

[corretto il titolo]

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Gianfranco55 25,190 Punti di reputazione Moderatore volontario
2024-04-24T13:53:06+00:00

ciao

se hai il 365 da tirare a destra per tre colonne e in basso

=A.CAPO.RIGA(FILTRO($A$1:$A$6500;$A$1:$A$6500<>"";"");3)

se non l'hai

in una colonna esempio H1 da tirare in basso

=SE.ERRORE(INDICE($A$1:$A$6000;AGGREGA(15;6;RIF.RIGA($1:$6000)/($A$1:$A$6000<>"");RIF.RIGA(A1)));"")

e la formula diventa

=INDICE($H$1:$H$5999;RIF.RIGA($A1)*3-3+RIF.COLONNA(A$1))

La risposta è stata utile?

2 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Gianfranco55 25,190 Punti di reputazione Moderatore volontario
2024-04-24T14:26:13+00:00

ciao

Poi provo le altre formule.

hanno lo stesso problema perchè elimino le celle vuote

se sono sempre tre righe vuote di scarto

=LET(col;A.CAPO.RIGA(A1:A600;6;"");SE(col=0;"";col))

ma 6 colonne devono essere vuote

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2024-04-24T16:24:10+00:00

    Ciao,

    anche se hai già la soluzione con le formule ti propongo, per curiosità, una possibile procedura VBA.

    Parto dal presupposto che i dati partano da A1 (altrimenti occorre cambiare i parametri per assegnare l'intervallo dati) e che i dati vengano riportati in D1.

    Altro presupposto che i dati siano sempre di "tre in tre" e che sia presente sempre almeno il primo valore del nominativo.

    Potrebbero non essere presenti i due successivi.

    Sub TrasponiDati() 
    
       Dim rng As Range 
    
       Dim nR As Long 
    
       Dim i As Long 
    
       Dim arrIn As Variant 
    
       Dim arrOut() As String 
    
       Dim contR As Long 
    
       Set rng = Intersect(ActiveSheet.UsedRange, Columns("A")) 
    
       nR = rng.Rows.Count 
    
       arrIn = rng.Value 
    
       For i = 1 To nR Step 3 
    
          If arrIn(i, 1) <> "" Then 
    
             contR = contR + 1 
    
             ReDim Preserve arrOut(1 To 3, 1 To contR) 
    
             arrOut(1, contR) = arrIn(i, 1) 
    
             If i + 1 <= nR Then arrOut(2, contR) = arrIn(i + 1, 1) 
    
             If i + 2 <= nR Then arrOut(3, contR) = arrIn(i + 2, 1) 
    
          End If 
    
       Next i 
    
       Range("D1").CurrentRegion.ClearContents 
    
       If contR > 0 Then 
    
          Range("D1").Resize(contR, 3).Value = Application.Transpose(arrOut) 
    
       End If 
    
    End Sub 
    

    Prova a vedere se funziona con i tuoi dati reali.

    ciao

    La risposta è stata utile?

    2 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  2. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2024-04-24T17:35:34+00:00

    ciao

    a me piace molto la macro di casanmaner

    comunque limiamo le colonne nella formula

    =SCEGLI.COL(LET(col;A.CAPO.RIGA(A1:A600;6;"");SE(col=0;"";col));SEQUENZA(3))

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  3. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2024-04-24T14:41:36+00:00

    ciao

    mai sottovalutare noi formula dipendenti😀

    poi il 365 aiuta moltissimo con l'espansione dei dati

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento