Unire campi con dati tipo nome uguali e unire sommando campi valore tipo numerico: come si fa?

Anonimo
2013-01-22T07:57:46+00:00

Excel: ho una colonna dove mi riporta dei nominativi una colonna dove mi riporta dei valori numerici. Ho necessità che compaia una sola riga per nominativo che sommi i valori fra loro.

Es.

Mario 12

Mario 33

Mario 31

Luca 10

Luca 4

Luca 19

Andrea 31

Andrea 0

Andrea 8

Elaborato dovrebbe venire così

Mario 76

Luca 33

Andrea 39

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
Risposta accettata dall'autore della domanda
Anonimo
2013-01-22T09:49:40+00:00

Ciao rachelede luca,

un modo potrebbe essere estrarre i valori univoci dei nomi, quindi usare la funzione SOMMA.SE.

Per usare questa tecnica è necessario innanzi tutto intestare le colonne dei dati, per esempio così:

     |      A   |     B     |

---+-------+-------+

  1 | Nomi  | Valori |

2 | Mario  |      12 |

3 | Mario  |      33 |

4 | Mario  |      31 |

5 | Luca    |      10 |

6 | Luca     |       4 |

7 | Luca     |     19 |

8 | Andrea |     31 |

9 | Andrea |       0 |

10 | Andrea |       8 |

Quindi

  • selezioni l'intervallo A1:A10
  • Dati > Ordina e filtra > Avanzate
  • Filtro avanzato:

(°) Copia in un'altra posizione

Copia in: D1

[v] Copia univoca dei record

[ OK ]

e ottieni:

     |      D   |     E     |

---+-------+-------+

  1 | Nomi  |            |

2 | Mario  |           |

3 | Luca     |          |

4 | Andrea |         |

e, per finire:

  • E1: Valori
  • E2: =SOMMA.SE($A$2:$A$10;D2;$B$2:$B$10)

(Da copiare in basso q.b.)

La risposta è stata utile?

60+ persone hanno trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2013-01-22T09:29:01+00:00

Excel: ho una colonna dove mi riporta dei nominativi una colonna dove mi riporta dei valori numerici. Ho necessità che compaia una sola riga per nominativo che sommi i valori fra loro.

<cut>

Funzione: SOMMA.SE() nella guida di Excel oppure qui:

http://office.microsoft.com/it-it/excel-help/somma-se-funzione-somma-se-HP010342932.aspx

Anche se, tu non spieghi *dove* vorresti questa cosa...

La risposta è stata utile?

