Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Prodotto tra matrici VBA Excel

800 views
Skip to first unread message

Elefante

unread,
Jan 7, 2009, 11:38:29 AM1/7/09
to
In VBA per Excel devo effetturare rispettivamente un prodotto tra
due matrici.
Avendo le matrici:

A(2,2) e B(2,2)

esiste una funzione che effettua il prodotto tra le due matrici ?
Grazie.


fernando cinquegrani

unread,
Jan 7, 2009, 1:12:24 PM1/7/09
to

"Elefante" <elef...@tiscalinet.it> ha scritto nel messaggio
news:4964daac$0$1117$4faf...@reader4.news.tin.it...

il prodotto di due matrici 2 righe x 2 colonne
è ancora una matrice 2 righe x 2 colonne.
se hai A in A1:B2
e B in C1:D2
seleziona un intervallo di celle 2x2 (E1:F2)
e inserisci
=MATR.PRODOTTO(A1:B2;C1:D2)
inviando con Ctrl+Maiusc+Invio.

guarda nell'help la guida alla funzione:
l'esempio è proprio ciò che stai chiedendo.
.f


Elefante

unread,
Jan 8, 2009, 1:57:17 AM1/8/09
to

O.K., ma come faccio in VBA per Excel ?
Grazie

"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:%2373ZBOP...@TK2MSFTNGP03.phx.gbl...

fernando cinquegrani

unread,
Jan 8, 2009, 2:42:43 AM1/8/09
to
"Elefante" <elef...@tiscalinet.it> ha scritto nel messaggio
news:4965a3d1$0$1112$4faf...@reader2.news.tin.it...

>
> O.K., ma come faccio in VBA per Excel ?

non ho capito cosa devi fare della matrice risultato.
questa function è completamente equivalente alla
funzione matr.prodotto

Public Function promat(a As Range, b As Range) As Variant
Dim temp As Variant, c As String
c = "MMult(" & a.Address & "," & b.Address & ")"
temp = Evaluate(c)
promat = temp
End Function

se crei un punto d'interruzione su
promat = temp
puoi testare nella finestra immediata i valori
? temp(1,1), temp(1,2), temp(2,1), temp(2,2)
.f

p.s.: metti la tua risposta *dopo* il post letto


fernando cinquegrani

unread,
Jan 8, 2009, 2:47:40 AM1/8/09
to

"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:exXU0SWc...@TK2MSFTNGP04.phx.gbl...

p.s.: guarda anche nell'help la funzione
application.worksheetfunction.mmult


Mauro Gamberini

unread,
Jan 8, 2009, 6:10:19 AM1/8/09
to
>> =MATR.PRODOTTO(A1:B2;C1:D2)
>> inviando con Ctrl+Maiusc+Invio.
>>
> O.K., ma come faccio in VBA per Excel ?
>

Registrare una macro seguendo le indicazioni
di Fernando?

--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://blog.maurogsc.eu/


Elefante

unread,
Jan 8, 2009, 6:33:46 AM1/8/09
to

"Mauro Gamberini" <maurogsc...@RIMUOVEREaliceposta.it> ha scritto nel
messaggio news:%23sS7yGY...@TK2MSFTNGP04.phx.gbl...
O.K. sistemato con :
C(I) = Application.WorksheetFunction.MMULT(A(I, 1), B(I, 1))
Grazie


fernando cinquegrani

unread,
Jan 8, 2009, 1:53:10 PM1/8/09
to

"Elefante" <elef...@tiscalinet.it> ha scritto nel messaggio
news:4965e49f$0$1116$4faf...@reader4.news.tin.it...

>
> O.K. sistemato con :
> C(I) = Application.WorksheetFunction.MMULT(A(I, 1), B(I, 1))

non capisco molto la tua notazione.
vedi se questa macro ti può essere utile

Option Explicit
Public Sub promat()
Dim i As Long, j As Long, m As Long
Dim a(1 To 2, 1 To 2) As Double, b(1 To 2, 1 To 2) As Double, c() As Double
a(1, 1) = 1: a(1, 2) = 2: a(2, 1) = 3: a(2, 2) = 4
b(1, 1) = 1: b(1, 2) = 2: b(2, 1) = 3: b(2, 2) = 4
ReDim c(1 To UBound(a, 1), 1 To UBound(b, 2))
For i = 1 To UBound(a, 1)
For j = 1 To UBound(b, 2)
c(i, j) = 0
For m = 1 To UBound(b, 1)
c(i, j) = c(i, j) + a(i, m) * b(m, j)
Next
Debug.Print c(i, j)
Next: Next
End Sub

ora modifica le dimensioni e/o il contenuto delle matrici,
ad esempio con

Dim a(1 To 2, 1 To 3) As Double, b(1 To 3, 1 To 2) As Double, c() As Double
a(1, 1) = 1: a(1, 2) = 2: a(1, 3) = 3: a(2, 1) = 4: a(2, 2) = 5: a(2, 3) = 6
b(1, 1) = 1: b(1, 2) = 2: b(2, 1) = 3: b(2, 2) = 4: b(3, 1) = 5: b(3, 2) = 6

(il numero delle righe di a deve essere sempre pari al numero di colonne di
b)
.f

fernando cinquegrani

unread,
Jan 8, 2009, 2:20:07 PM1/8/09
to

"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:eM2DqJc...@TK2MSFTNGP06.phx.gbl...

> (il numero delle righe di a deve essere sempre pari al numero di colonne
> di b)

oops! il numero delle colonne di a deve essere sempre pari al numero di
righe di b)

es.:

a(1, 1) = 1: a(1, 2) = 2: a(1, 3) = 3: a(1, 4) = 4
a(2, 1) = 5: a(2, 2) = 6: a(2, 3) = 7: a(2, 4) = 8

b(1, 1) = 1: b(1, 2) = 2: b(1, 3) = 3
b(2, 1) = 4: b(2, 2) = 5: b(2, 3) = 6
b(3, 1) = 7: b(3, 2) = 8: b(3, 3) = 9
b(4, 1) = 10: b(4, 2) = 11: b(4, 3) = 12

c sarà una matrice 2x3
.f


0 new messages