Condividi:        

[Vba] Macro estrai - copia

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

[Vba] Macro estrai - copia

Postdi mmitola » 10/12/14 15:54

Buonasera a tutti, mi servirebbe una mano su una macro. Purtroppo ho un’urgenza a lavoro e non so davvero da dove partire. Cercherò nelle righe successive di spiegarvi le mie esigenze. Spero di essere preciso ed esaustivo. Vi prego aiutatemi!!!!

Io ho 4 fogli sui quali devo lavorare:
Foglio 1: chiamato “Input”
Foglio 2: chiamato “Inserimento Dati”
Foglio 3: chiamato “Risultato”
Foglio 4: chiamato “Output”
In linea generale l’idea è la seguente:
La macro dovrebbe pescare alcuni dati dal foglio “Input” ed inserirli in precise posizioni del foglio “Inserimento Dati”. Infine dal foglio “Risultato” deve pescare i valori che vanno copiati nel foglio “Output”. Tale ciclo dev’essere ripetuto per 200 righe.
SPIEGAZIONE DEL CICLO:
PASSAGGIO 1
Il foglio “Input” presenta una tabella. La macro dovrebbe fare i seguenti passaggi:
I valori presenti in questa tabella devono essere copiati nel foglio “Inserimento Dati” in precise posizioni seguendo il seguente ordine:

Immagine
PASSAGGIO 2
A questo punto ci dimentichiamo dei primi due fogli e lavoriamo sugli altri due. Il foglio “Output” presenta una tabella.
La macro dovrebbe copiare i valori presenti nel foglio “Risultati” in precise posizioni seguendo il seguente ordine all’interno del foglio “Output”:
Immagine

A questo punto il ciclo è finito.
Per il ciclo successivo le celle di riferimento dei fogli “Inserimento Dati” e “Risultato” rimarranno le stesse, mentre le celle di riferimento del foglio “Input” e “Output” passeranno alla riga sotto. Ad esempio le due tabelle DA ------ A diventeranno le seguenti:
PASSAGGIO 1:
Immagine
PASSAGGIO 2:

Immagine
Grazie ancora per l’aiuto, a prescindere da tutto.
Spero davvero che possiate aiutarmi…. È importantissimo. Vi prego!!!
mmitola
Utente Junior
 
Post: 25
Iscritto il: 01/02/12 21:45

Sponsor
 

Re: [Vba] Macro estrai - copia

Postdi Anthony47 » 11/12/14 23:48

Ma tra un ciclo e l' altro che cosa deve succedere? Perche' se eseguo i cicli uno dopo l' altro avrai in E3-E10-D7-D8 i dati dell' ultimo ciclo mentre nel foglio Output avrai N righe tutte uguali...
Poi, mi confermi che puoi inserire su un ulteriore foglio chiamato "Cross" le due tabelle del primo ciclo, in modo da fare una macro che scorre quegli indirizzi e li processa, senza doversli riscrivere altrove?

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

Re: [Vba] Macro estrai - copia

Postdi mmitola » 12/12/14 16:13

Si, posso inserire tutti i fogli che voglio.
Tuttavia non è un problema avere in E3-E10-D7-D8 i dati dell' ultimo ciclo, tuttavia è sicuramente un problema avere nel foglio Output "n" righe tutte uguali.

Perchè il senso è che i due fogli principali "Inserimento Dati" e "Risultato" dovrei farli "girare" n volte, cambiando di volta in volta i parametri in ingresso per avere poi diversi risultati.

A quel punto mi chiedevo se riassumendo i parametri in ingresso nel foglio "Input" si potesse creare una macro che prendesse i dati organizzati per riga, li inserisse nel foglio "Inserimento Dati" e riportasse nel foglio "Output" i valori prensenti nel foglio "Risultato".

Se tu potessi aiutarmi te ne sarei davvero grato perchè è davvero un lavoraccio farlo a manina.
mmitola
Utente Junior
 
Post: 25
Iscritto il: 01/02/12 21:45

Re: [Vba] Macro estrai - copia

Postdi mmitola » 12/12/14 16:22

Le 200 righe non saranno uguali perchè quando cambio i dati di partenza nel foglio "Inserimento Dati" (che li prende dal foglio "Input"), automaticamente cambieranno i valori presenti nel foglio "Risultato".
Quindi per quel motivo non saranno tutte uguali.
mmitola
Utente Junior
 
Post: 25
Iscritto il: 01/02/12 21:45

Re: [Vba] Macro estrai - copia

Postdi Anthony47 » 12/12/14 23:46

Non hai pero' risposto alla domanda "Ma tra un ciclo e l' altro che cosa deve succedere?", quindi vado avanti a sentimento...
Inserisci in un foglio che chiamerai "Cross" le tabelle di Copiare da /Incollare su; il primo elenco lo metti in colonna B e C, il secondo in G e H.
Lavorando su quanto avevi pubblicato dovrebbe venire come questo:
Immagine
caricare immagini