2 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-09-23T02:37:20+00:00

    Ciao DUBBO.,

    Ciao a tutti!

    Benvenuto alla Community!

    io ho questa situazione leggermente diversa:

        |      A   |     B     |   C    |

    ---+-------+-------+-------

      1 | Nomi  | Valori |  Valori

    2 | Mario  |      12 |  x

    3 | Mario  |      33 |  x

    4 | Mario  |      31 |  x

    5 | Luca    |      10 |  y

    6 | Luca     |       4 |  y

    7 | Luca     |     19 |  y

    8 | Andrea |     31 |  z

    9 | Andrea |       0 |  z

    10 | Andrea |       8 |  z

    Devo ottenere:

        |      A   |     B     |   C    |

    ---+-------+-------+-------

      1 | Nomi  | Valori             |  Valori

    2 | Mario  |      12, 33, 31 |  x

    3 | Luca    |      10, 4, 19   |  y

    4 | Andrea|      31, 0, 8     |  z

    in pratica:

    se A1 identico A2:

    A1 = A1

    B1 = B1, B2

    C1 = C1 (se C1 = C2 altrimenti C1, C2)

    Infatti, credo che il problema sia intriscamente diversa!

    Tuttavia, 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 SH As Worksheet

        Dim srcRng As Range, destRng As Range

        Dim arrIn As Variant, arrOut() As Variant

        Dim arrKeys As Variant, arrItems As Variant

        Dim arrKeys2 As Variant, arrItems2 As Variant

        Dim oDic As Object, oDic2 As Object

        Dim sStr As String

        Dim dVal As Double

        Dim vVal As Variant

        Dim i As Long, j As Long, iCtr As Long

        Dim LRow As Long

        Dim CalcMode As Long

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

        Set WB = ThisWorkbook

        Set SH = WB.Sheets(SFoglio)

        With SH

            LRow = LastRow(SH, .Columns("A:A"))

            Set srcRng = .Range("A2:C" & LRow)

            Set destRng = .Range("E1")

        End With

        arrIn = srcRng.Value

        Set oDic = CreateObject("Scripting.Dictionary")

        Set oDic2 = CreateObject("Scripting.Dictionary")

        oDic.CompareMode = 1

        oDic2.CompareMode = 1

        For i = 1 To UBound(arrIn)

            sStr = Trim(arrIn(i, 1))

            dVal = arrIn(i, 2)

            vVal = arrIn(i, 3)

            With oDic

                If Not .exists(sStr) Then

                    .Add Key:=sStr, Item:=dVal

                    oDic2.Add Key:=sStr, Item:=vVal

                Else

                    .Item(sStr) = .Item(sStr) & "," & dVal

                End If

            End With

        Next i

        With oDic

            arrKeys = .keys

            arrItems = .items

            iCtr = .Count

        End With

        With oDic2

            arrKeys2 = .keys

            arrItems2 = .items

        End With

        ReDim arrOut(1 To iCtr, 1 To 3)

        For i = 1 To iCtr

            arrOut(i, 1) = arrKeys(i - 1)

            arrOut(i, 2) = arrItems(i - 1)

            arrOut(i, 3) = arrItems2(i - 1)

        Next i

        On Error GoTo XIT

        With Application

            CalcMode = .Calculation

            .Calculation = xlCalculationManual

            .ScreenUpdating = False

        End With

        With destRng

            .Offset(1).Resize(iCtr, 3).Value = arrOut

            With .Resize(1, 3)

                .Value = srcRng.Rows(0).Value

                .Font.Bold = True

                .Interior.Color = RGB(255, 255, 0)

            End With

        End With

    XIT:

        With Application

            .Calculation = CalcMode

            .ScreenUpdating = True

        End With

    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

    Nonostante la lunghezza del codice, il tempo di esecuzione è marginalmente più di 1 millisecondo.

    Potresti scaricare il mio file di prova Dubbo20160923.xlsma:

    https://www.dropbox.com/s/3dmvy0q25yz42rs/Dubbo20160923.xlsm?dl=0

    In questo file, ho assegnato la macro ad un pulsante sul Foglio1.

    Mi rendo conto che sei nuovo alla Community e non sarai quindi consapevoli del modus operandi di questo forum, ma, per riferimento futuro, vorrei suggerire che sia meglio di non accodarsi a post chiusi e ormai vecchi. Ciò consentirà di massimizzare le possibilità di ricevere risposte utili e aiuterà anche coloro che potessero cercare soluzioni ai problemi simili negli archivi della Community.

    Alla prossima.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2016-09-23T09:21:11+00:00

    Gentilissimo,

    grazie per la risposta velocissima.

    Lo script funziona egregiamente quando i valori della colonna B sono numeri, mentre se sono anche valori testuali rilevo:

    Errore di Runtime '13'

    Tipo non corrispondente

    e col debug mi viene evidenziata la riga:

    dVal = arrIn(i, 2)

    E' meglio dichiarare:

    Dim dVal As Double

    come Variant o String?

    Saluti,

    Diego

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-09-22T20:23:18+00:00

    Ciao a tutti! io ho questa situazione leggermente diversa:

        |      A   |     B     |   C    |

    ---+-------+-------+-------

      1 | Nomi  | Valori |  Valori

    2 | Mario  |      12 |  x

    3 | Mario  |      33 |  x

    4 | Mario  |      31 |  x

    5 | Luca    |      10 |  y

    6 | Luca     |       4 |  y

    7 | Luca     |     19 |  y

    8 | Andrea |     31 |  z

    9 | Andrea |       0 |  z

    10 | Andrea |       8 |  z

    Devo ottenere:

        |      A   |     B     |   C    |

    ---+-------+-------+-------

      1 | Nomi  | Valori             |  Valori

    2 | Mario  |      12, 33, 31 |  x

    3 | Luca    |      10, 4, 19   |  y

    4 | Andrea|      31, 0, 8     |  z

    in pratica:

    se A1 identico A2:

    A1 = A1

    B1 = B1, B2

    C1 = C1 (se C1 = C2 altrimenti C1, C2)

    Grazie in anticipo!

    La risposta è stata utile?

    0 commenti Nessun commento