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
