Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

date righe uguali ..copiarle in un unica riga incrementando

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

date righe uguali ..copiarle in un unica riga incrementando

Postdi luca62 » 21/01/13 08:21

Ho un serie di righe (1000 righe)
con 5 colonne, a fianco di queste ,lasciando una colonna vuota ,vorrei estrarre dalle 5 colonne solo 3 colonne
mettendo insieme le righe uguali (sommandole) ordinando per numero crescente della ultima colonna a destra

ESEMPIO
cartella di lavoro particolari
da queste 5 colonne

INS POS DENOMINAZIONE n^DIS Q.
70022 1 ASTA 70028 1
70028 6 BASE 70024 1
70022 3 ATTACCO 70025 9
70032 4 ASTA 70023 1
70022 9 SPESSORE 70027 1
70082 6 BASE 70024 2
70022 7 ASTA 70029 5

in

INS POS DENOMINAZIONE n^DIS Q. spazio DENOMINAZIONE n^DIS Q.
70022 1 ASTA 70028 1 spazio ATTACCO 70020 9
70028 6 BASE 70024 1 spazio BASE 70024 3
70022 3 ATTACCO 70020 9 spazio SPESSORE 70027 1
70032 4 ASTA 70028 1 spazio ASTA 70028 2
70022 9 SPESSORE 70027 1 spazio ASTA 70029 5
70082 6 BASE 70024 2
70022 7 ASTA 70029 5

in questo caso sono stati sommati ASTA 70028 e BASE 70024 e non ASTA 70029 perchè la
condizione per essere ritenuti uguali è che devono essere uguali sia la denominazione che il N^DIS

spero di essere stato chiaro allego file esempio

http://www.filedropper.com/esempiobisluca62
grazie
ciao
luca62 office2007 window7
luca62
Utente Senior
 
Post: 158
Iscritto il: 23/12/12 14:54

Sponsor
 

Re: date righe uguali ..copiarle in un unica riga incrementa

Postdi Flash30005 » 21/01/13 09:45

