Sommare più celle di un vettore verticale in base al contenuto su un vettore orizzontale

Anonimo
2017-04-14T10:21:28+00:00

Cerco di semplificare il discorso... ho una colonna B con memorizzati gli identificativi, sulla colonna D ho i valori corrispondenti ad ogni identificativo; questi sono i due vettori verticali di riferimento oppure chiamateli matrice.

Ho poi a disposizione un vettore orizzontale in cui devo inserire manualmente gli identificativi della colonna B se voluti... il risultato finale deve essere la somma dei valori (colonna D) corrispondenti alla colonna B in base all'inserimento dati nella riga.

Ammettiamo per esempio di avere una colonna B con etichette da A01 fino ad A20, nella corrispondente colonna D ci sono dei valori numerici da 1 a 20, per esempio; se nella riga di inserimento dati metto per ogni cella, per esempio, A01/A03/A10... il risultato finale deve essere 14.

E' come se la funzione dovesse cercare i dati inseriti nel vettore orizzontale nella colonna B e restituirmi la somma corrispondente in base ai valori della colonna D. Per il momento ho risolto solo inserendo tante funzioni SOMMA.SE per ogni cella del vettore orizzontale, ma vorrei qualche funzione più versatile, anche perché in caso di tante celle nel vettore orizzontale la duplicazione della funzione sopra indicata diventa laboriosa.

Attendo... 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

Risposta accettata dall'autore della domanda

Anonimo
2017-04-14T13:38:28+00:00

Ciao Giorgio,

Mi rendo conto che non è semplice capire il problema... mi scuso per non aver detto inizialmente che non volevo VBA. Per quanto riguarda la funzione MATR.SOMMA.PRODOTTO effettivamente nel tuo esempio funziona, ma ho provato ad inserirla dove voglio io e non funziona... forse la uso male... tra l'altro non ho capito cosa voglia dire il segno -- nella funzione.

Fatta questa premessa, spiego meglio quale sia lo scopo: il calcolo viene applicato in assemblea di condominio per calcolare le deleghe e quindi assegnare al delegato la somma dei singoli valori. Per semplificare cosa cerco, riporto un'immagine di quello che dovrebbe essere il risultato finale se tutto funziona:

La colonna A rappresenta la codifica degli appartamenti, la colonna B rappresenta i relativi millesimi, l'insieme D1:H1 rappresenta il campo deleghe relativo ad A01 e così via... nella colonna I rappresento cosa dovrebbe ottenere la funzione, riga per riga. Ovviamente nell'esempio è un calcolo manuale! Credo ora sia ben chiaro cosa voglio ottenere... resto in attesa, grazie dell'intervento.

Nella cella I1, immetti la formula

=MATR.SOMMA.PRODOTTO(($A$1:$A$20=C1:H1)*($B$1:$B$20))

Trascina la formula in basso sino alla cella I20:

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-04-14T14:52:17+00:00

    Benissimo, grazie! Sembra funzionare anche implementato all'interno del vero foglio di calcolo molto più complesso dell'esempio.

    Tuttavia, vorrei approfondire perché non capisco cosa faccia effettivamente la funzione o meglio... era chiara la funzione base che somma la moltiplicazione dei valori corrispondenti, ma in questa funzione c'è effettivamente una variante che non viene spiegata e difficile da capire, mi riferisco a ($A$1:$A$20=C1:H1). Sembra quasi che il singolo valore numerico venga moltiplicato per 0 oppure per 1 in base a tale relazione che però non mi sembra di immediata comprensione.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-04-14T13:46:54+00:00

    Ciao Giorgio,

    =MATR.SOMMA.PRODOTTO(($A$1:$A$20=C1:H1)*($B$1:$B$20))

    Oppure, più semplicemente,

        =MATR.SOMMA.PRODOTTO(($A$1:$A$20=C1:H1)*$B$1:$B$20)

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-04-14T13:06:37+00:00

    Mi rendo conto che non è semplice capire il problema... mi scuso per non aver detto inizialmente che non volevo VBA. Per quanto riguarda la funzione MATR.SOMMA.PRODOTTO effettivamente nel tuo esempio funziona, ma ho provato ad inserirla dove voglio io e non funziona... forse la uso male... tra l'altro non ho capito cosa voglia dire il segno -- nella funzione.

    Fatta questa premessa, spiego meglio quale sia lo scopo: il calcolo viene applicato in assemblea di condominio per calcolare le deleghe e quindi assegnare al delegato la somma dei singoli valori. Per semplificare cosa cerco, riporto un'immagine di quello che dovrebbe essere il risultato finale se tutto funziona:

    La colonna A rappresenta la codifica degli appartamenti, la colonna B rappresenta i relativi millesimi, l'insieme D1:H1 rappresenta il campo deleghe relativo ad A01 e così via... nella colonna I rappresento cosa dovrebbe ottenere la funzione, riga per riga. Ovviamente nell'esempio è un calcolo manuale! Credo ora sia ben chiaro cosa voglio ottenere... resto in attesa, grazie dell'intervento.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-04-14T12:13:45+00:00

    Ciao Giorgio,

    Cerco di semplificare il discorso... ho una colonna B con memorizzati gli identificativi, sulla colonna D ho i valori corrispondenti ad ogni identificativo; questi sono i due vettori verticali di riferimento oppure chiamateli matrice.

    Ho poi a disposizione un vettore orizzontale in cui devo inserire manualmente gli identificativi della colonna B se voluti... il risultato finale deve essere la somma dei valori (colonna D) corrispondenti alla colonna B in base all'inserimento dati nella riga.

    Ammettiamo per esempio di avere una colonna B con etichette da A01 fino ad A20, nella corrispondente colonna D ci sono dei valori numerici da 1 a 20, per esempio; se nella riga di inserimento dati metto per ogni cella, per esempio, A01/A03/A10... il risultato finale deve essere 14.

    E' come se la funzione dovesse cercare i dati inseriti nel vettore orizzontale nella colonna B e restituirmi la somma corrispondente in base ai valori della colonna D. Per il momento ho risolto solo inserendo tante funzioni SOMMA.SE per ogni cella del vettore orizzontale, ma vorrei qualche funzione più versatile, anche perché in caso di tante celle nel vettore orizzontale la duplicazione della funzione sopra indicata diventa laboriosa.

    Temo che io non abbia capito ma, forse, tu stia cercando una formula del genere:

         =MATR.SOMMA.PRODOTTO(--(A1:A20=B1:B20);D1:D20)

    Se, però, l'intenzione fosse quella di associare ciascun valore nella matrice di input (in questo caso, A1:A20, ma eventualmente qualunque intervallo) con la colonna B e restituire la somma dei valori corrispondenti nella colonna D, potresti provare la seguente UDF (funzione utente).

    • 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 Function SommaVettore(r0, r1, r2)

        Dim i As Long

        Dim v0 As Variant, v1 As Variant, v2 As Variant

        Dim Res As Variant

        Dim dSum As Double

        v0 = r0.Value

        v1 = r1.Value

        v2 = r2.Value

        If IsArray(v0) Then

            For i = 1 To UBound(v0)

                If Not IsEmpty(v0(i, 1)) Then

                    Res = Application.Match(v0(i, 1), v1, 0)

                    If Not IsError(Res) Then

                        dSum = dSum + v2(Res, 1)

                    End If

                End If

            Next i

        Else

            If Not IsEmpty(v0) Then

                Res = Application.Match(v0, v1, 0)

                If Not IsError(Res) Then

                    dSum = v2(Res, 1)

                End If

            End If

        End If

        SommaVettore = dSum

    End Function

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

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Salva il file con l’estensione xlsm

    Questa funzione utente può essere utilizzata in Excel come qualsiasi funzione nativa e nel scenario indicato qui sopra, la formula

    =SommaVettore(A1:A20 ;B1:B20;D1:D20) 

    restituirebbe il risultato 54:

    In questo scenario, la formula 

    =SommaVettore(A1:A3;B1:B20;D1:D20)

    restituirebbe il valore 23.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento