Condividi:        

Accoda Dati In Unica Colonna

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Accoda Dati In Unica Colonna

Postdi ikwae » 22/01/21 22:46

Ciao a tutti … Ho una macro casareccia che funziona bene ma con elevate mole di dati rallenta.
Ho trovato in rete una macro con matrici, va bene per l’80 % ma non riesco a completare il restante 20%.
La macro di aiuto che cerco e, mi rivolgo a tutti coloro che mi possono aiutare, dovrebbe eseguire i seguenti passi:
1) tagliare i dati da B2:B2(end) e accodarli in colonna A con inizio in A2
2) tagliare i dati da C2:C2(end) e accodarli in colonna A
3) tagliare i dati da D2:D2(end) e accodarli in colonna A
4) tagliare i dati da E2:E2(end) e accodarli in colonna A
x) di seguito per tutte le colonne fino alla fine
In allegato un foglio Org una delle tante composizioni di un foglio su cui eseguire la macro.
Un foglio Fine che indica come devono essere i dati dopo l’esecuzione della macro.
Per semplificare la spiegazione la macro che cerco toglie tutte le stringhe delle colonne
tranne le intestazioni e le incolla tutte in colonna A senza lasciare celle vuote (totale stringhe 32.883).
**********.
La macro che ho trovato in rete ha le seguenti anomalie:
1) cancella l’intestazione della colonna A
2) copia le stringhe dalle colonne anziché tagliarle (deve fare Cut e non Copy).
3) lascia delle celle vuote (da una a 5 celle vuote) in colonna A man mano che incolla le stringhe.
Se va bene a modificarla per avere la macro che cerco va bene altrimenti non tenerne conto.
Ringraziando anticipatamente tutti coloro che mi possono aiutare. 73 ikwae
Codice: Seleziona tutto
Sub Macro_Per_ColonnaERERRATA()
    Dim matrix()
    Dim uR As Long
    Dim x As Long
    Dim R As Long
    Dim C As Integer
    Dim uCol As Integer
   
    With Sheets("Tabella1")
        uR = .Cells(Rows.Count, 2).End(xlUp).Row
        uCol = .Cells(2, Columns.Count).End(xlToLeft).Column       
         For C = 1 To uCol
           For R = 2 To uR               
                x = x + 1
                ReDim Preserve matrix(x)
                matrix(x) = .Cells(R, C)
            Next R
        Next C
    End With
    Sheets("Tabella1").Cells(1, 1).Resize(x, 1) = Application.Transpose(matrix)
End Sub


http://www.filedropper.com/accodadatiunicacolonnarete
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Sponsor
 

Re: Accoda Dati In Unica Colonna

Postdi Anthony47 » 23/01/21 03:17

Per esempio:
Codice: Seleziona tutto
Sub OneColumner()
Dim I As Long, oInd As Long, LastC As Long
Dim wArr
'
With Sheets("Org")           '<<< Il foglio di partenza
    LastC = .Cells(1, Columns.Count).End(xlToLeft).Column
    Sheets.Add after:=Sheets(.Name)
    .Range("A1").Resize(1, LastC).Copy Cells(1, 1)
    For I = 1 To LastC
        If .Cells(3, I) <> "" Then
            wArr = .Range(.Cells(2, I), .Cells(2, I).End(xlDown)).Value
''            oInd = oInd + 1
            Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(UBound(wArr), 1).Value = wArr
        End If
        oInd = oInd + 1
    Next I
End With
End Sub

Questa crea un nuovo foglio e ci impila in colonna A tutte le colonne del file di origine
Il file di origine rimane immutato per poter controllare se l'esito e' soddisfacente; volendo si puo' cancellare in coda alla macro.

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Accoda Dati In Unica Colonna

Postdi ikwae » 23/01/21 15:51

Gentilissimo Anthony …. innanzitutto grazie per la risposta sei sempre gentile e disponibile … Ho subito provato la tua macro con il foglio Org e tutto sembra regolare ma ho cambiato il foglio Org con altri dati e i conti non tornano e smanettando con ore di prove e confronti ho capito che se in una colonna c’è una sola stringa (in riga 2) non la riporta in colonna A. Ho smanettato parecchio in tutti i modi con il singolo IF ma non ci sono riuscito.
Ho smanettato per far in modo che scriva sulla colonna A del foglio Org e aggiungendo una riga di codice per cancellare da B2 fino al superfluo manca solo che riporta in colonna A anche le singole stringhe presenti in colonna e poi diventerà la macro dell’aiuto che cerco.
Se hai un po' di tempo e la puoi mettere a posto te ne sarei grato. Ringraziandoti per l'aiuto che mi hai concesso.

Ti allego un semplice foglio con pochi dati per ulteriori indicazioni.

Codice: Seleziona tutto
Sub OneColumner()
Dim I As Long, oInd As Long, LastC As Long
Dim wArr
'
With Sheets("Org")           '<<< Il foglio di partenza
   
     LastC = .Cells(1, Columns.Count).End(xlToLeft).Column
   
    'Sheets.Add after:=Sheets(.Name)'org
    .Range("A1").Resize(1, LastC).Copy Cells(1, 1)
   
    'For I = 1 To LastC 'org
     For I = 2 To LastC ' inizia da B
       
        If .Cells(3, I) <> "" Then
           
           wArr = .Range(.Cells(2, I), .Cells(2, I).End(xlDown)).Value
     
''            oInd = oInd + 1
           Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(UBound(wArr), 1).Value = wArr
           
        End If
    oInd = oInd + 1 '??????
    Next I
End With
     Range("B2:XFD1000000").ClearContents 'aggiunta
     Range("B2").Select 'aggiunta
End Sub


http://www.filedropper.com/accodadatiunicacolonnarete2
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Accoda Dati In Unica Colonna

Postdi Anthony47 » 23/01/21 17:02

Quando la struttura dei dati non e' descritta ognuno la interpreta a piacere...
Quindi possono esserci colonne con una sola cella compilata, dopo l'intestazione.
Ho modificato le righe marcate MMM; prova:
Codice: Seleziona tutto
Sub OneColumner()
Dim I As Long, oInd As Long, LastC As Long
Dim wArr
'
With Sheets("Org")           '<<< Il foglio di partenza
    LastC = .Cells(1, Columns.Count).End(xlToLeft).Column
    Sheets.Add after:=Sheets(.Name)
    .Range("A1").Resize(1, LastC).Copy Cells(1, 1)
    For I = 1 To LastC
        If .Cells(2, I) <> "" Then         'MMM
            wArr = .Range(.Cells(2, I), .Cells(Rows.Count, I).End(xlUp).Offset(1, 0)).Value     'MMM
            Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(UBound(wArr), 1).Value = wArr
        End If
        oInd = oInd + 1
    Next I
End With
End Sub


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Accoda Dati In Unica Colonna

Postdi ikwae » 23/01/21 19:36

Gentilissimo Anthony …. adesso con la tua modifica è tutto a posto funziona bene e i risultati sono esatti….
Ringraziandoti mille e mille volte per la tua disponibilità e pazienza. cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14


Torna a Applicazioni Office Windows


Topic correlati a "Accoda Dati In Unica Colonna":


Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti