Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

Excel: Criação de Fórmulas Personalizadas

O Microsoft Excel tem inúmeras fórmulas para diversos utilizações, muitas delas que nem sabemos da sua existência nem sabemos para que serve. Tem fórmulas para quase tudo! Mas no entanto existem operações que por serem muito específicas ou simplesmente para simplificar (de modo a não utilizar muitas fórmulas em conjunto) dava jeito serem personalizadas, ou seja, à nossa medida.

A verdade é que não é prático utilizar algo do género:

{=IF(FORMULA(<criteria>)=0;IF(MATCH(<range>;<criteria>); ....

A fórmula além de complicada de construir é também complicada de interpretar e alterar. Nestes casos o ideal é criarmos a nossa própria fórmula permitindo, além de simplificar, executar mais funcionalidades para além das já existentes e disponíveis.

Para demonstrar a criação de uma fórmula personalizada, será mostrado um exemplo de como recolher a primeira e ultima palavra de um nome completo, construindo um nome abreviado.

Nota: Esta funcionalidade poderá também ser construída através de fórmulas, mas o objectivo é mostrar a melhoria que estas fórmulas predefinidas podem trazer às folhas de cálculo.

Para adicionarmos esta função a uma folha de Excel devemos fazer o seguinte:

1 – Menu Tools – Macros – Visual Basic Editor ou ALT+F11

2 – Adicionar um novo módulo clicando com o botão direito ou através do menu Insert (Figura 1)

 
                                  (Figura 1)

3 – Colocar a seguinte código no módulo criado:

    ' ---------------------------------------------------------------------------
    ' Separa uma frase e retorna o primeiro e último nome
    ' ---------------------------------------------------------------------------

    Public Function FirstLast(ByVal str As String) As String
        Dim result() As String
        Dim total As Integer

        ' Separa para um array o valor da célula de acordo com o   
        ' separador " "
ou seja espaço

        ' Por exemplo na frase "isto é um teste" o resultado ficará desta forma:
       
        ' result(0) = isto
        ' result(1) = é
        ' result(2) = um
        ' result(3) = teste
       
        result = Split(str, " ")

        ' Verifica qual o tamanho do array (o array começa em zero)
        total = UBound(result)

        ' Caso seja zero
        If total = 0 Then

            If str = "" Then

                ' Caso esteja em branco não retorna nada
                FirstLast = ""

            Else

                ' Caso exista texto retorna esse texto
                FirstLast = StrConv(str, vbProperCase)

            End If

        Else

            ' Retorna o primeiro nome e o último, com um espaço no 
            ‘  meio utiliza ainda a função StrConv()
que converte
            ‘  o
texto (neste caso) para um formato the Proper Case
            FirstLast = StrConv(result(0), vbProperCase) & Space(1) & _
                        StrConv(result(total), vbProperCase)

        End If

    End Function

         

4 – Fechar o Editor de VBA e na folha de cálculo utilizar a função criada

O exemplo deste pequeno artigo é mostrar que as fórmulas personalizadas, utilizando VBA, permitem melhorar e potenciar as folhas de cálculo. É mostrado um exemplo simples que pretende explicar o funcionamento geral mas também mostrar algumas instruções de código (como o caso de arrays, StrConv, Split, etc).

         

PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!

7 comentários:

nokPT disse...

Bom dia,

Simplesmente excelente! Levei o Excel a um patamar novo.

Estávamos a usar uma tabela medonha para fazer alguns cálculos manuais de secções de cabos eléctricos, demorávamos cerca de 6 minutos por cabo.

Com este exemplo, criamos uma formula com cerca de 20 variáveis de entrada, e conseguimos calcular cerca de 500 cabos em alguns segundos.

Mas queremos mais (não sei se é possível e/ou se estou a abusar). Necessitamos que as fórmula devolva o tipo de cabo (está a fazer) e que nas células contiguas devolva valores intermédios de cálculo.

Resumidamente (e para explicar melhor) para calcularmos uma secção de cabo temos que fornecer (entre outros) distâncias, consumos, tensões, fases, etc... com estes valores queríamos que a formula nos devolve-se na coluna X o tipo de cabo, na X+1, a queda de tensão, na X+2 a corrente de curto-circuito, etc...

É possível?

Atentamente

jpaulino disse...

Olá,

Ainda bem que o exemplo ajudou!

Uma função retorna um valor para uma célula e não dois ou mais. No entanto existem outros métodos que podem também resolver. Arranja-se sempre uma solução. :)

Mas preciso de um exemplo para ver exactamente o que é. Podes enviar para vbtuga(at)gmail.com ou, de preferência, colocares uma questão em http://www.portugal-a-programar.org/, na secção de Visual Basic, onde sou moderador.

Cumprimentos,
Jorge Paulino

Anónimo disse...

Boa tarde, preciso de ajuda, como posso passar uma lista de datas (20040907) para uma data (07/09/2004)?

Obrigado

Wandert Magalhães disse...

E se tiver mais de 4 palavras??

Jorge Paulino disse...

Também funciona com 4 palavras

Anónimo disse...

Gostaria que me ajudasse nessa questão. Tenho o nome separado por um caracter "/", porem quero o primeiro nome após o caracter e antes do caracter, é possivel?

Anónimo disse...

exemplo: Maria joao/jose teixeira
e queria que ficasse dessa forma:
jose joao

Mensagens Recentes



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico