Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

EXCEL - MACRO CREA NUOVA CARTELLA

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

EXCEL - MACRO CREA NUOVA CARTELLA

Postdi eleinad75 » 14/06/12 14:18

Salve a tutti,
ho questo quesito: ho una cartella excel con un unico foglio che riporta vari dati.

Nella colonna "A" viene riportato un codice alfanumerico.

Vorrei creare una macro che ogni qualvolta che il codice alfanumerico riportato nella colonna "A" cambia
mi crea e mi salva una nuova cartella excel con il nome del codice alfanumerico e che riporti tutte le righe con
quel codice alfanumerico.

Bel dilemma, vero?

Ho provato a cercare tra il forum ma..... sto impazzendo!!!

Grazie per il prezioso aiuto!
eleinad75
Utente Junior
 
Post: 54
Iscritto il: 22/02/06 10:13

Sponsor
 

Re: EXCEL - MACRO CREA NUOVA CARTELLA

Postdi patel » 14/06/12 19:18

allega un link al file che hai preparato inserendo spiegazioni più dettagliate
patel
Utente Senior
 
Post: 124
Iscritto il: 24/04/12 16:03

Re: EXCEL - MACRO CREA NUOVA CARTELLA

Postdi Anthony47 » 14/06/12 23:03

Prova una macro come questa:
Codice: Seleziona tutto
Sub eleinad()
Dim DataStart As String, SerieSt As Long, Serie1st As String, I As Long, LastA As Long
'
myPath = "C:\Users\UTENTE\Desktop\DA_PC-FACILE\"  '<<< Directory in cui si scriveranno
'                                                    i nuovi file
DataStart = "A1"  '<<< L' inizio dei dati
Sheets(1).Select
LastA = Cells(Rows.Count, 1).End(xlUp).Row
SerieSt = Range(DataStart).Row: Serie1st = Cells(SerieSt, 1)
For I = Range(DataStart).Row To LastA + 2
    If Cells(I, 1).Value <> Serie1st Then
        ActiveSheet.Copy
        Cells(I, 1).Resize(LastA - 1 + 1, 1).EntireRow.Select
        Cells(I, 1).Resize(LastA - 1 + 1, 1).EntireRow.Delete
        If SerieSt > 1 Then _
            Cells(1, 1).Resize(SerieSt - 1, 1).EntireRow.Delete
        ActiveWorkbook.SaveAs Filename:= _
            myPath & Cells(1, 1).Value & ".xlsx", FileFormat:= _
            xlOpenXMLWorkbook, CreateBackup:=False
        ActiveWorkbook.Close
        SerieSt = I: Serie1st = Cells(I, 1).Value
    End If
Next I
End Sub

Personalizza le linee marcate <<<; in particolare la Directory in cui i file saranno salvati deve esistere, e nell' istruzione deve essere seguita dalla "\"; suggerisco di fare le prove in una directory vuota.
Le istruzioni per il salvataggio sono per XL2010; se usi una versione precedente usa invece
Codice: Seleziona tutto
    ActiveWorkbook.SaveAs Filename:= _
            myPath & Cells(1, 1).Value & ".xls", FileFormat:=xlNormal, _
   Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
   CreateBackup:=False

Ovviamente dovresti garantire che in colonna A non siano usati caratteri incompatibili con la convenzione dei nomi file di windows...

Se quanto scritto sopra non e' adattabile alla tua situazione allora spiega perche' il risultato non e' idoneo e metti in linea un file campione da usare per le prove congiunte.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL - MACRO CREA NUOVA CARTELLA

Postdi eleinad75 » 19/06/12 14:10

FUNZIONAAAAAAAAA!!!


Domandina: come posso fare in modo che nelle cartelle che mi crea viene sempre riportata la prima
riga in cui è scritto anche il "nome" della colonna

Ad esempio nella cella "B1" ho scritto "IMPORTO", nella cella "C1" ho scritto "DATA.

Come posso fare in modo che nelle nuove cartelle che mi vengono create venga riportato ciò che
ho scritto in B1, C1, D1, ecc.

Grazie
Saluti
Daniele
eleinad75
Utente Junior
 
Post: 54
Iscritto il: 22/02/06 10:13

Re: EXCEL - MACRO CREA NUOVA CARTELLA

Postdi patel » 19/06/12 16:31

prova questa
Codice: Seleziona tutto
    Sub CreaFile()
    Dim DataStart As String, SerieSt As Long, Serie1st As String, I As Long, LastA As Long
    '
    myPath = "D:\DATI\PROVA\"  '<<< Directory in cui si scriveranno
    '                                                    i nuovi file
    DataStart = "A2"  '<<< inizio dei dati
    Sheets(1).Select
    LastA = Cells(Rows.Count, 1).End(xlUp).Row
    SerieSt = Range(DataStart).Row: Serie1st = Cells(SerieSt, 1)
    For I = Range(DataStart).Row To LastA + 2
        If Cells(I, 1).Value <> Serie1st Then
            ActiveSheet.Copy
            'Cells(I, 1).Resize(LastA, 1).Select
            Cells(I, 1).Resize(LastA, 1).EntireRow.Delete
            If SerieSt > 2 Then _
                Cells(2, 1).Resize(I - 3, 1).EntireRow.Delete
            ActiveWorkbook.SaveAs Filename:= _
                myPath & Cells(2, 1).Value & ".xlsx", FileFormat:= _
                xlOpenXMLWorkbook, CreateBackup:=False
            ActiveWorkbook.Close
            SerieSt = I: Serie1st = Cells(I, 1).Value
        End If
    Next I
    End Sub
patel
Utente Senior
 
Post: 124
Iscritto il: 24/04/12 16:03

Re: EXCEL - MACRO CREA NUOVA CARTELLA

Postdi eleinad75 » 25/09/12 15:38

Salve a tutti, faccio seguito al POST. Anche se un pò vecchiotto........ per un casino di cose da fare non l'avevo più approfondito.
La macro consigliata FUNZIONA ma.......
Ad eccezione della prima nuova cartella che mi crea con tutte le righe che riportano il medesimo codice,
le altre nuove cartelle che mi crea contengono solamente l'ultima riga del medesimo codice riportato
nella colonna "A".

Per chiarezza faccio un esempio fattivo.
Questo è il mio foglio dati

A B C
1 COD DESCRIZIONE NOTE
2 1 RIETI SEDE 123456789
3 1 RIETI SEDE 123456791
4 1 RIETI SEDE 123456793
5 2 RIETI 1 123456795
6 2 RIETI 1 123456797
7 2 RIETI 1 123456799
8 3 RIETI 2 123456801
9 3 RIETI 2 123456803
10 3 RIETI 2 123456805


Lanciano la MACRO mi viene creata la cartella/file excel con nome "1" contenente i dati delle righe n. 2,3,4 oltre alla riga n. 1
che contiene l'intestazione delle colonne.
I successivi file che mi vengono creati con i nomi "2" e "3" contengono solamente l'ultima riga con il medesimo codice (colonna A)
ossia nel file "2" trovo solamente i dati contenuti nella riga n. 7 e non anche quelli della riga n. 5 e 6.
Nel file "3" trovo solamente i dati della riga 10 e non anche quelli della riga 8 e 9 che hanno lo stesso codice riportato
nella colonna A.

Dove sta l'intoppo?
un grazie immenso!
eleinad75
Utente Junior
 
Post: 54
Iscritto il: 22/02/06 10:13

Re: EXCEL - MACRO CREA NUOVA CARTELLA

Postdi Flash30005 » 25/09/12 22:18

