Macro totali di rig...
 
Notifiche
Cancella tutti

La consultazione del forum è libera per tutti.

Per poter porre un quesito è invece necessario essere un utente registrato (clicca qui se non lo sei).

Tutti gli utenti che richiedono un supporto, come da REGOLAMENTO, sono caldamente invitati ad allegare un file di esempio con l'indicazione di quello che si desidera ottenere.

Macro totali di riga

9 Post
3 Utenti
0 Reactions
14 Visualizzazioni
Forum 1
(@maxck2813)
Post: 5
Active Member
Avviatore di Topic
 

Ciao a tutti,

sono un utente di Excel (ho la versione 2019) avrei necessità di estrarre da un database, (nell'esempio allegato, foglio "Dati") i totali per riga, questi devono essere raggruppati in un nuovo foglio ("Riepilogo"). E'un'operazione che normalmente faccio con una pivot, ma in questo caso devo aggiungerla ad una istruzione in una macro che fa altre cose, per cui mi servirebbe un istruzione VBA.

Potreste aiutarmi? Grazie molte.

ciao

 

Versione di Excel
Sistema operativo
 
Postato : 17/07/2025 15:54
Marius44
(@marius44)
Post: 335
Moderatore
 

Ciao

Hai allegato un file .xlsx (quindi senza macro) e non mi sembra il caso di suggerire qualcosa che potrebbe interferire con l'altra macro che dici di avere nel file. Nella risposta (se rispondi) aggiungi anche in che maniera il codice deve funzionare (con un pulsante, con qualche evento o come)

Ciao,

Mario

 
Postato : 17/07/2025 16:34
Forum 1
(@maxck2813)
Post: 5
Active Member
Avviatore di Topic
 

Ciao Mario,

la rendo più sempice: considera il file che ho allegato fine a se stesso; cioè ho un foglio con una serie di dati (foglio "Dati"),  devo ottenere un foglio ("Riepilogo") equivalente a quello che otterrei con una pivot, in forma di tabella, e con un'istruzione in VBA, il pulsante poi lo metto io.

Grazie

 

 
Postato : 17/07/2025 16:47
Marius44
(@marius44)
Post: 335
Moderatore
 

Ciao

Ti suggerisco step by step (pensa tu a trasformarli in codice VBA)

Copia i dati delle colonne A:B del primo Foglio e incollale nel secondo Foglio; elimina i doppioni; crea un ciclo relativo ai nomi del secondo foglio e "spazzola" i dati del primo Foglio: se i dati sono uguali somma i valori in una variabile; alla fine del secondo ciclo scrivi il valore della variabile su Foglio2; azzera la variabile e ripeti.

Se hai difficoltà, chiedi pure.

Ciao,

Mario 

 
Postato : 17/07/2025 17:36
Forum 1
(@maxck2813)
Post: 5
Active Member
Avviatore di Topic
 

Ciao, se lo sapessi fare non avrei scritto.

non è possibile avere un codice vba che io possa utilizzare ed eventualmente adeguare?

Grazie 

 
Postato : 17/07/2025 17:42
Marius44
(@marius44)
Post: 335
Moderatore
 

Ciao

Quindi NON conosci VBA. Però vorresti il codice "bello e pronto"! E in caso, possibilissimo, di mal funzionamento come pensi di poterlo "adeguare"? Credo che la cosa migliore sarebbe "imparare" VBA e poi cimentarsi nelle problematiche.

Non sono d'accordo a dare in mano a qualcuno un'arma che non sa utilizzare.

Scusami ma la penso così. Ciao,

Mario

 
Postato : 17/07/2025 17:48
Forum 1
(@maxck2813)
Post: 5
Active Member
Avviatore di Topic
 

mah! non mi sembrava aver chiesto una cosa così complicata.

Avevo realizzato un codice vba con il registratore di macro che simulava il comportamento di una tabella Pivot, ma era una schifezza e comunque non teneva conto del variare dei dati.

Lo scrivo qui sotto, giusto per far capire che comunque un po' di impegno c'è l'ho messo.

Avevo anche scelto la strada della formula matriciale:

=INDICE($A$2:$A$21;CONFRONTA(0;CONTA.SE($E$1:E1;$A$2:$A$21);0))

=SOMMA.SE($A$2:$A$21;E2;$C$2:$C$21)

raggruppa i dati, si, ma anche questa presenta dei limiti: devo comunque copiare l'intervallo di dati ed ovviamente, non è sempre lo stesso.

Mi sembra esagerata la tua preoccupazione, ma comunque rispetto il tuo pensiero.

Buona serata anche a te.

 

Sub Macro1()
'
' Macro1 Macro
'

'
Sheets("Dati").Select
Range("B12").Select
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Dati!R1C1:R21C3", Version:=6).CreatePivotTable TableDestination:= _
"Foglio5!R3C1", TableName:="Tabella pivot4", DefaultVersion:=6
Sheets("Foglio5").Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("Tabella pivot4")
.ColumnGrand = True
.HasAutoFormat = True
.DisplayErrorString = False
.DisplayNullString = True
.EnableDrilldown = True
.ErrorString = ""
.MergeLabels = False
.NullString = ""
.PageFieldOrder = 2
.PageFieldWrapCount = 0
.PreserveFormatting = True
.RowGrand = True
.SaveData = True
.PrintTitles = False
.RepeatItemsOnEachPrintedPage = True
.TotalsAnnotation = False
.CompactRowIndent = 1
.InGridDropZones = True
.DisplayFieldCaptions = True
.DisplayMemberPropertyTooltips = False
.DisplayContextTooltips = True
.ShowDrillIndicators = True
.PrintDrillIndicators = False
.AllowMultipleFilters = False
.SortUsingCustomLists = True
.FieldListSortAscending = False
.ShowValuesRow = False
.CalculatedMembersInFilters = False
.RowAxisLayout xlTabularRow
End With
With ActiveSheet.PivotTables("Tabella pivot4").PivotCache
.RefreshOnFileOpen = False
.MissingItemsLimit = xlMissingItemsDefault
End With
ActiveSheet.PivotTables("Tabella pivot4").RepeatAllLabels xlRepeatLabels
With ActiveSheet.PivotTables("Tabella pivot4").PivotFields("Nome")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabella pivot4").PivotFields("Descrizione")
.Orientation = xlRowField
.Position = 2
End With
ActiveSheet.PivotTables("Tabella pivot4").AddDataField ActiveSheet.PivotTables( _
"Tabella pivot4").PivotFields("qta"), "Somma di qta", xlSum
Range("A6").Select
ActiveSheet.PivotTables("Tabella pivot4").PivotFields("Nome").Subtotals = Array _
(False, False, False, False, False, False, False, False, False, False, False, False)
Range("B6").Select
ActiveSheet.PivotTables("Tabella pivot4").PivotFields("Descrizione").Subtotals _
= Array(False, False, False, False, False, False, False, False, False, False, False, False _
)
ActiveSheet.PivotTables("Tabella pivot4").PivotSelect "Descrizione[All]", _
xlLabelOnly, True
Range("A2:C9").Select
Selection.Copy
Sheets("Riepilogo").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Rows("1:2").Select
Range("A2").Activate
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Rows("6:6").Select
Selection.Delete Shift:=xlUp
Range("B5").Select
End Sub

 

 
Postato : 17/07/2025 18:04
Alexps81
(@alexps81)
Post: 26
Eminent Member
 

Ciao @Maxck2813

se posso esserti di aiuto, anziché piazzarti la macro già bella e pronta, ti scrivo passo passo ciò che Marius ti ha indicato. Se segui attentamente ciò che è scritto e traduci ogni rigo in codice VBA, vedrai che riuscirai nella tua richiesta. Prova a vedere fin dove arrivi, poi posta la tua soluzione. A quel punto gli diamo una "ripulita" se serve. Se cerchi in rete, troverai ogni indicazione che ho scritto:

Sub raggruppa()
    'dichiara 4 variabili come LONG
    'dichiara 1 variabile come DOUBLE
    
    'disabilita l'aggiornamento dello schermo
    'utilizza la prima variabile LONG e calcola l'ultima cella compilata nella colonna B del foglio DATI
    'cella A1 del foglio RIEPILOGO = cella A1 del foglio DATI
    'cella B1 del foglio RIEPILOGO = cella B1 del foglio DATI
    'cella C1 del foglio RIEPILOGO = cella C1 del foglio DATI
    'l'intervallo di celle (B2:B & la prima variabile LONG) del foglio RIEPILOGO =  l'intervallo di celle (B2:B & la prima variabile LONG) del foglio DATI
    'all'intervallo che hai appena copiato nel foglio RIEPILOGO, rimuovi i duplicati. Utilizza il metodo 'RemoveDuplicates'. Aiutati con il registratore di macro per capire come fare.
    'ordina l'intervallo utilizzando il metodo 'Sort'. Anche qui aiutati con il registratore di macro
    'utilizza la seconda variabile LONG per calcolare l'ultima cella compilata della colonna B del foglio RIEPILOGO
    'utilizza la terza variabile LONG in un ciclo FOR...NEXT che va da 2 alla seconda variabile LONG
    'imposta la variabile DOUBLE = 0
    'utilizza la quarta variabile LONG per un secondo ciclo FOR...NEXT che va da 2 alla prima variabile LONG
    'fai un confronto con IF, dove valuti se il contenuto della cella (B & terza variabile LONG) del foglio RIEPILOGO è uguale alla contenuto della cella (B & prima variabile LONG) del foglio DATI
    'se il confronto è uguale, allora la variabile DOUBLE = variabile DOUBLE + contenuto della cella (C & quarta variabile DOUBLE) del foglio DATI
    'la cella (A & seconda variabile LONG) del foglio RIEPILOGO = alla cella (A & quarta variabile LONG) del foglio DATI
    'la cella (C & seconda variabile LONG) del foglio RIEPILOGO = variabile DOUBLE
    'chiudi il secondo ciclo FOR...NEXT
    'chiudi primo ciclo FOR...NEXT
    'applica il 'NumberFormat' = "0.00" alla colonna 3 del foglio RIEPILOGO (Columns(3).NumberFormat = "0.00")
    'abilita l'aggiornamento dello schermo
    'mostra messaggio "Fatto!"
End Sub
Questo post è stato modificato 5 ore fa 7 tempo da Alexps81
 
Postato : 17/07/2025 19:16
Forum 1
(@maxck2813)
Post: 5
Active Member
Avviatore di Topic
 

Grazie per i consigli e per il tempo che avete dedicato alla mia richiesta. Ci lavoro un po' e seguirò i vostri consigli.

Buona serata

 
Postato : 17/07/2025 21:32
Condividi:
My Agile Privacy
Questo sito utilizza cookie tecnici e di profilazione. Cliccando su accetta si autorizzano tutti i cookie di profilazione. Cliccando su rifiuta o la X si rifiutano tutti i cookie di profilazione. Cliccando su personalizza è possibile selezionare quali cookie di profilazione attivare.
Attenzione: alcune funzionalità di questa pagina potrebbero essere bloccate a seguito delle tue scelte privacy
     Scarica il nostro ebook gratuito     

Unisciti a oltre 35.000 professionisti
che hanno già scelto di semplificare il proprio lavoro
e aumentare la produttività con la nostra newsletter!

Scarica l’ebook con i
migliori trucchi e suggerimenti per Excel
selezionati per te da Excel Academy

Download