Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] - Spacchettare un foglio di lavoro in porzioni

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] - Spacchettare un foglio di lavoro in porzioni

Postdi charlie23 » 06/11/07 10:05

Salve, ho un file excel composto da due fogli : un MASTER e un APPOGGIO.
Nel foglio MASTER ci sono una serie di valori; in una delle colonne, c'è il valore discriminante (Filiale).
L'intervallo delle celle (ad es. A:G oppure A:L) e anche il valore dove risiede il campo Filiale può trovarsi nella colonna A oppure una qualsiasi altra dell'intervallo.
Attualmente con una macro (che vado ad adattare volta per volta) scompatto il file originale in tanti sub-file che chiamo Master_1 - Master_2 ecc... tramite il foglio APPOGGIO.

IL PROBLEMA E' :
Come faccio a creare delle variabili che tramite InputBox l'utente personalizza che evitino l'editazione manuale della macro ???
Tipo :
1) Di quante colonne è composto il foglio ?
2) Qual'è la cella dove trovo il campo filiale ?


L'attuale macro è la seguente : (in questo caso l'intervallo è A:G e la colonna di riferimento è B)

Sub Spacchetta()
Dim Target As String
Sheets("Master").Select
Cells.Select
Selection.Copy
Sheets("Appoggio").Select
Cells.Select
ActiveSheet.Paste
Range("A1").Select
ActiveCell.CurrentRegion.Select
Application.CutCopyMode = False
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Do 'While Target <> ""
riga = 1
Range("B2").Select
Target = ActiveCell.Value
Do While Target = ActiveCell.Value
ActiveCell.Offset(1, 0).Select
riga = riga + 1
If Target = "" Then
Exit Do
End If
Loop
If Target = "" Then
Exit Do
End If
Rows("1:" & riga).Select
Selection.Copy
Workbooks.Add
Range("A1").Select
ActiveSheet.Paste
Columns("A:G").Select
Columns("A:G").EntireColumn.AutoFit
Range("A1").Select
ActiveWorkbook.SaveAs Filename:="C:\Temp\Master_" & Target & ".xls", FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
Range("A2").Select
ActiveWorkbook.Close
Rows("2:" & riga).Select
Selection.Cut
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range("A2").Select

Loop 'While Target <> ""
End Sub
charlie23
Newbie
 
Post: 5
Iscritto il: 05/11/07 17:48

Sponsor
 

Postdi Anthony47 » 06/11/07 15:21

Non so se ho capito bene il problema posto, giacche' tu stesso delinei la possibile soluzione: usi due inputbox per chiedere all' utente le informazioni e poi ne usi il valore restituito.
Quindi, una combinazione quale:

Codice: Seleziona tutto
Area = InputBox("Quali colonne vanno importate, es A:G? ")
FiliCol = InputBox("Quale colonna identifica la Filiale? ")
'qui e' opportuna qualche verifica di consistenza sulle risposte...
'

poi userai:
Codice: Seleziona tutto
Range(Area).Select          'sostituisce Columns("A:G").Select
'
Range(FiliCol & 2).Select   'sostituisce Range("B2").Select


Se il problema era un' altro, posta ancora.
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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

[Excel] - Spacchettare un foglio di lavoro in porzioni

Postdi charlie23 » 06/11/07 16:44

Il mio problema è che la macro è il frutto di una registrazione su un caso specifico.
Attualmente la adatto con le mie "scarse" conoscenze del linguaggio macro.

Sto tentando di fare qualcosa del tipo che stai suggerendo ma manca sempre qualcosa per arrivare in fondo.

Saresti così "umano" da ritoccare il codice che ho postato con le soluzioni da te proposte ?

Il senso della soluzione sarebbe come dicevo nella prima richiesta definire un'area variabile con colonna di ripartizione anch'essa variabile (il tutto definito dall'utente mediante inputbox

Grazie in anticipo
charlie23
Newbie
 
Post: 5
Iscritto il: 05/11/07 17:48

Postdi Anthony47 » 06/11/07 19:39

Pensavo che non fosse difficile...

Codice: Seleziona tutto
Sub Spacchetta()
Dim Target As String
Sheets("Master").Select
Cells.Select
Selection.Copy
Sheets("Appoggio").Select
Cells.Select
ActiveSheet.Paste
Range("A1").Select
ActiveCell.CurrentRegion.Select
Application.CutCopyMode = False
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Area = InputBox("Quali colonne vanno importate, es A:G? ")   '<<<<<<<<
FiliCol = InputBox("Quale colonna identifica la Filiale? ")  '<<<<<<<<<<<<

Do 'While Target <> ""
riga = 1
Range(FiliCol & 2).Select       '<<<<<<<<<<<<<<<<
Target = ActiveCell.Value
Do While Target = ActiveCell.Value
ActiveCell.Offset(1, 0).Select
riga = riga + 1
If Target = "" Then
Exit Do
End If
Loop
If Target = "" Then
Exit Do
End If
Rows("1:" & riga).Select
Selection.Copy
Workbooks.Add
Range("A1").Select
ActiveSheet.Paste
Range(Area).Select           '<<<<<<<<<<<<<<<
Range(Area).EntireColumn.AutoFit  '<<<<<<<<<<<<<
Range("A1").Select
ActiveWorkbook.SaveAs Filename:="C:\Temp\Master_" & Target & ".xls", FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
Range("A2").Select
ActiveWorkbook.Close
Rows("2:" & riga).Select
Selection.Cut
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range("A2").Select

Loop 'While Target <> ""
End Sub


Le righe modificate /aggiunte sono marcate <<<<<<<<<

I messaggi cambiali a tuo piacere.
Non ho inserito nessuna verifica di correttezza delle risposte, perche' non saprei che controllare; ne' ho toccato altrove la macro, anche se si possono fare delle semplificazioni, quali invece di
If Target = "" Then
Exit Do
End If

Usare
Codice: Seleziona tutto
If Target = "" Then Exit Do


D' altra parte non sapendo esattamente l' elaborazione che devi fare e' meglio non toccare.

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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Anthony47 » 06/11/07 19:40

E ..sempre due copie di backup dei dati originali.

Ri-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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] - Spacchettare un foglio di lavoro in porzioni":


Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti