Condividi:        

[Excel] Somma di Righe Identiche

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] Somma di Righe Identiche

Postdi sax » 01/09/07 18:04

Il mio problema è il seguente
dopo aver creato con delle macro e delle funzioni una lista di nomi etc
mi ritrovo la tabella seguente

nella colonna da B13 una lista di nomi
nella colonna da C13 dei codici
nella colonna da D13 unità di misura
nella colonna da E13 le quantità di ogni articolo
nella colonna da F13 il codice articolo

dovrei raggruppare e quindi sommare quegli articoli che hanno le celle B-C-D-F e sommare le quantità

se può essere utile tutte le celle non dei valori finiti senza funzioni in quanto l'ultima macro copia tutta la tabella e ne reincolla il valore

grazie per l'aiuto
sax
Sax
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Sponsor
 

Postdi sax » 01/09/07 18:30

dovrei raggruppare e quindi sommare quegli articoli che hanno le celle B-C-D-F uguali e sommarne le quantità


non avevo completato la frase
sax
Sax
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Postdi Anthony47 » 05/09/07 22:39

Questo argomento era rimasto nel dimenticatoio…

Stasera non riesco a guardarlo, ma domani vedo di fare qualcosa prima del solito.

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

Postdi sax » 06/09/07 10:35

Grazie Anthony47
Io ho cercato di fare qualcosa, anche perchè, ma ho avuto grossi problemi nel realizzarlo, in quanto mi sa di non avere proprio la mentalità del programmatore
Ho inziato ad inserire una infinità di variabili
ma sono andato in TILT
sax
Sax
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Postdi Anthony47 » 06/09/07 15:30

Ciao. Vedi se questa macro fa quello che ti serve.
Per evitare operazioni distruttive, essa copia i dati in un altro foglio che poi manipola.
I dati vengono "Ordinati" per Nome, Codice, Codice articolo, e vengono lasciati in questo orine. Se e' un problema e si preferisce averli ordinati come in partenza, si puo' fare.
Modifica come necessario le impostazioni iniziali, in particolare il nome foglio di partenza.

Codice: Seleziona tutto
Sub SAXASSOCIA()
'- - - - - IMPOSTAZIONI   <<<< Modificare secondo situazione
FoglioDati = "Foglio3"
PrimaRiga = 13          'Riga con le intestazioni
'- - - - -
ActiveSheet.UsedRange.Select
UltimaColonna = ActiveSheet.UsedRange.Range("A1").Column + ActiveSheet.UsedRange.Columns.Count

Sheets(FoglioDati).Select
ActiveSheet.Copy After:=Sheets(Sheets.Count)
'ActiveSheet.Name = "Normalizz"
LastRow = Range("B65536").End(xlUp).Row
Range(Cells(PrimaRiga, 1), Cells(LastRow, UltimaColonna)).Select
Selection.Sort Key1:=Range("B14"), Order1:=xlAscending, Key2:=Range("C14" _
        ), Order2:=xlAscending, Key3:=Range("F14"), Order3:=xlAscending, Header _
        :=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
        xlSortNormal

For I = LastRow To PrimaRiga Step -1
Range("B1").Offset(I, 0).Select
If Selection.Value = Selection.Offset(-1, 0).Value And Selection.Offset(0, 1).Value = Selection.Offset(-1, 1).Value _
       And Selection.Offset(0, 2).Value = Selection.Offset(-1, 2).Value And Selection.Offset(0, 4).Value = Selection.Offset(-1, 4).Value Then
    Selection.Offset(-1, 3).Value = Selection.Offset(-1, 3).Value + Selection.Offset(0, 3).Value
    Selection.EntireRow.Delete
    End If
Next I
End Sub


Fai sapere, ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi sax » 12/09/07 19:37

Ok Perfetto come sempre
grazie Anthony47

è proprio quello che mi serviva
l'unico problema è che è un pò lento nell'esecuzione non so se il problema sta in Excel 2007 o nel mio PC.

Un' altra informazione, il foglio che viene creato lo eliminio successivamente con una macro creata con il registratore, il problema che si presenta è che mi chiede se voglio realmente eliminare tale foglio, come posso evitare che ponga tale domanda?

