effettuare somma di celle in excel in base al valore delle celle adiacenti

Anonimo
2017-03-07T10:59:18+00:00

Buongiorno, vorrei chiedere una delucidazione in merito alla possibilità di sommare celle in excel in base a determinati criteri. 

Mi trovo a lavorare su un foglio excel caratterizzato da poco più di 6000 righe (record). Moltissimi record nella prima colonna (colonna A nell'esempio) sono caratterizzati dallo stesso numero, mentre nella seconda colonna (colonna B nell'esempio) il numero è differente. Vorrei chiedere se fosse possibile impostare una funzione che possa permettermi di sommare, per tutti i record caratterizzati dallo stesso valore nella colonna A, i valori della colonna B in maniera tale da restituire il valore totale in un'unica cella in alto e cancellare quelle successive caratterizzate dallo stesso valore nella colonna A. 

ESEMPIO: 

               COLONNA A    COLONNA B    

 record1   100                  0,5

            2   100                 12

            3   100                 1,7

            4   101                 15

            5   102                  0,4

            6   102                 14,5

            7   102                  7 

            8   102                  5,01

            9   102                  16

vorrei che il record 1 abbia nella colonna A il valore 100 e nella colonna B la somma (0,5+12+1,7) in maniera tale da eliminare i record successivi caratterizzati dallo stesso valore nella colonna A. Vorrei che tutto questo sia riproducibile per tutti i record del mio foglio excel.

Quindi per ricapitolare:

                                         COLONNA A        COLONNA B

               record 1             100                      somma(0,5+12+1,7)

               record 2             101                      15

               record 3             102                      somma (0,4+14,5+7+5,01+16)

Qualcuno mi può aiutare?

Grazie

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

11 risposte

