Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

excel 2003 - duplicare records

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 2003 - duplicare records

Postdi femon » 07/01/15 12:26

Salve,
avrei necessità di creare una macro che data una tabella di x righe (ogni volta variabili) mi leggesse la colonna "quantità" e mi copiasse quel record duplicandolo tante volte quanto indicato dal valore quantità (copiandolo in un foglio nuovo aggiunto) fino ad arrivare alla fine della tabella dove trova la quantità vuota.
In sintesi dove trova quantità =1 mi copia e incolla quel record 1 sola volta, ma dove trova un valore come 2 o 3 o 4 o più mi duplica lo stesso record 2 o 3 o 4 o più volte.
Grazie in anticipo a chi può aiutarmi.
Buon anno.
Federico.
femon
Utente Junior
 
Post: 47
Iscritto il: 12/03/14 18:51

Sponsor
 

Re: excel 2003 - duplicare records

Postdi ricky53 » 07/01/15 16:06

Ciao,
che intervallo di colonne va copiato?
In quale colonna si trova la quantità?
Il foglio su cui copiare esiste o va creato?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: excel 2003 - duplicare records

Postdi ricky53 » 07/01/15 16:45

Ciao,
un tentativo con le seguenti ipotesi:
1. il foglio DAL quale copiare i dati è il "Foglio1"
2. il foglio SUL quale copiare i dati è il "Foglio2"
3. "A" e "B" sono le colonne del Foglio1 da copiare in multipli
4. la quantità sono in colonna "C" del Foglio1
5. i dati, nel "Foglio2" verranno copiati a partire dalla colonna "A"
Codice: Seleziona tutto
Sub Copia_Dati_su_più_Righe()
    Dim WS1 As Worksheet, WS2 As Worksheet, Quantita As Integer, RNG1 As Range, I As Long, UR As Long
   
    Set WS1 = Sheets("FOGLIO1") ' <<===== QUI scrivi il nome del foglio DAL quale copiare i dati
    Set WS2 = Sheets("FOGLIO2") ' <<===== QUI scrivi il nome del foglio SUL quale copiare i dati

    Ur = WS1.Range("A" & Rows.Count).End(xlUp).Row
    For I = 2 To UR
        Set RNG1 = WS1.Range("A" & I & ":B" & I) ' <<===== Adatta le colonne
        Quantita = WS1.Cells(I, "C") ' <<===== Cambia la colonna
        RNG1.Copy Destination:=WS2.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Resize(Quantita, 1)  ' <<===== Cambia la colonna
    Next I
End Sub
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: excel 2003 - duplicare records

Postdi femon » 08/01/15 11:39

Ciao Ricky53 grazie x il tuo interessamento.

Dunque la tua macro mi risponde che non trova nessuna cella.

Io ho rinominato il foglio da dove prendere i dati in Foglio1
Ho inserito un nuovo foglio a fianco chiamandolo Foglio2
Ho specificato la colonna delle Quantità che è la lettera T
Le colonne da copiare sarebbero dalla A fino alla lettera AF (dunque compresa anche la T).
Grazie ancora.
Federico
femon
Utente Junior
 
Post: 47
Iscritto il: 12/03/14 18:51

Re: excel 2003 - duplicare records

Postdi Anthony47 » 08/01/15 12:13

Partendo da quanto scritto da Ricky:
Codice: Seleziona tutto
Sub Copia_Dati_su_più_Righe()
Dim WS1 As Worksheet, WS2 As Worksheet, Quantita As Integer, RNG1 As Range, I As Long, UR As Long
'
Set WS1 = Sheets("FOGLIO1")     ' <<===== QUI scrivi il nome del foglio DAL quale copiare i dati
Set WS2 = Sheets("Foglio11")    ' <<===== QUI scrivi il nome del foglio SUL quale copiare i dati
QtCol = "T"                     ' << La colonna della quantita'
myCol = "A1:AF1"                ' << Le colonne da copiare, in questo formato
'
WS1.Select
UR = Evaluate("=MAX((A1:AF10000<>"""")*(ROW(A1:A10000)))")
    For I = 2 To UR
        Set RNG1 = WS1.Range("A" & I & ":AF" & I) ' <<===== Adatta le colonne
        Quantita = WS1.Cells(I, QtCol)
        If Quantita = 0 Then Exit For
        nextL = WS2.Cells(Rows.Count, QtCol).End(xlUp).Row + 1
        WS1.Range(myCol).Offset(I - 1, 0).Copy Destination:= _
            WS2.Cells(nextL, 1).Resize(Quantita, 1)
    Next I
End Sub

Le righe marcate << sono da modificare, se non collimano con i tuoi dati.

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

Re: excel 2003 - duplicare records

Postdi ricky53 » 08/01/15 15:13

Ciao,
leggi quanto ti ha scritto Anthony.

Strano che la mia macro ti abbia
"risposto che non trova nessuna cella"
perchè il codice che ho scritto non ha messaggi da emettere.
Sicuro di aver cambiato correttamente oppure hai fatto delle aggiunte ...?

Potresti avere dei problemi SOLO se una cella della colonna "T" (Quantità) non contiene un valore o contiene "zero" !!!
Io avevo dato per CERTO che ogni cella della colonna quantità avesse un valore e che fosse maggiore di zero !!!
In tal caso ti propongo questa modifica che tiene conto di questo caso:
Codice: Seleziona tutto
Sub Copia_Dati_su_più_Righe()
    Dim WS1 As Worksheet, WS2 As Worksheet, Quantita As Integer, RNG1 As Range, I As Long, UR As Long
   
    Set WS1 = Sheets("FOGLIO1") ' <<===== QUI scrivi il nome del foglio DAL quale copiare i dati
    Set WS2 = Sheets("FOGLIO2") ' <<===== QUI scrivi il nome del foglio SUL quale copiare i dati

    UR = WS1.Range("A" & Rows.Count).End(xlUp).Row
    For I = 2 To UR
        Quantita = WS1.Cells(I, "T") ' <<===== Cambia la colonna
        If Quantita > 0 Then ' <<===== AGGIUNTA
            Set RNG1 = WS1.Range("A" & I & ":AF" & I) ' <<===== Adatta le colonne
            RNG1.Copy Destination:=WS2.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Resize(Quantita, 1)  ' <<===== Cambia la colonna
        End If
    Next I
End Sub



Per scrupolo invia un file di esempio senza dati riservati e così possiamo provare il codice che ti o proposto.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: excel 2003 - duplicare records

Postdi femon » 09/01/15 08:45

Grazie Anthony e Ricky la macro funziona benissimo come da mie esigenze. :D :D :D
Siete sempre bravissimi.
Grazie.
Federico.
femon
Utente Junior
 
Post: 47
Iscritto il: 12/03/14 18:51


Torna a Applicazioni Office Windows


Topic correlati a "excel 2003 - duplicare records":


Chi c’è in linea

Visitano il forum: enrico43 e 13 ospiti