Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Dúvidas sobre cálculos, funções simples e aninhadas, fórmulas matriciais, etc.
  • Avatar do usuário
  • Avatar do usuário
Por rodolfonobrega
#8867
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!
Avatar do usuário
Por Reinaldo
Avatar
#8870
Não sei se entendi mas veja se na celula L34 do anexo é o que espera
Você não está autorizado a ver ou baixar esse anexo.
Por rodolfonobrega
#8871
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!
Você não está autorizado a ver ou baixar esse anexo.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord