Exemplos de Estatísticas e Matemáticas no VBA do Excel Esta página contém exemplos simples de Estatística e Matemática no VBA do Excel. Muitos dos exemplos usados já estão disponíveis em funções que acompanham o Excel. Os usuários podem usar estas funções como ferramentas para verificar os resultados que são obtidos nos exemplos. Estes exemplos requerem habilidade básica de programação no VBA. Os usuários são estimulados a ler o Simulation Based Tutorial 101 se tiverem problemas de entender os conceitos de programação e termos usados nesta página. Este documento contém informação sobre os seguintes tópicos. Encontrando a Mediana Geração de Números Aleatórios de Distribuição Uniforme Soma de Números Cálculo do Fatorial Coeficiente Binomial Distribuição Normal Padrão Acumulada Encontrando a Mediana Para encontrar a mediana de um array, dois passos são exigidos. Primeiro o array precisa ser sorteado (estar em ordem), depois então uma estrutura de decisão precisa ser usada. Passo 1. Sortear o array. Ver o exemplo de sortear. Passo 2. Se o total de elementos no array for um número ímpar (definido por Ubound(Arr) Mod = 1), então a mediana é o número médio (definido por Arr(Int(Ubound(Arr) / 2) + 1) ). Se o totla de elementos no array for um número par então tome a media dos dois números médios. Function u_mediana(Arr() As Single) Call Sort(Arr) If UBound(Arr) Mod 2 = 1 Then u_mediana = Arr(Int(UBound(Arr) / 2) + 1) Else u_mediana = (Arr(UBound(Arr) / 2) + Arr(Int(UBound(Arr) / 2) + 1)) / 2 End If End Function Esta função também é implementada no exemplo Bootstrap - A Non-Parametric Approach. (Esta função é similar à função MED() fornecida pelo Excel.) Retorne ao Topo da Página Geração de Números Aleatórios de Distribuição Uniforme Esta função fornece uma distribuição uniforme de números aleatórios num intervalo especificado. Function NumeroAleatorioUniforme (Inferior As Single, Superior As Single) NumeroAleatorioUniforme = Rnd * (Superior - Inferior + 1) + Inferior End Function Por exemplo, a função seguinte retorna um número aleatório entre 10 e 100: NumeroAleatorioUniforme (10, 100) (Esta função é similar à função ALEATÓRIOENTRE() fornecida pelo Excel.) Retorne ao Topo da Página Soma de Números Esta função lê um array, e depois então retorna o total dos números nos elementos do array. Function u_soma(Arr() As Single) For i = 1 To UBound(Arr) u_soma = u_soma + Arr(i) Next i End Function Aqui está a sub routine que chama a função u_soma e retorna a soma numa caixa de mensagem. Sub computeSoma() Dim arr(3) As Single arr(1) = 5 arr(2) = 4 arr(3) = 10 MsgBox u_soma (arr) End Sub A caixa de mensagem retornará 19. (Esta função é semelhante a função SOMA() fornecida pelo Excel). Return to Top of Page Cálculo do Factorial Para iniciar o loop, atribuímos a função u_fatorial, um valor inicial de 1. Multiplicamos o novo número (i) com o número atual (u_fatorial ) até i = Int(número). Note que a função Int é exigida para assegurar que o número é inteiro ou torná-lo um inteiro. Function u_fatorial (numero As Single) u_fatorial = 1 For i = 1 To Int(numero) u_fatorial = u_fatorial * i Next i End Function Por exemplo, a função seguinte retorna um 6: u_fatorial (3) (Esta função é similar à função FACT() fornecida pelo Excel.) Retorne ao Topo da Página Coeficiente Binomial Function u_binoCoef(n, j) Dim i As Integer Dim b As Double b=1 For i = 0 To j - 1 b = b * (n - i) / (j - i) Next i u_binoCoef = b End Function A função seguinte calcula toddas as combinações possíveis de 5 itens escolhidos de 10 itens. Esta função retorna 252: u_binoCoef(5, 10) Esta função tanbém está implementada no exemplo Bootstrap – Uma Abordagem Não-Paramétrica. (Esta função é similar à função COMBIN() fornecida pelo Excel.) Retorne ao Topo da Página Distribuição Normal Padrão Acumulada Esta função calcula a area sob a curva e do lado esquerdo de um valor especificado (o valor z) de uma curva da função densidade da distribuição normal padrão. Num português claro, ela retorna a probabilidade de X que é menor que um valor específico. Se você não sabe com o quê uma curva normal se parece ou já se esqueceu dela, aqui está uma amostra: Neste exemplo, a probabilidade de X menor que 1.64 (z) é 94.9497%. Function u_NormalP(z) c1 = 2.506628 c2 = 0.3193815 c3 = -0.3565638 c4 = 1.7814779 c5 = -1.821256 c6 = 1.3302744 If z > 0 Or z = 0 Then w=1 Else: w = -1 End If y = 1 / (1 + 0.2316419 * w * z) u_NormalP = 0.5 + w * (0.5 - (Exp(-z * z / 2) / c1) * _ (y * (c2 + y * (c3 + y * (c4 + y * (c5 + y * c6)))))) End Function u_NormalP (1.64) = 0.949497 Esta função também é implementada no exemplo Modelo de Precificação de Opções de Black-Scholes - European Call and Put. (Esta função é similar à função NORMSDIST() fornecida pelo Excel.) Retorne ao Topo da Página