Acquista i nostri libri consigliati su Amazon.it
Discussione chiusa
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Come unire fogli di lavoro excel e mescolare le righe

  1. #1
    littlesaint non  in linea Novello
    Ciao a tutti, preciso che sono a zero come macro e vba.
    Ho un file di excel con 230 fogli di lavoro
    Voglio unire tutto in unico foglio di lavoro
    Tenete presente che la prima riga di ogni foglio contiene 7 colonne( che non voglio copiare)

    ecco le colonne:
    NUM DOMANDA A B C D ESATTA

    Una volta riunificato tutto in un unico foglio vorrei mischiare le righe.

    Per spiegarVi bene, questi fogli sono stati convertiti in xls da un file pdf unico di pi pagine e che mi ha creato un foglio per pagina ma a me serve un foglio unico in xls.
    Contengono domande e risposte che voglio unire in unico foglio e mischiarle
    dato che i fogli vanno per argomento e voglio mischiare le domande dei vari argomenti

    Spero di essermi spiegato bene
    Ultima modifica di littlesaint; 25-04-2012 22:00 

  2. #2
    L'avatar di Zer0Kelvin
    Zer0Kelvin non  in linea Scolaretto
    Ciao.
    Puoi provare a usare questa macro (le prove falle sempre su una copia del file MI RACCOMANDO):
    Sub copiaEmischia()
    Dim nsheets As Long, i As Long, nuovo As Worksheet, libero As Long
    Dim riga As Long, ultima As Long, rr As Long, temp As Long
        nsheets = ThisWorkbook.Sheets.Count
        Set nuovo = Sheets.Add(After:=Sheets(nsheets))
        nuovo.Name = "NuovoFoglio"
        For i = 1 To nsheets
            If i > 1 Then
                libero = nuovo.Range("A1").End(xlDown).Row + 1
            Else
                libero = 1
            End If
            ThisWorkbook.Sheets(i).UsedRange.Copy Destination:=nuovo.Cells(libero, 1)
            nuovo.Cells(libero, 1).EntireRow.Delete
        Next i
        With nuovo
            ultima = Range("A1").End(xlDown).Row
            temp = ultima + 1
            For riga = 1 To ultima - 1
                Do
                    rr = Int((ultima * Rnd) + 1)
                Loop Until rr > riga
                Cells(riga, 1).EntireRow.Copy Destination:=Cells(temp, 1)
                Cells(rr, 1).EntireRow.Copy Destination:=Cells(riga, 1)
                Cells(temp, 1).EntireRow.Copy Destination:=Cells(rr, 1)
            Next riga
            Cells(temp, 1).EntireRow.ClearContents
        End With
        set nuovo = Nothing
    End Sub
    
    La macro dapprima crea un nuovo foglio, lo chiama "NuovoFoglio" e ci copia il contenuto di tutti gli altri fogli cancellando ogni volta la prima riga copiata, poi mischia tutte le righe del nuovo foglio.
    Dato il numero di fogli e il conseguente numero di righe in gioco la macro potrebbe metterci parecchio tempo...
    Ultima modifica di Zer0Kelvin; 25-04-2012 23:47 

  3. #3
    littlesaint non  in linea Novello
    Grazie mille ha funzionato in soli 5 minuti

  4. #4
    L'avatar di Zer0Kelvin
    Zer0Kelvin non  in linea Scolaretto
    Pensavo MOLTO peggio; meno male, ciao!

  5. #5
    littlesaint non  in linea Novello
    Scusami, quindi se volessi creare un'altro file dove unisco i fogli ma non li mescolo quale parte dovrei utilizzare della macro?
    Sono proprio ignorante in materia....

  6. #6
    L'avatar di Zer0Kelvin
    Zer0Kelvin non  in linea Scolaretto
    Scusa di che?
    La parte che devi eliminare tutta quella fra
    With nuovo
    ........
    End With
    
    ...e ricorda che l'ignoranza ALLA BASE della conoscenza.
    Chi convinto di sapere tutto non imparer mai nulla.
    Ciao!

  7. #7
    littlesaint non  in linea Novello
    Funzione tutto alla grande!
    B, grazie raro trovare persone volenterose di spiegare a chi alla base
    Quindi se volessi fare viceversa? Mischiare ma non unire?ho provato eliminando alcune parti ma sicuramente tolgo qualcosa di troppo..

    e se alla fine del mischia e copia volessi eliminare gli altri fogli e tenere solo quello nuovo creato possibile farlo?
    Probabilmente per te sono cose di routine eheh
    Ultima modifica di littlesaint; 02-05-2012 23:00 

  8. #8
    L'avatar di Zer0Kelvin
    Zer0Kelvin non  in linea Scolaretto
    Eccoti una versione commentata:
    Sub Mischia(NomeFoglio$) 'mischia tutte le righe del foglio
    'richiede come parametro la stringa del nome del foglio
    Dim  i As Long, riga As Long, ultima As Long, rr As Long, temp As Long, Sh As Worksheet
        Set Sh = ThisWorkbook.Sheets(NomeFoglio)
        With Sh 
            ultima = Range("A1").End(xlDown).Row 'Ultima riga occupata del foglio
            temp = ultima + 1 'riga di "appoggio" che uso per mischiare
            For riga = 1 To ultima - 1 'dalla prima alla penultima riga
                Do
                    rr = Int((ultima * Rnd) + 1) 'scelgo una riga a caso
                Loop Until rr > riga 'se  una riga gia mischiata ripeto il passo precedente
                Cells(riga, 1).EntireRow.Copy Destination:=Cells(temp, 1) 'copio la riga da mischiare nella riga di appoggio
                Cells(rr, 1).EntireRow.Copy Destination:=Cells(riga, 1) 'copio la riga scelta a caso sulla riga da mischiare
                Cells(temp, 1).EntireRow.Copy Destination:=Cells(rr, 1) 'copio la riga di appoggio sulla riga scelta a caso
            Next riga 'passa alla successiva riga da mischiare
            Cells(temp, 1).EntireRow.ClearContents 'cancello la riga di appoggio
        End With 'Sh
        set Sh = Nothing
    End Sub
    
    Public Sub MischiaUnFoglio()
        Mischia("FoglioXYZ")
    End Sub
    
    Per eliminare tutti i fogli tranne l'ultimo:
    Sub EliminaFogli()
        Application.DisplayAlerts = False 'evita che venga visualizzato il
        'messaggio di avviso quando si cancella il foglio
        With ThisWorkbook
            Do While .Sheets.Count > 1 'finch c' pi di un foglio
                .Sheets(1).Delete 'elimina il primo foglio
            Loop ' ripeti
        End With
        Application.DisplayAlerts = True 'ripristina gli avvisi
    End Sub
    
    Ultima modifica di Zer0Kelvin; 03-05-2012 00:25 

  9. #9
    littlesaint non  in linea Novello
    Non capisco perch a volte il mischia mi da errore.
    Io copio semplicemente la macro, senza cambiare niente e la eseguo.
    Devo selezionare le righe?Devo posizionarmi in un punto particolare del foglio?!..non capisco proprio..a volta va e a volte da questo errore:

    errore di run time 9, indice non incluso nell'intervallo.

    e il debug segnala "Set Sh = ThisWorkbook.Sheets(NomeFoglio)"

    tutte le righe/colonne sono nel primo foglio e io da li lancio la macro....


    EDIT: Ooops... mi dimenticavo di scrivere "foglio1" dove scritto Mischia("FoglioXYZ")

  10. #10
    L'avatar di Zer0Kelvin
    Zer0Kelvin non  in linea Scolaretto
    Quindi problema risolto?

Discussione chiusa
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Come unire fogli di lavoro excel
    Da nik23 nel forum Microsoft Excel
    Risposte: 6
    Ultimo Post: 31-03-2015, 20:33
  2. Come Mescolare Casualmente Righe Di Un Foglio Excel
    Da littlesaint nel forum Microsoft Excel
    Risposte: 7
    Ultimo Post: 25-04-2013, 17:03
  3. Unire pi fogli excel
    Da giulia_polito nel forum Presentati
    Risposte: 1
    Ultimo Post: 08-06-2012, 19:50
  4. [Excel] Unire fogli
    Da John nel forum Microsoft Excel
    Risposte: 15
    Ultimo Post: 21-03-2010, 21:46
  5. Excel: unire dati di fogli diversi
    Da Lele73 nel forum Microsoft Excel
    Risposte: 2
    Ultimo Post: 10-07-2008, 17:29