Função para Somar M...
 
Notifications
Clear all

Função para Somar Matrizes

7 Posts
2 Usuários
0 Reactions
3,208 Visualizações
(@jorudess)
Posts: 53
Trusted Member
Topic starter
 

Fala galera,

Eu tenho duas matrizes, ambas com o mesmo número de linhas e colunas, preciso de uma função VBA para somar (ou multiplicar) as duas matrizes de forma direta, ou seja L1C1 + L1C1, ou L1C1 * L1C1 e assim por diante

Detalhes: A segunda matrizes é fixa, então se puder deixar o range dela fixo na função, melhor ainda! E a função deve apresentar apenas o somatório final da matriz resultado, não preciso que gere uma matriz resultado apresentando a soma dos elementos.

Valeu!

 
Postado : 08/08/2017 10:27 am
(@skulden)
Posts: 170
Estimable Member
 

Não precisa criar uma função em VBA pra isso.

basta deixar selecionado um campo em branco com a mesma quantidade de linhas e colunas das suas matrizes, após isso digite "=" pra iniciar a fórmula e selecione a primeira matriz, depois disso acrescente o sinal de soma "+" e selecione a outra matriz (por ex: =I1:J2+L1:M2). Feito isso basta apertar CONTROL+ SHIFT + ENTER.

Se você só quer a soma, basta usar = SOMA(Intervalo1;Intervalo2), não precisa nem trabalhar matricialmente.

Abraços.

Se a resposta lhe foi útil, clique no joinha!

 
Postado : 08/08/2017 10:54 am
(@jorudess)
Posts: 53
Trusted Member
Topic starter
 

Skulden,

Como eu disse.. não quero gerar uma matriz resultado... eu quero capturar o somatório da matriz resultado. Por exemplo:

Matriz 1
3 | 5
1 | 4

Matriz 2 (Fixa)
6 |4
12| 6

Somatório da matriz resultado = 9 + 9 + 13 + 10 = 41 (este é o valor que me interessa)

Preciso de uma função porque a minha Matriz1 na verdade não contém números... ela contém textos coloridos... então eu uso uma função que conta células coloridas (para cada cor específica), converte para números, etc e tal... e só no final eu preciso fazer a soma ou multiplicação das duas matrizes, elemento por elemento, L1C1 da Matriz 1 + L1C1 da Matriz 2... por aí vai...

Eu tenho várias matrizes na minha planilha e atualmente uso matrizes adicionais (como esta que você sugeriu) mas está deixando a planilha muito pesada, quero utilizar uma função para simplificar os calculos...

 
Postado : 08/08/2017 11:13 am
(@skulden)
Posts: 170
Estimable Member
 

"Se você só quer a soma, basta usar = SOMA(Intervalo1;Intervalo2), não precisa nem trabalhar matricialmente."

Isso não te serve por qual motivo?

Abraços.

Se a resposta lhe foi útil, clique no joinha!

 
Postado : 08/08/2017 11:45 am
(@jorudess)
Posts: 53
Trusted Member
Topic starter
 

Porque minha Matriz1 não tem numeros.. ela tem texto. Eu te dei um exemplo com números só para simplificar, mas na verdade eu uso outras funções para converter os textos em números, além do mais... eu vou usar a mesma função para multiplicar as duas matrizes... enfim.. resumindo...

O que eu preciso é (L1C1 da Matriz 1 * L1C1 da Matriz 2) + (L1C2 da Matriz 2 * L1C2 da Matriz 2)... ou seja... a operação tem que ser realizada com o elemento correspondente da segunda matriz...

 
Postado : 08/08/2017 12:00 pm
(@jorudess)
Posts: 53
Trusted Member
Topic starter
 

Eu tentei simplificar, só pedindo o código direto, mas para evitar confusão ou que sejam sugeridas soluções que não me atendam, eu vou trazer um exemplo proximo da minha situação real.

Matriz 1 (Texto)
AA | AB
BA | BB

Matriz 2 (Fixa) (Cada um dos valores da Matriz 1 tem seu valor correspondente na Matriz 2)
06 | 04
12 | 06

Eu tenho uma função que conta celulas coloridas...quando qualquer celula da Matriz 1 está pintada, ela vale 01, quando ela não está pintada, ela vale 0.

Exemplo: eu pinto AA e BA... é como se minha Matriz 1 ficasse assim:
01 | 00
01 | 00

Multiplicando Matriz 1 por Matriz 2 DIRETAMENTE fica:
06 | 00
12 | 00

Somatório = 18

Eu só preciso da função que multiplique diretamente as matrizes... o ajuste das celulas coloridas e tal eu faço depois...

 
Postado : 08/08/2017 12:31 pm
(@jorudess)
Posts: 53
Trusted Member
Topic starter
 

Consegui fazer aqui...

Achei este video que me deu um norte.... https://www.youtube.com/watch?v=uO4Hpygd5Wc

Fiz os ajustes e o código ficou assim, caso alguem tenha interesse:

Function MULTMATRIZ(Matriz1 As Range, Matriz2 As Range)


Dim nRows As Integer
Dim nCols As Integer
Dim Result As Single

Dim i As Integer
Dim j As Integer

nRows = Matriz1.Rows.Count
nCols = Matriz1.Columns.Count

    For i = 1 To nRows
        For j = 1 To nCols
            Result = Result + (Matriz1.Cells(i, j) * Matriz2.Cells(i, j))
        Next j
    Next i

MULTMATRIZ = Result


End Function
 
Postado : 08/08/2017 1:34 pm