Prova questa macro
Codice: Seleziona tutto
Sub CreaElencoU()
Set ws1 = Worksheets("PARTICOLARI")
UR1 = ws1.Range("A" & Rows.Count).End(xlUp).Row
ws1.Range("G:I").Clear
ws1.Range("C1:E1").Copy Destination:=ws1.Range("G1")
For RR1 = 2 To UR1
Tr = 0
NCod = ws1.Range("D" & RR1).Value
UR2 = ws1.Range("G" & Rows.Count).End(xlUp).Row
For RR2 = 2 To UR2
If NCod = ws1.Range("H" & RR2).Value Then
ws1.Range("I" & RR2).Value = ws1.Range("I" & RR2).Value + ws1.Range("E" & RR1).Value
Tr = 1
End If
Next RR2
If Tr = 0 Then ws1.Range("C" & RR1 & ":E" & RR1).Copy Destination:=ws1.Range("G" & UR2 + 1)
Next RR1
    Range("G1:I" & UR2 + 1).Sort Key1:=Range("H2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
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: date righe uguali ..copiarle in un unica riga incrementa

Postdi luca62 » 21/01/13 17:07

QUASI BENE...
NEL SENSO CHE VOLENDO FARE LA STESSA OPERAZOIONE ANCHE NELLA CARTELLA COMMERCIALI HO PRESO LA TUA MACRO E HO CAMBIATO il foglio di lavoro in "commerciali" . sembrava ok ma random da degli errori,
poi ho capito il perchè, non ero stato io a fare casino ,ma non ti avevo detto di una cosa. Il problema è che quando trova lo stesso codice 0 (che vuol dire che manca) me li deve sommare solo se la descrizione è la stessa ,in sintesi per poterli sommare devo avere ambedue i termini descrizione e n^dis uguali altrimenti non li devo sommare.

ps è possibile unire nella stessa macro per fare la stessa operazione per due fogli di lavoro
"PARTICOLARI" E "COMMERCIALI" ?
luca62 office2007 window7
luca62
Utente Senior
 
Post: 158
Iscritto il: 23/12/12 14:54

Re: date righe uguali ..copiarle in un unica riga incrementa

Postdi Flash30005 » 21/01/13 17:17

Prova questa macro modificata

Codice: Seleziona tutto
Sub CreaElencoU()
For F = 1 To Worksheets.Count
If Sheets(F).Name = "PARTICOLARI" Or Sheets(F).Name = "COMMERCIALI" Then
NFoglio = Sheets(F).Name
Set Ws1 = Worksheets(NFoglio)
Ws1.Select
UR1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row
Ws1.Range("G:I").Clear
Ws1.Range("C1:E1").Copy Destination:=Ws1.Range("G1")
For RR1 = 2 To UR1
Tr = 0
NCod = Ws1.Range("D" & RR1).Value
Des = Ws1.Range("C" & RR1).Value
UR2 = Ws1.Range("G" & Rows.Count).End(xlUp).Row
For RR2 = 2 To UR2
If NCod = Ws1.Range("H" & RR2).Value And Des = Ws1.Range("G" & RR2).Value Then
Ws1.Range("I" & RR2).Value = Ws1.Range("I" & RR2).Value + Ws1.Range("E" & RR1).Value
Tr = 1
End If
Next RR2
If Tr = 0 Then Ws1.Range("C" & RR1 & ":E" & RR1).Copy Destination:=Ws1.Range("G" & UR2 + 1)
Next RR1
    Range("G1:I" & UR2 + 1).Sort Key1:=Range("H2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
        End If
Next F
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: date righe uguali ..copiarle in un unica riga incrementa

Postdi luca62 » 22/01/13 08:47

ok Flash!
luca62 office2007 window7
luca62
Utente Senior
 
Post: 158
Iscritto il: 23/12/12 14:54

Re: date righe uguali ..copiarle in un unica riga incrementa

Postdi luca62 » 24/01/13 14:13

Anthony, Flash,
1) allego il file che ho costruito con le vs macro, ne ho fatti 3 speculari .ma in questo, pur avendo le stesse macro etc, una di esse mi da errore .
http://www.filedropper.com/com5000
in particolare la macro "condensa" che svolge regolare il suo lavoro su un foglio di lavoro "particolari" ma non sull'altro
"Commerciali" mentre negli altri due file gemelli esegue ambedue le istruzioni!
ci sto diventando pazzo.
Facendo il debug mi da (ovviamente) lo stesso errore e non capisco cosa c è che non va!

2) formattazione condizionale e colore delle celle,avevo chiesto la Luna ...in realtà ho capito che mi basta
meno!ossia mi è sufficente che mi crei un nuovo foglio "RIMANENTI" che sia come il foglio "COLONNA"
ottenuto con la vs macro "Compila" che però mi vada a prendere da tutti i fogli che iniziano con un numero
solo i valori delle prime 6 colonne che non abbiano la cella colorata.

Penso sia (per Voi...) meno complicato
ciao
luca62 office2007 window7
luca62
Utente Senior
 
Post: 158
Iscritto il: 23/12/12 14:54

Re: date righe uguali ..copiarle in un unica riga incrementa

Postdi Flash30005 » 24/01/13 14:45

E' chiaro che va in errore
quando si effettuano delle somme ci si aspetta che ci siano dei numeri e non stringhe
Nel foglio Particolari da E158 a E166 hai delle stringhe e non numeri
come mai?