A questo punto inserisci in un Modulo del tuo vba il seguente codice:
Codice: Seleziona tutto
Sub formmitola()
Dim D1Sh As Worksheet, S1Sh As Worksheet, I As Long, J As Long, CLast As Long, Xoss As Worksheet
'
Set Xoss = Sheets("Cross")
For I = 0 To 1
If I = 0 Then Set D1Sh = Sheets("Inserimento Dati") Else Set D1Sh = Sheets("Output")
If I = 0 Then Set S1Sh = Sheets("Input") Else Set S1Sh = Sheets("Risultato")
CLast = Sheets("Cross").Range("A1").Offset(Rows.Count - 1, 1 + I * 5).End(xlUp).Row
    For J = 1 To CLast
        If I = 0 Then
            D1Sh.Range(Xoss.Cells(J, 3 + I * 5).Value).Value = S1Sh.Range(Xoss.Cells(J, 2 + I * 5).Value).Offset(Xoss.Range("A1"), 0).Value
        Else
            D1Sh.Range(Xoss.Cells(J, 3 + I * 5).Value).Offset(Xoss.Range("A1"), 0).Value = S1Sh.Range(Xoss.Cells(J, 2 + I * 5).Value).Value
        End If
    Next J
Next I
Xoss.Range("A1").Value = Xoss.Range("A1").Value + 1
End Sub

Operativamente:
-da excel, Alt-F11 per aprire l' editor delle macro
-Menu /Inserisci /Modulo
-copia il codice e incollalo nel frame vuoto di dx

Torna poi su excel, compila il foglio Cross, manda in esecuzione la macro (Alt-F8, scegli formmitola dall' elenco che ti propone, premi Esegui).
La macro incrementa il contenuto della cella A1 (inizialmente pari a 0), e questo valore sara' utilizzato per impostare uno scarto sui dati ad ogni esecuzione della macro.
Tra una esecuzione e l' altra della macro "formmitola" aggiornerai con le tue procedure il contenuto dei vari fogli.

Se hai bisogno di ripartire daccapo devi impostare a 0 il contenuto di Foglio Cross, cella A1.

Ciao, fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Vba] Macro estrai - copia

Postdi mmitola » 15/12/14 11:49

Buongiorno,
innanzitutto grazie grazie grazie.
La macro fa esattamente quello che mi serviva, tranne per una cosa.
Ora quando faccio girare la macro fa i due passaggi e mi compila una riga nel foglio "Output". Poi per far compilare la riga successiva devo far girare la macro nuovamente e così via fino a quando non ho compilato tutte le righe che mi servono.
Bene! A me servirebbe automatizzare anche questa cosa, ovvero che con un solo giro di macro io possa compilare tutte le 115 righe che mi servono, anziché far girare la macro per 115 volte.

Ti ringrazio anticipatamente per l'aiuto, sei stato gentilissimo.

Grazie.
mmitola
Utente Junior
 
Post: 25
Iscritto il: 01/02/12 21:45

Re: [Vba] Macro estrai - copia

Postdi Anthony47 » 15/12/14 13:16

Perdona...
Tu dici che al primo giro la macro deve fare questi spostamenti Immagine

Poi al secondo deve fare questi altri:
Immagine

Poiche' in ambedue i casi si va a popolare le celle E3-E10-D7-D8 e' evidente che, se tutti i 115 cicli sono eseguiti nello stesso momento allora i primi 114 cicli sono inutili e rimane solo il dato del 115° ciclo.

Come pure, la seconda parte del ciclo prende sempre i dati da M6-N6-M7-N7-M8 etc etc e li inserisce in F6-G6-H6-I6 etc etc; poi li inserisce in F7-G7-H7-I7 etc etc; poi li inserisce in F8-G8-H8-I8 etc etc; cosi' via fino a inserire sempre gli stessi dati fino a F121-G121-H121-I121 etc etc.

Insomma facendo 115 cicli tutti d' un fiato non vedo l' utilita' della macro.

Comunque se vuoi fare proprio cosi', allora inserisci queste due istruzioni in queste posizioni:
Codice: Seleziona tutto
Set Xoss = Sheets("Cross")
Rezzz:                                          'PRIMA AGGIUNTA
For I = 0 To 1


Codice: Seleziona tutto
Xoss.Range("A1").Value = Xoss.Range("A1").Value + 1
If Xoss.Range("A1").Value <115 then Goto Rezzz                         'SECONDA AGGIUNTA
End Sub


Ma se il risultato ti sta bene allora cancelleremo tutti i cicli e faremo un solo trasferimento sia per la prima tabella (dall' ultima riga di Input) e sa per la seconda tabella (compilando F6-G6-H6-I6 etc etc e poi copiando questa riga nelle 114 righe inferiori).

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


Torna a Applicazioni Office Windows


Topic correlati a "[Vba] Macro estrai - copia":


Chi c’è in linea

Visitano il forum: Nessuno e 51 ospiti