Grazie
Sax
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Postdi Ribonix » 12/09/07 19:57

Ciao, per evitare che Excel ti mostri una finestra di dialogo puoi utilizzare prima delle istruzioni che compongo l'evento il comando Application.DisplayAlerts = False mentre al termine delle stesse Application.DisplayAlerts = True

Per quanto riguarda il problema della lentezza non è nè Excel nè il tuo pc... la macro lavora una x una le celle a partire dalla riga 65535 a salire... Si potrebbe restringere il range su meno righe.
Allah Akhbar! Allah Akhbar! Allah Akhbar!
Avatar utente
Ribonix
Utente Senior
 
Post: 346
Iscritto il: 12/02/03 22:41
Località: 3GYPT

Postdi Ribonix » 12/09/07 20:25

Considera nulla la seconda parte del mio post. Sorry.

Se comunque vuoi velocizzare un po' basta inserire Application.ScreenUpdating = False all'inizio della macro e Application.ScreenUpdating = True ovviamente al termine. In questo modo il sistema non impegnerà risorse per aggiornare graficamente Excel. Non vedrai pertanto nemmeno il cursore spostarsi da una cella all'altra: vedrai solo il risultato finale.

Ciao
Allah Akhbar! Allah Akhbar! Allah Akhbar!
Avatar utente
Ribonix
Utente Senior
 
Post: 346
Iscritto il: 12/02/03 22:41
Località: 3GYPT

Postdi sax » 12/09/07 20:39

Grazie Ribonix
Hanno funzionato entrambe le istruzioni e un pochetto si è velocizzata l'operazione, in ogni caso ho anche diminuito le righe fissando a 50 il numero massimo di righe da controllare mentre prima con l'istruzione
Codice: Seleziona tutto
LastRow = Range("B65536").End(xlUp).Row

se non ho capito male mi trovava l'ultimo rigo utilizzato, che nel mio caso è occupato da altri dati non utili.
Sax
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Postdi Ribonix » 12/09/07 20:46

In pratica il comando ti faceva partire dall'ultima riga della colonna B di Excel per segnalarti, partendo dal basso, quale era la prima riga contenente dei dati (ovvero l'ultima del tuo elenco).
Bye
Allah Akhbar! Allah Akhbar! Allah Akhbar!
Avatar utente
Ribonix
Utente Senior
 
Post: 346
Iscritto il: 12/02/03 22:41
Località: 3GYPT

Re: [Excel] Somma di Righe Identiche

Postdi sax » 06/01/08 13:03

X Anthnony47
ho realizzato un altro schema molto simile a quello proposto precedentemente in questa discussione, ma non ho ottenuto dei buoni risultati adattando la macro che mi avevi proposto a suo tempo.
Le differenze sono che i dati che possono essere uguali sono dalla "B1" alla "L1" e la somma delle quantità è nella colonna "A" il foglio su cui si trovano i dati l'ho chiamato "Foglio_Dati"
puoi aiutarmi
Grazie
Sax
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Re: [Excel] Somma di Righe Identiche

Postdi Anthony47 » 08/01/08 03:18

Quindi vuoi sommare quelle righe che hanno da B ad L tutte uguali tra loro?

Modifica la parte iniziale, di Impostazioni.
Poi cambia le chiavi di ordinamento su questa: Selection.Sort Key1:=Range("B14") etc etc (a parte la riga che sara’ la 1, usa le colonne piu’ significative).

Poi l’ ultima parte la dovresti modificare cosi’:
Codice: Seleziona tutto
For I = LastRow To PrimaRiga Step -1
Range("B1").Offset(I, 0).Select
For J=0 to 10
If selection.offset(0,J).value <> Selection.offset(-1,J).value then goto Skippa
Next J
Selection.Offset(-1, -1).Value = Selection.Offset(-1, -1).Value + Selection.Offset(0, -1).Value
Selection.EntireRow.Delete
Skippa:
Next I
End Sub


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


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Somma di Righe Identiche":


Chi c’è in linea

Visitano il forum: Anthony47 e 86 ospiti