Se hai delle stringhe e non vuoi avere interruzione di macro per errori allora prova questa macro
Codice: Seleziona tutto
Sub CONDENSA()
For F = 1 To Worksheets.Count
If Sheets(F).Name = "PARTICOLARI" Or Sheets(F).Name = "COMMERCIALI" Then
    NFoglio = Sheets(F).Name
    Set Ws1 = Worksheets(NFoglio)
    Ws1.Select
    UR1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row
    Ws1.Range("G:I").Clear
    Ws1.Range("C1:E1").Copy Destination:=Ws1.Range("G1")
    For RR1 = 2 To UR1
        Tr = 0
        NCod = Ws1.Range("D" & RR1).Value
        Des = Ws1.Range("C" & RR1).Value
        UR2 = Ws1.Range("G" & Rows.Count).End(xlUp).Row
        For RR2 = 2 To UR2
            If NCod = Ws1.Range("H" & RR2).Value And Des = Ws1.Range("G" & RR2).Value Then
            If IsNumeric(Ws1.Range("E" & RR1).Value) Then
                Ws1.Range("I" & RR2).Value = Ws1.Range("I" & RR2).Value + Ws1.Range("E" & RR1).Value
                Tr = 1
            End If
            End If
        Next RR2
    If Tr = 0 Then Ws1.Range("C" & RR1 & ":E" & RR1).Copy Destination:=Ws1.Range("G" & UR2 + 1)
    Next RR1
        Range("G1:I" & UR2 + 1).Sort Key1:=Range("H2"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
End If
Next F
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: date righe uguali ..copiarle in un unica riga incrementa

Postdi luca62 » 24/01/13 15:58

la macro ovviamente andava bene è che avevo aggiunto un foglio di lavoro in fondo e allora
l'istruzione
For FF = 2 To Worksheets.Count - 6

andava cambiata,
non si può cambiarla con un istruzione del tipo
tutti i fogli di lavoro che iniziano per un numero?
luca62 office2007 window7
luca62
Utente Senior
 
Post: 158
Iscritto il: 23/12/12 14:54

Re: date righe uguali ..copiarle in un unica riga incrementa

Postdi Flash30005 » 24/01/13 16:56

Ma il file che hai postato allora cos'è?

Non puoi fare richieste dicendo che va in errore e presenti un file non uguale a quello che ha problemi
Nel file che hai inviato dava errore perché non poteva sommare le stringhe e l'ho sistemato.

Poi parli di un codice che nella mia macro non esiste
luca62 ha scritto:For FF = 2 To Worksheets.Count - 6

Dove lo hai trovato questo codice?
Non è detto che il foglio1 e foglio2 corrisponda ai due fogli che vorresti elaborare :aaah

Perché non utilizzare, invece, il codice originale
Codice: Seleziona tutto
For F = 1 To Worksheets.Count

e modificare la IF successiva aggiungendo il nome dei fogli che vuoi processare?
Codice: Seleziona tutto
If Sheets(F).Name = "PARTICOLARI" Or Sheets(F).Name = "COMMERCIALI"   Or Sheets(F).Name = "PIPPO"  Or Sheets(F).Name = "TOPOLINO" Then


Non è più semplice?

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: date righe uguali ..copiarle in un unica riga incrementa

Postdi luca62 » 24/01/13 21:49

il file che ho postato è il file che ti dicevo al quale a differenza di altri file gemelli e funzionanti avevo aggiunto
l'ultimo foglio di lavoro "RIMANENTI"
a causa di tale aggiunta la macro" copiacolonne" presente nel file allegato che aveva l'struzione
For FF = 2 To Worksheets.Count - 6
generava un errore a catena che si presentava sul foglio "PARTICOLARI"che tu avevi scoperto .
DA questo evento mi sono reso conto che
per evitare futuri casini l'istruzione
For FF = 2 To Worksheets.Count - 6 poteva generare errore tutte le volte che avessi aggiunto
un foglio di lavoro nuovo.Questo è il motivo per il quale chiedevo
se è possibile modificare tale istruzione in un istruzione
che prevedesse tutti i fogli di lavoro che iniziassero con un numero o che non iniziano con una lettera
il tuo suggerimento andrebbe bene se avessi un solo file o una serie di file
con la stessa denominazione dei fogli di lavoro
spero di essermi spiegato
luca62 office2007 window7
luca62
Utente Senior
 
Post: 158
Iscritto il: 23/12/12 14:54

Re: date righe uguali ..copiarle in un unica riga incrementa

Postdi Flash30005 » 25/01/13 01:15

Ma quanti fogli devi processare oltre che "PARTICOLARI" e COMMERCIALI" ?
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: date righe uguali ..copiarle in un unica riga incrementa

Postdi luca62 » 25/01/13 09:56

la macro "copiacolonne " in pratica mi copia i dati provenienti da tutti i fogli di lavoro (dello stesso file)
il cui nome inizia con un numero e non quelli che iniziano con lettere ,saranno mediamente 15-25 fogli di lavoro
i dati dalla macro "copiacolonne" vanno sul foglio di lavoro "Riepilogo ordini e" riepilogo part-comm".
Da questi due fogli di lavoro estraggo con la macro "compila" i dati in colonna nel foglio di lavoro "incolonna"
e genera la prima colonna dei fogli "particolari" e "commerciali".Infine..la macro "condensa" mi rende
nei fogli "particolari e "commerciali" altre colonne con dati uguali sommati.
Forse per andare da Firenze a Roma, sono passato da Milano... però mi è funzionale
al 90%..Il 10% restante è quello più duro,
QUindi la macro di cui ti chiedo la modifica processa un numero indefinito
(da 15-25) di fogli di lavoro
Per questo l'istruzione
FF = 2 To Worksheets.Count - 6 poteva generare errore tutte le volte che avessi aggiunto
un foglio di lavoro nuovo.Questo è il motivo per il quale chiedevo
se è possibile modificare tale istruzione in un istruzione
che prevedesse tutti i fogli di lavoro che iniziassero con un numero o che non iniziano con una lettera
luca62 office2007 window7
luca62
Utente Senior
 
Post: 158
Iscritto il: 23/12/12 14:54

Re: date righe uguali ..copiarle in un unica riga incrementa

Postdi Flash30005 » 25/01/13 10:57

allora se hai 25 fogli da processare e due o tre fogli da non processare devi cambiare la condizione (invertirla)

Al posto di = (uguale) metti <> (diverso)
Al posto di Or metti And
e cambia i nomi dei fogli che NON vuoi processare

Codice: Seleziona tutto
For F = 1 To Worksheets.Count
If Sheets(F).Name <> "RIEPILOGO" And Sheets(F).Name <> "PAPERINO"  and Sheets(F).Name <> "PIPPO"  And Sheets(F).Name <> "TOPOLINO" Then
'... segue resto 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: date righe uguali ..copiarle in un unica riga incrementa

Postdi luca62 » 25/01/13 14:05

ho usato il tuo suggerimento ma mi da un errore, cosa sbaglio?
l'errore è sull FF
"riferimento alla variabile next non valido

Codice: Seleziona tutto
Sub CopiaColonne()
    Sheets("RIEPILOGO ORDINI").Select
    Columns("A:IV").Clear
    Col = 1
    For F = 2 To Worksheets.Count
If Sheets(F).Name <> "RIEPILOGO ORDINI" And Sheets(F).Name <> "RIEPILOGO PART-COMM" And Sheets(F).Name <> "INCOLONNA" And Sheets(F).Name <> "PARTICOLARI" And Sheets(F).Name <> "COMMERCIALI" And Sheets(F).Name <> "VITERIA" And Sheets(F).Name <> "COSTI" And Sheets(F).Name <> "RIMANENTI" Then

   
            Sheets(FF).Range("A:A,B:B,C:C,D:D,E:E,P:P,Q:Q,R:R,S:S,T:T,U:U,V:V").Copy
            Cells(1, Col).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
            Cells(1, Col).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
            Col = Col + 12
        End If
    Next FF
    Application.CutCopyMode = False
    Range("A1").Select
    Call partcomm
    Call eliformcondordini '<<<
    End Sub
luca62 office2007 window7
luca62
Utente Senior
 
Post: 158
Iscritto il: 23/12/12 14:54

Re: date righe uguali ..copiarle in un unica riga incrementa

Postdi Anthony47 » 25/01/13 14:16

Ovvio:
For F = 2 To Worksheets.Count / Next FF

Purtroppo nella tua macro usi un po' F e un po' FF, quindi non capisco se nelle tue intenzioni dovrebbero essere la stessa cosa (allora scegli una dichiarazione e usa quella) o sono cose diverse (allora ti bastera' impostare correttamente il ciclo For Variabile /Next Variabile)

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: date righe uguali ..copiarle in un unica riga incrementa

Postdi luca62 » 25/01/13 15:16

OPS.....HO CAPITO...mi sono già dato del....one

2) formattazione condizionale e colore delle celle,avevo chiesto la Luna ...in realtà ho capito che mi basta
meno!ossia mi è sufficente che possa creare un nuovo foglio "RIMANENTI" che sia come il foglio "COLONNA"
ottenuto con la vs macro "Compila" che però mi vada a prendere da tutti i fogli selezionati con l'istruzione che mi hai dato,
solo i valori delle prime 6 colonne che non abbiano la cella colorata.O in alterenativa solo i valori delle prime 6 colonne di quelle righe in cui il valore corrispondente della colonna q è < o =0

Penso sia (per Voi...) meno complicato
ciao
luca62 office2007 window7
luca62
Utente Senior
 
Post: 158
Iscritto il: 23/12/12 14:54


Torna a Applicazioni Office Windows


Topic correlati a "date righe uguali ..copiarle in un unica riga incrementando":


Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti

cron