Ordina per: Più utili
  1. Anonimo
    2017-03-07T14:17:36+00:00

    Ciao Luca,

    Ringrazio per la tempestiva risposta. 

    Ma ho alcuni problemi, per prima cosa chiedo:

    1. copio il codice da: Public Sub Tester() in avanti?'

    =========>>

    Option Explicit deve essere copiato? e così anche "  '--------->>  " e "  '<<=========   " dopo end function?

    Copia e incolla tutto  tra

    =========>>

    e

    '<<=========

    A questo proposito, vedi il mio file di prova

    1. che cosa significa modificare "foglio1" e "foglio2"? devo attribuire i nomi dei rispettivi fogli (ammesso che siano rinominati?)

    Proprio così!

    1. Una volta che il codice è copiato e torno ad excel non posso salvarlo...impossibilità di salvare il file senza macro..come risolvo il problema?

    Come indicato da me:

    • Salva il file con l’estensionexlsm

    Vedi anche le mia risposte alle tue due post successivi. 

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-03-07T13:46:08+00:00

    Forse ho capito parte del problema..la colonna A nell'esempio corrisponde alla colonna G nel mio file originario e la colonna B corrisponde alla colonna X. Inoltre i dati non partono dalla riga 1 bensì dalla riga 6 e arrivano fino a riga 6069...vanno modificati i numeri nel codice??

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Eliminata

    Questa risposta è stata eliminata a causa di una violazione del codice di comportamento. La risposta è stata segnalata manualmente o identificata tramite il rilevamento automatizzato prima dell'esecuzione dell'azione. Per ulteriori informazioni, fai riferimento al codice di comportamento.


    I commenti sono stati disattivati. Ulteriori informazioni

  4. Eliminata

    Questa risposta è stata eliminata a causa di una violazione del codice di comportamento. La risposta è stata segnalata manualmente o identificata tramite il rilevamento automatizzato prima dell'esecuzione dell'azione. Per ulteriori informazioni, fai riferimento al codice di comportamento.


    I commenti sono stati disattivati. Ulteriori informazioni

  5. Anonimo
    2017-03-07T12:25:26+00:00

    Ciao Luca,

    Benvenuto alla Comunity!

    vorrei chiedere una delucidazione in merito alla possibilità di sommare celle in excel in base a determinati criteri. 

    Mi trovo a lavorare su un foglio excel caratterizzato da poco più di 6000 righe (record). Moltissimi record nella prima colonna (colonna A nell'esempio) sono caratterizzati dallo stesso numero, mentre nella seconda colonna (colonna B nell'esempio) il numero è differente. Vorrei chiedere se fosse possibile impostare una funzione che possa permettermi di sommare, per tutti i record caratterizzati dallo stesso valore nella colonna A, i valori della colonna B in maniera tale da restituire il valore totale in un'unica cella in alto e cancellare quelle successive caratterizzate dallo stesso valore nella colonna A. 

    ESEMPIO: 

                   COLONNA A    COLONNA B    

     record1   100                  0,5

                2   100                 12

                3   100                 1,7

                4   101                 15

                5   102                  0,4

                6   102                 14,5

                7   102                  7 

                8   102                  5,01

                9   102                  16

    vorrei che il record 1 abbia nella colonna A il valore 100 e nella colonna B la somma (0,5+12+1,7) in maniera tale da eliminare i record successivi caratterizzati dallo stesso valore nella colonna A. Vorrei che tutto questo sia riproducibile per tutti i record del mio foglio excel.

    Quindi per ricapitolare:

                                             COLONNA A        COLONNA B

                   record 1             100                      somma(0,5+12+1,7)

                   record 2             101                      15

                   record 3             102                      somma (0,4+14,5+7+5,01+16)

    Qualcuno mi può aiutare?

    Prova qualcosa del genere:

    • Alt+F11 per aprire l'editor di VBA
    • Alt+IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim WB As Workbook

        Dim srcSH As Worksheet, destSH As Worksheet

        Dim srcRng As Range, destRng As Range

        Dim arrIn As Variant

        Dim oDic As Object

        Dim sStr As String

        Dim dVal As Double

        Dim LRow As Long, iRows As Double

        Dim arrKeys As Variant, arrItems As Variant

        Dim i As Long, j As Long, k As Long

        Const sFoglioDati As String = "Foglio1"               '<<=== Modifica

        Const sFoglioRisultati As String = "Foglio2"          '<<=== Modifica

        Const iRigaIntestazioni As Long = 1                    '<<=== Modifica

        Set WB = ThisWorkbook

        With WB

            Set srcSH = .Sheets(sFoglioDati)

            Set destSH = .Sheets(sFoglioRisultati)

        End With

        With srcSH

            LRow = LastRow(srcSH, .Columns("A"))

            Set srcRng = .Range("A" & iRigaIntestazioni + 1). _

                         Resize(LRow - iRigaIntestazioni, 2)

        End With

        With destSH

            .Columns("A:B").ClearContents

            Set destRng = .Range("A2")

        End With

        arrIn = srcRng.Value

        Set oDic = CreateObject("Scripting.Dictionary")

        With oDic

            .CompareMode = vbTextCompare

            For i = 1 To UBound(arrIn)

                sStr = arrIn(i, 1)

                dVal = arrIn(i, 2)

                If Not .exists(sStr) Then

                    .Add Key:=sStr, Item:=dVal

                Else

                    .Item(sStr) = .Item(sStr) + dVal

                End If

            Next i

            arrKeys = Application.Transpose(.keys)

            arrItems = Application.Transpose(.items)

            iRows = .Count

        End With

        On Error GoTo XIT

        Application.ScreenUpdating = False

        With destRng

            .Offset(-1).Resize(1, 2).Value = srcRng.Rows(0).Value

            With .Resize(iRows)

                .Columns(1).Value = arrKeys

                .Columns(2).Value = arrItems

                .HorizontalAlignment = xlCenter

                .VerticalAlignment = xlCenter

            End With

        End With

    XIT:

        Application.ScreenUpdating = True

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

                            Optional Rng As Range, _

                            Optional minRow As Long = 1)

        If Rng Is Nothing Then

            Set Rng = SH.Cells

        End If

        On Error Resume Next

        LastRow = Rng.Find(What:="*", _

                           after:=Rng.Cells(1), _

                           Lookat:=xlPart, _

                           LookIn:=xlFormulas, _

                           SearchOrder:=xlByRows, _

                           SearchDirection:=xlPrevious, _

                           MatchCase:=False).Row

        On Error GoTo 0

        If LastRow < minRow Then

            LastRow = minRow

        End If

    End Function

    '<<========= 

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Salva il file con l’estensione xlsm
    • Alt+F8 per aprire  la finestra di gestione delle macro
    • Seleziona Tester | Esegui

    Potresti scaricare il mio file di prova Luca20170307.xlsm a:

    https://www.dropbox.com/s/8w8dkcmpqtrefkl/Luca20170307.xlsm?dl=0

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento