Condividi:        

[Excel]Macro per copiare (parte) di alcune righe

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 per copiare (parte) di alcune righe

Postdi DALVI » 31/05/16 14:57

Buongiorno a tutti...
sono nuovo nel forum e non sono pratico con le Macro di Excel.

Vorrei chiedervi un aiuto in quanto avrei necessità di creare una Macro in Excel che mi permetta di copiare (parte) di alcune righe, se una cella (all'interno di queste) soddisfa una determinata condizione, da un foglio all'altro.

Nel dettaglio, supponiamo che abbia una tabella dati (A5:Z30) nel foglio1 e che voglia copiare nel Foglio2 (a partire da A5..) tutte le righe (da A a Z del Foglio1) per le quali si verifichi la seguente condizione "tra AB5 e AB30 = ad un certo valore indicato nella cella A2 (del Foglio1)".

Qualcuno mi potrebbe indicare la soluzione?

Io ho eseguito un tentativo ma copia solo la riga indicata (5). Non riesco ad estendere la formula a tutta la tabella.
Codice: Seleziona tutto
Private Sub Prova_Click()
If Sheets("Foglio1").Range("AB5") = ("A2") Then
 Selection.Copy
 Sheets("Foglio1").Range("A5:Z5").Copy Sheets("Foglio2").Range("A5:Z5")
    Sheets("Foglio2").Select
 End If
End Sub
Grazie
DALVI
Utente Junior
 
Post: 13
Iscritto il: 31/05/16 14:18

Sponsor
 

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi wallace&gromit » 01/06/16 09:16

Ciao Dalvi, benvenuto nel forum.

potrebbe essere qualcosa così:
Codice: Seleziona tutto
Private Sub Prova_Click()
Set Ws1 = Worksheets("Foglio1")
Set Ws2 = Worksheets("Foglio2")
For i = 5 To 30
If Ws1.Range("AB" & i) = Ws1.Range("A2") Then
 Ws1.Range("A" & i & ":Z" & i).Copy Destination:=Ws2.Range("A" & i & ":Z" & i)
    Sheets("Foglio2").Select
 End If
Next i
End Sub

ma sei sicuro di volere importare in foglio 2 alla stessa riga del foglio 1 (lasciando quindi delle righe vuote)?
In caso positivo considera perlomeno di aggiungere un'istruzione iniziale che cancella i dati presenti nel foglio 2.
In caso negativo usa questa:
Codice: Seleziona tutto
Private Sub Prova_Click()
Set Ws1 = Worksheets("Foglio1")
Set Ws2 = Worksheets("Foglio2")
UR = 5
For i = 5 To 30
If Ws1.Range("AB" & i) = Ws1.Range("A2") Then
 Ws1.Range("A" & i & ":Z" & i).Copy Destination:=Ws2.Range("A" & UR & ":Z" & UR)
 UR = UR + 1
 End If
Next i
    Sheets("Foglio2").Select

End Sub
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi DALVI » 01/06/16 10:41

Ciao Wallace,

grazie mille per la pronta risposta!!
Funziona perfettamente...ho utilizzato l'ultima da te indicata, ovvero quella che non lascia le righe vuote nel foglio di destinazione.
A questo punto azzardo, se possibile, la richiesta di un'ulteriore integrazione.
E' possibile aggiungere il comando che permetta di copiare i dati selezionati (dal "Foglio1") al foglio denominato con lo stesso valore presente nella cella "B2", invece che nel "Foglio2".
Ovvero avrei la necessità di copiare i dati del "Foglio1" nei fogli successivi, che coincidono con il numero dei mesi "01, ..., 12". Anche nella cella B2 infatti è presente il mese di riferimento "01, ..., 12"

Codice: Seleziona tutto
Private Sub Prova_Click()
    Set Ws1 = Worksheets("Foglio1")
    Set Ws2 = Worksheets("Foglio2")
    UR = 5
    For i = 5 To 30
    If Ws1.Range("AB" & i) = Ws1.Range("A2") Then
     Ws1.Range("A" & i & ":Z" & i).Copy Destination:=Ws2.Range("A" & UR & ":Z" & UR)
     UR = UR + 1
     End If
    Next i
        Sheets("Foglio2").Select

    End Sub


Grazie x la disponibilità.
DALVI
Utente Junior
 
Post: 13
Iscritto il: 31/05/16 14:18

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi wallace&gromit » 01/06/16 15:25

è possibile, ma è necessario sapere come si chiamano i fogli o perlomeno a partire da quale foglio iniziano i mesi (p.e. foglio2 = "gennaio" o 01)
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi DALVI » 01/06/16 16:04

Allora, il "Foglio1" è quello dal quale devo prendere i dati, ed è cosi denominato.
I fogli successivi (che partono da quello che in originale era denominato Foglio2,Foglio3,...) invece sono stati rinominati, ovvero "01","02","03",......"12"
DALVI
Utente Junior
 
Post: 13
Iscritto il: 31/05/16 14:18

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi Anthony47 » 04/06/16 00:14

Purtroppo la richiesta e' incompleta; cioe' non e' spiegato se l'obiettivo e' spalmare tutti i dati di Foglio1 nei vari fogli 01, 02, 03 etc o di spostare selettivamente secondo quanto indicato in A2.
Nell'ipotesi che la richiesta sia questa seconda, allora la macro precedente diventa:
Codice: Seleziona tutto
Private Sub Prova_Click()
Set Ws1 = Worksheets("Foglio1")
Set Ws2 = Worksheets(Format(Ws1.Range("A2")))
UR = 5
For i = 5 To 30
    If Ws1.Range("AB" & i) = Ws1.Range("A2") Then
        Ws1.Range("A" & i & ":Z" & i).Copy Destination:=Ws2.Range("A" & UR & ":Z" & UR)
        UR = UR + 1
    End If
Next i
'Sheets("Foglio2").Select
End Sub

(assumendo che il codice precedente era soddisfacente per la copia in Foglio2).

Se invece e' "la prima che ho detto" allora sappi che io non vedo mai di buon occhio lo smembrameno dei dati (puoi ottenere i risultati che cerchi lavorando sul database completo), e comunque dovresti chiarire se i dati sottostanti riga 5 di ogni foglio possono essere azzerati prima di copiarvi i nuovi, o se invece i nuovi vanno accodati ai precedenti.

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

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi DALVI » 06/06/16 10:30

Buongiorno,
grazie per il continuo supporto. A questo punto cerco di spiegarmi meglio....
Allora nel "Foglio1" ho la tabella dati nella sezione (A5:Z30).
Dopo questo foglio, ho ulteriori 12 fogli denominati "01","02",....,"12" che corrispondono ai mesi dell'anno.
Il mio scopo è selezionare e copiare i dati del "Foglio1" da "A5" a "Z30" in base al mese di riferimento, indicato nello stesso foglio nelle celle "AB5:AB30" ed incollarli nei fogli "01","02",....,"12" rispettivamente nelle sezioni partendo da "A5" dei rispettivi fogli.
La selezione dei dati della tabella (Foglio1) deve avvenire in base al mese selezionato, indicato dal valore presente nella cella "B2" del "Foglio1".
Quindi, riassumendo, se seleziono il valore "03" (della cella B2 del "Foglio1") e avvio la macro, voglio selezionare e copiare i dati nel foglio corrispondente "03". Quindi andrò a copiare i dati relativi al mese di marzo e incollarli nel relativo foglio.
Sperio di non aver confuso ulteriormente le idee.
Grazie nuovamente
DALVI
Utente Junior
 
Post: 13
Iscritto il: 31/05/16 14:18

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi Anthony47 » 06/06/16 13:31

Insomma e' "la prima che avevo detto", che quindi dovrebbe corrispondere al codice che avevo pubblicato; hai gia' provato?

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

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi DALVI » 07/06/16 09:17

Ciao,

ho provato nuovamente la macro da te indicata. Purtroppo non funziona in quanto si ferma su questi comandi:

Set Ws2 = Worksheets(Format(Ws1.Range("A2")))
dove mi indica "Errore di run-time '9' "

Inoltre:

Sheets("Foglio2").Select
questo credo che non funzioni in quanto non esistono più "Foglio2" ma bensì "01","02"..., coincidono cioè con i mesi.
DALVI
Utente Junior
 
Post: 13
Iscritto il: 31/05/16 14:18

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi Anthony47 » 08/06/16 00:26

Beh, ha ragione lui... :oops:
L'istruzione giusta e':
Codice: Seleziona tutto
Set Ws2 = Worksheets(Format(Ws1.Range("A2"), "00"))

(eppure mi sembrava di averlo gia' scritto, oltre che gia' pensato)

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

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi DALVI » 29/08/16 17:08

Salve a tutti,
ho utilizzato le indicazioni da voi fornite

Codice: Seleziona tutto
    Private Sub Prova_Click()
    Set Ws1 = Worksheets("Foglio1")
    Set Ws2 = Worksheets(Format(Ws1.Range("A2"), "00"))
    UR = 5
    For i = 5 To 30
        If Ws1.Range("AB" & i) = Ws1.Range("A2") Then
            Ws1.Range("A" & i & ":Z" & i).Copy Destination:=Ws2.Range("A" & UR & ":Z" & UR)
            UR = UR + 1
        End If
    Next i
    'Sheets("Foglio2").Select
    End Sub


vi confermo che funziona tutto alla grande ;)

Sono a chiedervi nuovamente un aiuto...
Una volta ottenuta l'estrazione dei dati nel nuovo foglio (supponiamo relativo al mese di gennaio, denominato "01"), è possibile attivare un'altra macro che mi estragga su un nuovo file i fogli denominati: "Foglio1" e quello corrispondente al mese prescelto nella cella A2 (supponiamo relativo al mese di gennaio, indicato con "01")???
Grazie a chiunque potrà aiutarmi...
DALVI
Utente Junior
 
Post: 13
Iscritto il: 31/05/16 14:18

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi Anthony47 » 30/08/16 01:57

è possibile attivare un'altra macro che mi estragga su un nuovo file i fogli denominati: "Foglio1" e quello corrispondente al mese prescelto nella cella A2 (supponiamo relativo al mese di gennaio, indicato con "01")???
Purtoppo non so che cosa tu intenda per "estrarre"; se vuoi spostare su un nuvo file i fogli Foglio1 e quello indicato in A2 di Foglio1 allora potrai farlo con l'istruzione
Codice: Seleziona tutto
    ThisWorkbook.Sheets(Array("Foglio1", Format(Sheets("Foglio1").Range("A2"), "00"))).Move

Se intendi qualcosa di diverso allora devi spiegare nuovamente.

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

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi DALVI » 30/08/16 23:31

Ciao Anthony47,

grazie per l'aiuto, in effetti non era molto chiara la mia richiesta, ad ogni modo volevo copiare i fogli su un nuovo file. Ci sono riuscito mettendo .copy e l'istruzione da te indicata funziona alla perfezione.
Supponendo che ora volessi copiare il "Foglio1", il foglio indicato dalla cella "A2", ed il "Foglio13", per poi metterli in tale ordine:
"Foglio13", "Foglio(indicato da "A2")", e "Foglio1" e selezionare infine il "Foglio13".
Come posso modificare la precedente istruzione?
Grazie ancora.
DALVI
Utente Junior
 
Post: 13
Iscritto il: 31/05/16 14:18

Re: [Excel]Macro per copiare (parte) di alcune righe

Postdi Anthony47 » 31/08/16 00:27

Devi aggiungere nell'array tutti i nomi dei fogli che vuoi spostare; poi fai lo spostamento nel file creato:
Codice: Seleziona tutto
ThisWorkbook.Sheets(Array("Foglio1", "Foglio13", Format(Sheets("Foglio1").Range("A2"), "00"))).Copy
    Sheets("Foglio13").Move before:=Sheets(1)
    Sheets("Foglio1").Move after:=Sheets(Sheets.Count)
    Sheets("Foglio13").Select

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


Torna a Applicazioni Office Windows


Topic correlati a "[Excel]Macro per copiare (parte) di alcune righe":


Chi c’è in linea

Visitano il forum: Nessuno e 30 ospiti