Obiettivo: creare una funzione personalizzata in Excel che restituisca come risultato una matrice n x m
Supponiamo di voler realizzare una funzione personalizzata in Excel che effettui la medesima operazione di MATR.PRODOTTO, ma allo stesso tempo consideri sempre la matrice in ingresso A come una matrice n x 1 e la matrice in ingresso B come una matrice 1 x m. Facciamo questa semplificazione a titolo di esempio.
Quindi abbiamo due matrici tipo queste:
Il loro prodotto risulterà così:
Nel nostro modulo aggiungiamo ora il seguente codice:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Public Function MATH_MATRICE(matrice1 As Range, matrice2 As Range) As Variant Dim risultato() As Variant ReDim risultato(1 To matrice1.Count, 1 To matrice2.Count) For rig = 1 To matrice1.Count For col = 1 To matrice2.Count risultato(rig, col) = matrice1(rig) * matrice2(col) Next col Next rig MATH_MATRICE = risultato End Function |
Notiamo che in questo modo vengono percorsi tutti i valori del range, indipendentemente dalla loro geometria, come se fossero in una riga o colonna.
Per testare il risultato possiamo fare una verifica su un esempio con la funzione MATR.SOMMA.PRODOTTO. Nel caso specifico creiamo una versione e parametrizzabile del SOMMA.PIÙ.SE.
A1:A7 e B1:B7 sono riempiti con valori da esempio. E2:H2 saranno quattro spazi dove potremo inserire, a nostro piacimento da 0 a 4 nominativi da verificare. In E3 abbiamo la seguente formula di controllo (NB: fatta con MATR.PRODOTTO):
=MATR.SOMMA.PRODOTTO(–(A2:A7=E2:H2);MATR.PRODOTTO(B2:B7;E1:H1))
In E4 aggiungiamo invece la formula con la nostra versione di MATR.PRODOTTO:
=MATR.SOMMA.PRODOTTO(–(A2:A7=E2:H2);MATH_MATRICE(B2:B7;E1:H1))
Scopo raggiunto.