Creare una funzione personalizzata in VBA per Excel che restituisca una matrice

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:

A =  \begin{bmatrix}  a_1 \\ a_2 \\ a_3  \end{bmatrix}    B =  \begin{bmatrix}  b_1 & b_2 & b_3  \end{bmatrix}

Il loro prodotto risulterà così:

A \times B=  \begin{bmatrix}  a_1b_1 & a_1b_2 & a_1b_3 \\  a_2b_1 & a_2b_2 & a_2b_3 \\  a_3b_1 & a_3b_2 & a_3b_3  \end{bmatrix}

Nel nostro modulo aggiungiamo ora il seguente codice:

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.

Rispondi

This site uses Akismet to reduce spam. Learn how your comment data is processed.