Página 1 de 1

Função Matricial

Enviado: 21 Mar 2016 às 16:04
por rodolfonobrega
Galera, como vai, tudo bem?

Tenho uma planilha com vários ângulos em grau minuto e segundo, e, em uma parte dela, preciso do somatório destes ângulos!
Para convertê-lo em Decimais estou usando o seguinte código:
Código: Selecionar todos
Function Convert_Decimal(Degree_Deg) As Variant
    'Declaração das variáveis.
    Dim degrees As Double
    Dim minutes As Double
    Dim seconds As Double
    Dim reg As Object

    'Inicia o módulo de expressões regulares.
    Set reg = CreateObject("vbscript.regexp")

    'Indico o teste que a expressão regular deverá fazer.
    reg.Pattern = "[0-9]+° [0-9]+' [0-9\.,]+" & Chr(34)
    
    
    If reg.test(Degree_Deg) = False Then
        Convert_Decimal = "Format Error"
        Exit Function
    End If
    
    'Substituo vírgula por ponto.
    Degree_Deg = Replace(Degree_Deg, ",", ".")
    
    'Obtenho o valor dos graus.
    degrees = Val(Left(Degree_Deg, InStr(1, Degree_Deg, "°") - 1))
    
    'Obtenho o valor dos minutos
    minutes = Val(Mid(Degree_Deg, InStr(1, Degree_Deg, "°") + 2, _
                 InStr(1, Degree_Deg, "'") - InStr(1, Degree_Deg, _
                 "°") - 2)) / 60
     
     'Obtenho o valor dos segundos
     seconds = Val(Mid(Degree_Deg, InStr(1, Degree_Deg, "'") + _
                2, Len(Degree_Deg) - InStr(1, Degree_Deg, "'") - 2)) _
                / 3600
    Convert_Decimal = degrees + minutes + seconds
End Function
Convertendo cada um individualmente funciona normal, mas, eu gostaria da somatória total destes valores e por isso estou tentando usar função matricial:
Código: Selecionar todos
{=SOMA(Convert_Decimal(C3:C12))}
Que, ao meu entender, ele deveria converter cada célula individualmente em decimal e depois fazer o somatório, no entanto, fico recebendo o erro #Valor...

Utilizando uma função matricial para somar os valores absolutos de um intervalo de células, por exemplo:
Código: Selecionar todos
{=SOMA(ABS(C3:C12))}
Funciona normalmente...

Eu consigo fazer estes cálculos usando uma coluna auxiliar, porém, eu gostaria de fazê-lo sem esta coluna!

Será que alguém poderia me ajudar?

Muito obrigado!

Função Matricial

Enviado: 21 Mar 2016 às 16:22
por Jonathaluis
Rodolfo, boa tarde!

Você teria os dados de entrada de C3 até C12 para que eu possa entender melhor sua necessidade?
Gostaria de entender o que quer como retorno.

Re: Função Matricial

Enviado: 21 Mar 2016 às 16:27
por Reinaldo
Não sei se entendi mas veja se na celula L34 do anexo é o que espera

Função Matricial

Enviado: 21 Mar 2016 às 17:18
por rodolfonobrega
Eu estou usando uma função escrita em VBA que obtive a partir do arquivo que o Reinaldo postou para poder somar os valores em GMS, no entanto, eu queria entender como funciona para usar uma Fórmula matricial direto!

As fórmulas matriciais a que me refiro são estas descritas no link:
http://gurudoexcel.com/introducao-a-for ... atriciais/

Utilizando uma fórmula matricial eu consigo somar todos os valores em módulo de uma coluna, utilizando a seguinte fórmula:
Código: Selecionar todos
{=SOMA(ABS(C3:C12))}
Ao que eu entendo, quando usamos uma fórmula matricial "fórmula entre {}", o excel primeiro executa a função em todo o intervalo e só depois vai para a próxima função, no exemplo acima, o excel primeiro tira o módulo de cada número no intervalo "C3 até C12" e só depois faz o somatório!
(Visto que a função ABS() não trabalha com uma lista de valores e sim com apenas um valor)

No entanto, tentando utilizar o mesmo conceito na função escrita em VBA para converter GMS para Graus Decimais, eu obtenho o erro de #Value, ou seja, o excel não está primeiro convertendo todos os valores em decimal para depois somar (igual o raciocínio dos números absolutos)

E eu queria saber que parâmetros tenho que utilizar no código VBA para que eu possa usar junto com uma fórmula matricial, sem dar erro!

Ficou muito confuso? =S
A Planilha em anexo vai exemplificar bem o que quero dizer!

Mas desde já eu agradeço a resposta e a ajuda!