Prova questa macro
Codice: Seleziona tutto
Sub CreaFile()
Dim DataStart As String, SerieSt As Long, Serie1st As String, I As Long, LastA As Long
Set Ws1 = Worksheets("Foglio1")  '<<<<<<<<<<< inserisci il nome del foglio al posto di Foglio1
Set Ws2 = Worksheets("Foglio2")  '<<<<<<<<<< foglio di appoggio se già utilizzato da altri dati cambia nome al foglio
myPath = ThisWorkbook.Path & "\"
UR1 = Ws1.Cells(Rows.Count, 1).End(xlUp).Row + 1
Rini = 2
For RR1 = 2 To UR1
Cod = Ws1.Range("A" & RR1).Value
If Cod <> Ws1.Range("A" & RR1 + 1).Value Then
Ws1.Range(Cells(Rini, 1), Cells(RR1, 3)).Copy Destination:=Ws2.Range("A1")
Rini = RR1 + 1
Ws2.Select
    Ws2.Copy
    ActiveWorkbook.SaveAs Filename:=myPath & Cod & ".xls", FileFormat:=xlNormal
    ActiveWorkbook.Close
    Cells.ClearContents
    Ws1.Select
End If
Next RR1
End Sub


Vedi note all'interno macro

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: EXCEL - MACRO CREA NUOVA CARTELLA

Postdi eleinad75 » 26/09/12 08:04

Ho provato la nuova macro.

Mi crea e salva i file correttemente riportando tutti i dati con il medesimo codice riportato nella colonna A.

Però:

1) Mi dà un "errore di compatibilità" (forse perchè sto utilizzando Excel 2010 e sto salvando in formato XLS?)

2) Non riporta l'intera riga con i dati (mi riporta solamente i dati delle colonne A, B e C mentre io ho dati fino alla colonna Z)

3) Non riporta l'intestazione della prima riga deve è riportata la "descrizione della colonna"


Con l'altra macro riuscivo a copiare anche la riga n. 1 che contiene l'intestazione delle colonne ma..... non riesco a capire qual'è
l'istruzione che dice "copia la riga n. 1".......

G R A Z I E
eleinad75
Utente Junior
 
Post: 54
Iscritto il: 22/02/06 10:13

Re: EXCEL - MACRO CREA NUOVA CARTELLA

Postdi Flash30005 » 26/09/12 13:43

!) forse :roll: (prova a salvarlo come 2010 xlsm (che contenga macro)
2) modificata per copiare fino alla colonna 250 (colonna IP), con 2010 puoi andare oltre
3) ora copia la testata

Codice: Seleziona tutto
Sub CreaFile()
Dim DataStart As String, SerieSt As Long, Serie1st As String, I As Long, LastA As Long
Set Ws1 = Worksheets("Foglio1")
Set Ws2 = Worksheets("Foglio2")
myPath = ThisWorkbook.Path & "\"
UR1 = Ws1.Cells(Rows.Count, 1).End(xlUp).Row + 1
Rini = 2
For RR1 = 2 To UR1
Cod = Ws1.Range("A" & RR1).Value
If Cod <> Ws1.Range("A" & RR1 + 1).Value Then
Ws1.Range(Cells(1, 1), Cells(1, 250)).Copy Destination:=Ws2.Range("A1")
Ws1.Range(Cells(Rini, 1), Cells(RR1, 250)).Copy Destination:=Ws2.Range("A2")
Rini = RR1 + 1
Ws2.Select
    Ws2.Copy
    ActiveWorkbook.SaveAs Filename:=myPath & Cod & ".xls", FileFormat:=xlNormal
    ActiveWorkbook.Close
    Cells.ClearContents
    Ws1.Select
End If
Next RR1
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: EXCEL - MACRO CREA NUOVA CARTELLA

Postdi eleinad75 » 26/09/12 14:44

Funziona che è una meraviglia!
Grazie infinite!
Sei proprio un mago!
eleinad75
Utente Junior
 
Post: 54
Iscritto il: 22/02/06 10:13


Torna a Applicazioni Office Windows


Topic correlati a "EXCEL - MACRO CREA NUOVA CARTELLA":


Chi c’è in linea

Visitano il forum: Nessuno e 46 ospiti