Baixe o app para aproveitar ainda mais
Prévia do material em texto
Unidade 3 - Operadores, funções matemáticas e modularização OBJETIVOS DA UNIDADE • Compreender o conceito de operadores, tanto aritméticos quanto lógicos; • Conhecer as funções matemáticas de VBA; • Compreender o conceito de modularização. TÓPICOS DE ESTUDO Operadores lógicos e aritméticos // Operadores aritméticos // Operadores de comparação // Operadores lógicos Funções matemáticas Modularização // Criando suas próprias funções // Criando sua própria função e a invocando em uma célula do Excel // Modificadores de acessos público e privado Operadores lógicos e aritméticos Variáveis são usadas em quase todos os programas de computador, e o VBA (Visual Basic for Application) funciona da mesma maneira. A boa prática sugere que uma variável seja declarada no início do procedimento; isto não é obrigatório, mas ajuda na identificação da natureza do conteúdo (texto, dados, números, etc.), no entanto, uma variável armazena apenas valores. Uma das coisas mais interessantes e empolgantes de um VBA, ou de qualquer outra linguagem de programação, é a possibilidade de relacionar e correlacionar essas variáveis, realizando operações aritméticas e comparações lógicas. OPERADORES ARITMÉTICOS Em muitos momentos, será necessário realizar alguma operação aritmética, desde as mais simples, como a soma de algum valor, até a resolução de equações complexas. Para todos esses casos utilizaremos os operadores aritméticos, que são nativos da linguagem. Os operadores aritméticos do VBA são usados para executar operações aritméticas, tais como soma, subtração, divisão e multiplicação de números. A Tabela 1 mostra os operadores aritméticos disponíveis no VBA. Tabela 1. Operadores aritméticos. A Figura 1 apresenta um código que realiza cálculos de soma, subtração e multiplicação de números inteiros. Observe que, na linha 3, foram declaradas as variáveis que utilizamos em nosso código-fonte, e todas elas são do tipo inteiro. Caso fôssemos utilizar números reais, colocaríamos o tipo Double, por exemplo, e o resultado não se alteraria. Figura 1. Exemplo do uso de operadores aritméticos em VBA. Após atribuirmos valores para as variáveis num1 e num2, começamos a fazer as operações a partir da linha 8. No caso da adição, o valor presente em num1 é somado ao valor presente em num2 e o resultado é armazenado na variável soma. Em seguida, na linha 9, é apresentada uma MsgBox que expõe o resultado da soma. Lembrando que & (e comercial) junta o texto “O resultado da soma é:” com o conteúdo da variável soma que, nesse caso, é 13. A subtração e a multiplicação seguem a mesma lógica descrita anteriormente. Portanto, com o resultado da adição, teremos uma variável soma; com o resultado da subtração, uma variável chamada subtração; com o resultado da multiplicação, uma variável chamada multiplicação. Tais valores podem ser aproveitados a qualquer momento no seu código, pois ficam armazenados em variáveis separadas. Mas, supondo que o nosso objetivo seja apenas de apresentar os valores das operações (como é o caso da Figura 1), então poderíamos ter uma única variável chamada total, que receberia o valor da operação e mostraria, através do MsgBox, o resultado. Nesse caso, não guardaríamos os valores para futura utilização, conforme exemplifica a Figura 2. Figura 2. Utilização de apenas uma variável que recebe o total das operações. No código da Figura 2, o total obtido na linha 8 será apresentado na linha 9. Porém, na linha 11, o total (que era 13) será sobrescrito pelo valor da subtração, no caso, 7. O mesmo ocorre na linha 14, mas, nesse código, o objetivo não é armazenar o valor das operações para futuro uso, então isso não altera nada. O uso do operador aritmético de adição com números é trivial e fácil de entender. Entretanto, o que aconteceria com o código da Figura 3, que soma duas strings (palavras/frases)? Figura 3. Adição de Strings. A Figura 3 apresenta três variáveis do tipo string, são elas: valorX, valorY e resultado. As variáveis valorX e valorY recebem conteúdo do tipo texto e, em seguida, a variável resultado recebe a soma das Strings. Por fim, na linha 11, o resultado dessa soma é apresentado na tela. Quando realizamos a soma ou a adição de strings, o resultado final é a concatenação das duas strings. Na linha 11 da Figura 3 será apresentado: “Programação de Computadores”. ASSISTA Em relação à manipulação de string, realizar a adição é um processo válido. Entretanto, não se pode dizer o mesmo da subtração ou do uso dos demais operadores aritméticos. Caso você tente subtrair ou multiplicar duas cadeias de caracteres, será apresentada uma mensagem de erro. Para outras informações, assista ao vídeo Strings: conceito e utilização - Linguagem C. Até aqui, falamos dos operadores de adição, subtração e multiplicação. Agora, veremos o operador de divisão. Na Figura 4, utilizamos 4 tipos de operações diferentes: • Inteiro dividido por inteiro (linha 12); • Inteiro dividido por real (linha 13); • Real dividido por inteiro (linha 14); • Inteiro dividido por real (linha 15). Figura 4. Utilização do operador aritmético de divisão. Faça o teste e execute o código da Figura 4. Você verá que, nesse código, a saída das linhas de 12 a 15 serão números reais, tanto se houver divisão de inteiro por inteiro quanto de inteiro por real. Porém, se definirmos uma variável chamada total do tipo Integer, o resultado mudará. Faça o teste com o código da Figura 5. Figura 5. Operador aritmético de divisão. Na Figura 5, as saídas apresentadas entre as linhas 19 e 22 sempre serão do tipo inteiro. Isso ocorre devido à variável resultado ter sido declarada como inteira. Assim, é preciso pegar a parte inteira da divisão, independente de estarmos dividindo real por real, real por inteiro ou inteiro por real. Acima, foram analisadas as principais propriedades do operador aritmético de divisão. A seguir, veremos o operador aritmético de exponenciação, que possui um uso elementar. Se desejarmos realizar a operação 3² (três elevado ao quadrado), por exemplo, faremos assim: 3 ^ 2. Veja o código da Figura 6 e realize o teste em seu computador. Figura 6. Aplicação de exponenciação em VBA. A saída do código da Figura 6, na linha 9, será 3 elevado ao quadrado, ou seja, 9. Na exponenciação, o tipo de variável (inteiro ou real) não influenciará como no caso da divisão. A Figura 7 apresenta o operador de módulo, responsável por retornar o resto de uma divisão. Figura 7. Uso do operador aritmético de módulo. No exemplo da Figura 7, exploramos todos os tipos de divisões. Note que, em todos os casos, a saída é a mesma. A Tabela 2 apresenta os tipos e as saídas de operadores aritméticos. Tabela 2. Relação dos operadores aritméticos e as saídas obtidas (a variável R é do tipo inteiro). Note os possíveis tipos de saídas nos diversos relacionamentos entre os tipos de variáveis de entrada. Quando várias operações ocorrem em uma expressão, cada operação é realizada de modo independente e, posteriormente, o resultado é apresentado. Assim, uma operação como 8 · 4 + 2 será diferente de 8 · (4 + 2). O quadro 3 apresenta a ordem de precedência dos operadores. Quadro 3. Precedência de operadores. Considere, então, o código a seguir, responsável por calcular a média entre três valores. Na média, temos a soma dos valores e a divisão do resultado por três. A Figura 8 exemplifica o cálculo da média. Figura 8. Cálculo de média. Se você criar o código apresentado na Figura 8 em seu editor VBA e executá-lo, terá o resultado da média. Perceba que os valores de entrada são 5, 8 e 2. Ao somá-los e dividi-los por 3, obtemos o número 5 como resultado. No entanto, ao executar o código, aparecerá que a média calculada está incorreta.Porém, na realidade, está correta. O que pedimos para o computador fazer foi: dividir num3 por 3 e somar com num1 e num2. Lembre-se que, pelo quadro 3, a divisão é feita antes da soma. Nesse caso, como resolver? É simples. Vamos adicionar parênteses circundando a operação que desejamos que seja executada primeiro (Figura 9). Note que, sempre que desejamos realizar um cálculo antes do outro, nós o colocamos entre parênteses. Figura 9. Cálculo da média. Observe que, com o uso dos parênteses, primeiramente foi feita a soma dos três valores e, em seguida, o resultado foi dividido por 3, resultando no valor 5. Agora está efetivamente correto. A melhor forma de aprender é praticando. Sendo assim, teste todos os códigos apresentados aqui e explore as mais diversas formas de relacionamento. Pense, por exemplo, em um problema que envolva pelo menos duas operações aritméticas, como no caso do cálculo da média. OPERADORES DE COMPARAÇÃO Se os operadores aritméticos manipulam os valores das variáveis, alterando-as, os operadores de comparação relacionam uma variável com outra. Em VBA, existem seis diferentes tipos de operadores de comparação, expostos na Tabela 3. Considere que, nesta tabela, A corresponde a 10, e B corresponde a 20. Tabela 3. Operadores de comparação. O resultado obtido em toda a operação de comparação será do tipo booleano, ou seja, retornará true ou false. Veja o exemplo de um código que compara os valores de A e B e, em seguida, mostra o resultado na tela (Figura 10). Figura 10. Código de exemplo de uso de comparação. Neste código, é realizada a comparação na linha 8 e, em seguida, o resultado é armazenado na variável teste. Posteriormente, o resultado é apresentado na linha 10, em uma MsgBox. Podemos correlacionar os operadores de comparação com os operadores aritméticos, conforme mostra o exemplo a seguir: Exemplo: É sabido que, para ser par, um número precisa ser divisível por dois. Para verificarmos se um número é divisível por 2, temos que utilizar o módulo e, se o resto da divisão for igual a zero, então o número é divisível por 2. Logo, se é divisível por dois, também é par. Então, no código apresentado na Figura 11, nós criamos um algoritmo que verifica se o número é par, retornando um valor verdadeiro quando for, e falso quando não for. Figura 11. Código para verificar se um número é par. O código da Figura 11 é bem diferente daquilo que vimos até aqui. Na linha 5, a variável valor recebe o número 8, que verificaremos se é par ou não. Na linha 7, temos os seguintes detalhes a serem observados: O primeiro sinal de igual que aparece não está realizando comparação. Na realidade, é um sinal de atribuição de valores, ou seja, o resultado da operação realizada à direita será armazenado na variável teste; O segundo sinal de igual é de comparação entre valores, isto é, compara o elemento da esquerda com o da direita. No código da Figura 11, é verificado se o conteúdo de valorX possui módulo (resto de divisão) igual a 2. Caso positivo, o verdadeiro retorna, indicando que o número é par. Nesse caso, o resultado da Comparação é verdadeiro. Quando temos uma comparação, independentemente do tipo, chamamos de expressão. A seguir, apresentamos alguns exemplos de expressões: • A > B • A < B • A >= B • A <> B Essas operações são expressões comparativas, que podem ser utilizadas em diversos momentos, em um código fonte. OPERADORES LÓGICOS Os operadores lógicos, diferentemente dos operadores de comparação e de operações aritméticas, não manipulam as variáveis e seus valores, mas as expressões de comparação. No código da Figura 11, verificamos se o número 8 é par. Agora, considere que quiséssemos verificar se o número 8 é par e maior do que 2. Também poderíamos verificar se o número 8 é par ou maior do que 2. Para correlacionar expressões (número par e maior do que 2; número par ou maior do que 2), utilizaremos os conectivos lógicos. Existem 4 operadores ou conectivos lógicos; veja, a seguir, uma análise sobre cada um deles (considere que a variável A corresponde a 0, e a B corresponde a 20). Tabela 4. Operadores lógicos Podemos representar cada um dos operadores lógicos em tabela verdade. Vejamos, então, a tabela verdade para cada um dos operadores lógicos e uma breve descrição. Considere que a variável A possui o valor 30 e a variável B possui o valor 20. // Operador Lógico AND (E) Vamos supor que temos duas comparações P e Q, e também uma saída S qualquer. Vamos supor, também, que as comparações P e Q estão conectadas por um operador lógico AND. A tabela verdade para essa relação pode ser observada na Tabela 5. Tabela 5. Tabela verdade para o operador lógico AND. Veja que, pela Tabela 5, a única possibilidade de a relação lógica AND ser verdadeira é quando a comparação em P e em Q são verdadeiras. Veja os exemplos a seguir: A > B AND B = 5 A variável A realmente é maior do que B (verdadeiro), porém, a variável B não é igual a 5 (falso). Verdadeiro e falso, segundo a tabela verdade, nos retorna falso. Portanto, essa relação terá resultado falso; A <> B AND A > B A variável A é diferente da variável B (verdadeiro), e a variável A é maior que a variável B (verdadeiro). Como temos verdadeiro e verdadeiro, então, essa relação terá resultado verdadeiro. Desse modo, a única possibilidade de se ter verdadeiro, em uma relação que utiliza o operador lógico AND, é quando todas as comparações são verdadeiras. // Operador Lógico OR (OU) Vamos supor que temos duas comparações P e Q, e também uma saída S qualquer. Vamos supor, também, que as comparações P e Q estão conectadas por um operador lógico OR. A tabela verdade para essa relação pode ser observada na Tabela 6. Tabela 6. Tabela verdade para o operador lógico OR. Veja que, pela Tabela 6, a única possibilidade de a relação lógica OR ser falsa é quando a comparação em P e em Q são falsas. Veja os seguintes exemplos: A > B OR B = 5 A variável A é realmente maior do que B (verdadeiro), porém, a variável B não é igual a 5 (falso). Verdadeiro e falso, segundo a tabela verdade, nos retorna verdadeiro. Portanto, essa relação terá resultado verdadeiro; A = B OR A = 50 A variável A não é igual a variável B (falso), a variável A não é igual a 50 (falso). Como temos falso e falso, então, trata-se de uma relação com resultado falso. Desse modo, a única possibilidade de se ter falso, em uma relação que utiliza o operador lógico OR, é quando todas as comparações são falsas. // Operador Lógico XOR (OU exclusivo) Vamos supor que temos duas comparações, P e Q, e também uma saída S qualquer. Vamos supor, também, que as comparações P e Q estão conectadas por um operador lógico XOR. A tabela verdade para essa relação pode ser observada na Tabela 7. Tabela 8. Tabela verdade para o operador lógico XOR Veja que, pela Tabela 7, somente serão verdadeiras as relações entre as comparações quando a comparação P e a comparação Q derem saídas opostas, ou seja, quando P for verdadeiro e Q for falso, ou vice-versa. Veja os exemplos a seguir: A > B XOR B = 5 A variável A é realmente maior do que B (verdadeiro), porém, a variável B não é igual a 5 (falso). Verdadeiro e falso, segundo a tabela verdade, nos retorna verdadeiro. Portanto, essa relação terá resultado verdadeiro; A = 30 XOR B = 20 A variável A é igual a B (verdadeiro), a variável B é igual a B (verdadeiro). Como temos verdadeiro e verdadeiro, então, essa relação terá resultado falso. Note que, se fosse a tabela verdade OR, essa relação resultaria verdadeiro. Porém, como é OR exclusivo, então a saída é falsa. Desse modo, a única possibilidade de se ter falso, em uma relação que utiliza o operador lógicoXOR, é quando todas as comparações são verdadeiras ou todas são falsas. CURIOSIDADE O operador lógico XOR, como o próprio nome já o define, trata-se de um OU (OR) Exclusivo. Compare a tabela verdade tanto do OR quanto de XOR e você verá que, na tabela verdade do XOR, a relação entre as expressões só será considerada verdadeira se, e somente se, ocorrer um OR. Porém, só ocorre OR quando dois valores são diferentes e, por isso, chamamos de OU Exclusivo ou XOR. // Operador Lógico NOT (Negação) Esse operador inverte a saída lógica de uma comparação. Por exemplo, se A > B for verdadeiro, ao fazermos NOT (A > B), o resultado será falso. Veja a tabela verdade na Tabela 8. Tabela 9. Operador lógico NOT Desse modo, o operador lógico NOT é responsável por inverter a saída da relação lógica entre duas expressões. O código da Figura 12 apresenta a utilização dos operadores lógicos. Analise o código e o implemente para testar. Figura 12. Utilização dos operadores lógicos. Na Figura 12, utilizamos os operadores lógicos. Note que todas as comparações ficaram entre parênteses; isto é recomendado para que se mantenha o código organizado e de fácil interpretação, tanto para quem o desenvolve quanto para quem o lê. Conforme dito anteriormente, é muito importante que você pratique. Por isso, sugerimos que você implemente os códigos, mudando os valores dos operadores lógicos e dos operadores de comparação. Testando seu conhecimento. VAMOS REFORÇAR O QUE APRENDEMOS ATÉ AGORA? Qual das alternativas a seguir apresenta, respectivamente, um operador lógico e um operador aritmético em VBA? Resposta = Exponenciação e XOR. Funções matemáticas O VBA nos permite utilizar funções pré-programadas, que possibilitam o cálculo de operações complexas de aritméticas e de matemática. A seguir, serão apresentadas as principais funções matemáticas de VBA. VBA Abs A função VBA Abs retorna um valor absoluto de um número. • Sintaxe: Abs(número); • Parâmetro: Um número cujo valor absoluto será calculado; • Retorno: Retorna um valor numérico; • Exemplo em VBA: Número = Abs(-320). VBA Atn A função VBA Atn retorna o arco tangente de um número em radianos, não em graus. • Sintaxe: Atn(número); • Parâmetro: Um número que será usado para calcular o arco tangente; Retorno: Retorna um valor numérico em radianos; • Exemplo em VBA: Número = Atn(210). VBA Cos A função VBA Cos retorna o valor do cosseno de um ângulo em radianos. • Sintaxe: Cos(número); • Parâmetro: Um número que será usado para calcular o cosseno; • Retorno: Retorna um valor numérico em radianos; • Exemplo em VBA: Número = Cos(210). VBA Exp A função VBA Exp retorna um valor exponencial para um número especificado. • Sintaxe: Exp(número); • Parâmetro: Um número que será usado para calcular o exponencial; • Retorno: Retorna um valor numérico; • Exemplo em VBA: Número = Exp(3) ⇒ saída 20.08553692. VBA Fix A função VBA Fix retorna a parte inteira de um número. • Sintaxe: Fix(expressão_numérica); • Parâmetro: Um número ou expressão numérica; • Retorno: Retorna um valor numérico; • Exemplo em VBA: Número = Fix(210.68) ⇒ saída 210. VBA FormatNumber A função VBA FormatNumber converte a expressão especificada como número formatado. • Sintaxe: FormatNumber(expressão_numérica, [formato]); • O formato é opcional, e você pode definir seu próprio formato ou escolher um dos predefinidos pelo Excel, como moeda, porcento, científico, entre outros. • Parâmetro: Um número ou expressão numérica e um formato (opcional); • Retorno: Retorna um valor numérico; • Exemplo em VBA: Número = FormatNumber(0.98, “Percent”) ⇒ saída 98%. VBA Int A função VBA Int retorna a parte inteira de um número, arredondando- o para baixo quando necessário. • Sintaxe: Int(expressão_numérica); • Parâmetro: Um número ou expressão numérica; • Retorno: Retorna um valor inteiro; • Exemplo em VBA: Número = Int(255.38,”Percent”) ⇒ saída 255. VBA Log A função VBA Log retorna o logaritmo natural de um número. • Sintaxe: Log(número); • Parâmetro: Um número do qual será obtido o seu log; • Retorno: Retorna um valor numérico; • Exemplo em VBA: Número = Log(20) ⇒ saída 2.995732274. VBA Randomize A função VBA Randomize altera o valor de semente, usado pelo gerador de números aleatórios da função RND. • Sintaxe: Randomize ([semente]); • Parâmetro: Semente numérica que será usada pela função RND. Trata-se de um valor opcional e, caso não seja usado, o Excel utilizará o timer do sistema como valor padrão; • Retorno: Não há retorno de valor, há início da função RND; • Exemplo em VBA: Será visto na próxima função (RND). VBA Rnd A função VBA Rnd retorna um número aleatório entre 0 e 1. • Sintaxe: Rnd([número]); • Parâmetro: Especifica qual número aleatório deve ser retornado, valor opcional; • Retorno: Retorna um número aleatório maior ou igual a 0 e menor que 1. Intervalo aleatório: Vamos supor que você deseja gerar um número aleatório entre dois valores (intervalo), para isso, você precisa utilizar a seguinte fórmula: Int ((maior_valor – menor_valor + 1) * Rnd + lowerbound) Supondo, então, que desejamos o número aleatório entre 10 e 20, teremos: Int ((20 – 10 + 1) * Rnd + 10). • Exemplo em VBA: Randomize número = Int ((30 - 20 + 1) * Rnd + 200) è retornará um número aleatório entre 20 e 30. VBA Round A função VBA Round arredonda um número para uma quantidade especifica de dígitos decimais. • Sintaxe: Round(expressão_numérica, [casas_decimais]); • Parâmetro: Expressão numérica que precisa ser arredondada. O parâmetro [casas_decimais] é opcional. Caso não seja informado, a função retornará um número inteiro; • Retorno: Retorna um valor numérico; • Exemplo em VBA: Número = Round(210.67, 1) ⇒ saída 210.6. VBA Sin A função VBA Sin retorna o valor senoidal de um ângulo em radianos. • Sintaxe: Sin(número); • Parâmetro: Valor numérico para calcular o seno de um ângulo; • Retorno: Retorna um valor numérico; • Exemplo em VBA: Número = Sin(2) ⇒ saída 0.909297427. VBA Sqr A função VBA Sqr retorna a raiz quadrada de um número. • Sintaxe: Sqr(número); • Parâmetro: Valor numérico positivo para calcular a raiz quadrada de um número; • Retorno: Retorna um valor numérico; • Exemplo em VBA: Número = Sqr(900) ⇒ saída 30. VBA Tan A função VBA Tan retorna o valor tangente de um ângulo. • Sintaxe: Tan(número); • Parâmetro: Valor numérico para calcular a tangente de um ângulo; • Retorno: Retorna um valor numérico; • Exemplo em VBA: Número = Tan(2) ⇒ saída -2.185039863. Todas as funções matemáticas apresentadas (bem como outras menos utilizadas e que não foram citadas) podem ser utilizadas em conjuntos, acompanhadas dos operadores lógicos e aritméticos vistos anteriormente. CURIOSIDADE No decorrer da unidade, selecionamos as principais funções matemáticas, utilizadas com mais frequência. Entretanto, a lista de funções é um pouco maior. Para conhecer cada uma das funções e também se aprofundar em suas especificidades, acesse o site oficial da Microsoft, presente nas referências bibliográficas. Vamos criar, por exemplo, um programa em VBA que, dados os valores de a, b e c, calcule as raízes de uma equação de segundo grau. Lembre-se de que equações de segundo grau são resolvidas aplicando-se a fórmula de Bháskara: Sabendo que delta é igual a b² - 4 · a · c, vamos criar um programa para encontrar as raízes da equação de segundo grau x² + 4x – 5. Primeiramente, calcularemos o delta e, na sequência, encontraremos os valores de x. O código da Figura 13 nos apresenta a solução. Figura 13. Cálculos de uma equação de segundo grau. No código da Figura 13, na linha 6, utilizamos o operador ^ para elevar ao quadrado o valor do número 4 (b²). Além disso, utilizamos a funçãomatemática Sqr (nas linhas 8 e 10) para encontrarmos a raiz quadrada de delta. Analise o código com atenção e veja que, para garantir as precedências dos cálculos, utilizamos parênteses para separar as operações. Agora, desejamos analisar se o valor de x1 e x2 são positivos. Como devemos proceder? Simples, vamos pegar o valor dessas variáveis e verificar se são maiores que zero. Veja o código na Figura 14. Figura 14. Complemento do código da equação de segundo grau. Observe, com a ajuda do código da Figura 14, algumas alterações. Criamos uma variável chamada maior_que_zero na linha 14, a qual recebe o resultado da comparação x1 > 0. Caso seja verdadeiro, a variável maior_que_zero receberá o valor “verdadeiro”, caso contrário, receberá “falso”. Em seguida, na linha 15, nós expomos uma frase que indica se é verdadeiro ou não que X1 é maior que zero. O mesmo acontece nas linhas 17 e 18, porém, para X2. Novamente, realize testes sobre os códigos descritos, troque valores, explore ao máximo. A única forma de se tornar fluente em programação é treinando. VAMOS REFORÇAR O QUE APRENDEMOS ATÉ AGORA? Relacione as técnicas de gerenciamento de memória disponíveis a seguir a suas definições: Randomize = Altera o valor de semente usado pelo gerador de números aleatórios. Fix = Retorna a parte inteira de um número. Round = Arredonda um número para uma quantidade específica de dígitos decimais. Modularização O código VBA é digitado e exibido no Editor do VBA, denominado módulo. Uma coleção de módulos é o que chamamos de projeto. Quando visualizado, um módulo VBA aparecerá em sua própria janela no Editor VBA. Pense nos módulos como pastas organizacionais para o seu código; adicione módulos VBA a um projeto, conforme necessário, para organizar e executar o código. Os módulos são compostos de blocos de construção elementares, os chamados procedimentos. Estes, por sua vez, são utilizados para organizar e executar seu código em um módulo. Ao digitar comandos, variáveis, matrizes, loops, lógicas, funções do Excel, entre outros, nos procedimentos do módulo VBA, você executa o procedimento de controle do Microsoft Excel e várias outras tarefas. A modularização pode ser entendida como uma prática de dividir o seu código em partes menores e funcionais de modo que elas se relacionem entre si, a fim de realizar uma ação específica. Vamos analisar o código da Figura 14. As instruções são executadas linha por linha, de modo sequencial; é o que chamamos de paradigma imperativo. Suponhamos que, após a linha 18, surja a necessidade de calcularmos a equação de segundo grau x² + 6x - 3. Nesse caso, temos que reescrever todo o trecho das linhas 2 a 18. E se tivermos de repetir esse cálculo por mais dez ou vinte vezes? Vamos chamar, novamente, as linhas que vão de 2 até a 18 todas essas vezes? A resposta é não, e, pensando nisso, temos o conceito de modularização, com o qual se criam funções que desempenham ações específicas: há uma função capaz de calcular o delta; outra capaz de calcular os valores de X1 e X2; outra capaz de mostrar os valores na tela. Veremos este código após a análise do conceito de funções. CRIANDO SUAS PRÓPRIAS FUNÇÕES Anteriormente, listamos as principais e mais utilizadas funções matemáticas do VBA. Além delas, você também pode criar suas próprias funções. Uma função é um conjunto de códigos agrupados em um único escopo, com o objetivo de realizar uma ação específica. As funções são usadas, principalmente, para executar tarefas repetitivas, como formatar dados para saída, executar cálculos etc. Vamos supor que você está desenvolvendo um programa que realiza o cálculo da área de um ambiente, por exemplo. Como parâmetro, você pode criar uma função que aceita os valores de medidas, tal função realizará o cálculo e retornará o valor da área. Os nomes das funções seguem as mesmas regras para nomear sub- rotinas (Sub) e para nomear variáveis. Veja um exemplo de função na Figura 15: Figura 15. Exemplo de função. Na Figura 15, temos uma função chamada calculo_soma. Ela recebe dois parâmetros: um chamado argumentosA, e outro, argumentosB, ambos pertencentes ao tipo inteiro. Note que poderíamos ter mais de um parâmetro, de diferentes tipos. Essa função realizará, por parâmetro, a soma dos valores recebidos e a armazenará na variável de mesmo nome, calculo_soma. É importante notar que os valores podem ser retornados com o próprio nome da função. Além disso, a função pode ser chamada dentro de outra ou dentro de uma Sub. Para fins de teste, vamos criar uma sub-rotina e invocar tal função. Veja a Figura 16. Figura 16. Declaração, desenvolvimento e uso da função calculo_soma. Essa imagem foi capturada diretamente do editor VBA. Note que, ao criarmos uma função abaixo da sub-rotina, foi criada uma linha que a separa, a fim de que o código fique organizado. Observe que o código interno da função é executado somente quando chamado em calculo_soma(2, 3). O valor do cálculo é devolvido para a variável total e apresentado na tela. Toda função será definida como Function e terá seu escopo (espaço do código) encerrado com End Function. Veja mais um exemplo de função, responsável por calcular a área da circunferência (a área é igual a PI x raio²). O código desta função e de sua chamada na sub-rotina se encontra na Figura 17. Figura 17. Função para calcular área Nessa função, recebemos como parâmetro uma variável que se chama raio, pertencente ao tipo Double. Realizamos, então, o cálculo da área na linha 10, multiplicando o valor de PI pelo valor de raio vezes raio. O código da Figura 17 pode ser melhorado. Note que, para elevar o valor da variável raio ao quadrado, multiplicamos raio por raio. Entretanto, imagina: se estivéssemos elevando o raio a 100, teríamos de multiplicar raio vezes raio, cem vezes? Isso não seria prático, portanto, podemos melhorar a linha 10, utilizando o operador aritmético de exponenciação ^. Outra mudança que podemos fazer é na declaração da variável PI. O valor de PI é fixo, independente do qual seja o programa, PI sempre valerá 3.1415. Trata-se, portanto, de uma constante, então, vamos declarar PI como constante. A Figura 18 apresenta as mudanças realizadas no código. Figura 18. Cálculo da área da circunferência. Agora, o cálculo da função ficou mais funcional e elegante. Apesar de não ser o caso, se precisássemos elevar o raio a 100, trocaríamos, então, o 2 da linha 11 por 100, sendo mais simples do que multiplicar raio vezes raio cem vezes. Note, também, que criamos uma constante chamada PI. Por ser constante, o valor desta não poderá ser alterado durante a execução do código. Devemos pensar em nosso programa de forma modular, como se fossem blocos de um quebra cabeça, que devem ser unidos de alguma forma, a fim de resolver um problema. Por exemplo, imagine uma colmeia. Cada abelha possui uma função específica: a rainha tem a função de produzir os ovos e de manter a ordem “social” na colmeia; as operárias realizam o trabalho duro, que inclui juntar ao parágrafo anterior limpar colmeia, proteger as outras abelhas, sobretudo a rainha; irmãs e mãe; o macho, o zangão, possui a função de fecundar a rainha. Considerando que essa organização garante a manutenção da colmeia, o mesmo se pode dizer sobre a modularização: cada função realiza uma determinada e específica ação. Desse modo, as funções, assim como abelhas, se juntam para um bem específico: resolver um determinado problema. Voltemos ao código da Figura 14, que trata do cálculo da equação de segundo grau. Vamos melhorá-la, adicionando, e propondo, assim, o conceito de modularização. Primeiramente, vamos transformar a linha 6, referente ao cálculo de delta, em uma função chamada calc_delta, passando comoparâmetro os valores de a, b e c. A Figura 19 apresenta um exemplo da função calc_delta. Figura 19. Função para calcular o delta. Essa função receberá três valores por parâmetros e realizará o cálculo de delta. Agora, precisamos criar uma função que receba tanto o valor calculado de delta quanto os valores de a e b, para calcular os valores de x1 e x2. Vejamos a função calc_x1 e calc_x2, a seguir, na Figura 20. Figura 20. Funções para calcular x1 e x2. As funções calc_x1 e calc_x2 foram criadas separadamente para fins didáticos. Você poderá criar de uma outra forma, lembrando que o conteúdo da função é definido por você, desde que respeite a lógica, que é calcular o valor para x. Ambas as funções recebem os valores de delta, a e b, para realizarem o cálculo e, posteriormente, realizarem o retorno. Observe que elas utilizam a função matemática pronta Sqr para calcular a raiz quadrada de delta. Agora, nos falta a função responsável por mostrar os resultados de delta, x1 e x2 na tela. Deste modo, criaremos a função chamada mostrar_resultados, que recebe, por parâmetro, os valores de delta, x1 e x2. Veja o código da função na Figura 21. Figura 21. Função responsável por mostrar os resultados na tela. Essa função recebe os valores por parâmetro e os apresenta na tela para o usuário. Por fim, precisamos invocar tais funções em nosso código principal, na sub-rotina. Veja como é simples: basta chamarmos as funções na ordem correta e, em seguida, passarmos os valores por parâmetro. A Figura 22 apresenta o código principal. Figura 22. Sub-rotina invocando as funções para o cálculo da equação de segundo grau. Se você comparar o código da Figura 22 e o código da Figura 14, verá que a sequência de ações é a mesma. A diferença, agora, é que o nosso código se ramificou; na Figura 22, ao chegar na linha 6, é invocada a função para calcular o delta, então, são enviados três valores (são três valores, pois a função foi definida anteriormente assim). Aqui, é como se o código saísse dessa sequência e fosse para um outro local da memória, para realizar a operação de cálculo e, assim que terminar, voltar a executar a linha 6. Assim que termina, a função calc_delta retorna o valor encontrado e armazena na variável delta. O código prossegue em execução. Na linha 8, há um novo desvio. O código que estava “descendo” na execução de comando, após comando, encontra a função calc_x1. Para ela, são enviados três valores, conforme já havia sido definido anteriormente. Essa função calcula o valor para x1 e, em seguida, devolve para armazenarmos na variável de mesmo nome x1. O código volta a executar na sub-rotina e, agora, a linha 10 será a próxima a ser processada. São repetidos os comandos da linha anterior e, por fim, ao voltar para a sub-rotina, ocorre, na linha 12, a invocação da função mostrar_resultados. Essa função recebe três valores e os apresenta na tela, concluindo a execução do código. CRIANDO SUA PRÓPRIA FUNÇÃO E A INVOCANDO EM UMA CÉLULA DO EXCEL Agora, veremos como criar uma função e utilizá-la no Excel. Considere que você precise, todos os dias, realizar os cálculos de potência, tensão e corrente e, todos os dias, precisa digitar os valores e realizar as multiplicações e divisões inerentes a esses cálculos. Então, considere que você pode ter uma função matemática no Excel, que, se você passar por parâmetro a tensão (V) e a corrente (I), essa função te retornará à potência. Não seria mais prático do que ficar fazendo uma série de cálculos? São cálculos simples e rápidos, porém, se você os economizar, certamente, terá mais tempo para outras coisas importantes. Agora, vamos criar um novo módulo no nosso VBA. Para isso, no editor VBA, clique com o botão direito sobre o diretório “VBAProjects” e, em seguida, clique em INSERIR >> MÓDULO. Criaremos três funções: uma para calcular a potência a partir da tensão e da corrente; outra para calcularmos a tensão a partir da potência e da corrente; e, por fim, uma para calcular a corrente a partir da tensão e da potência. As fórmulas são dadas a seguir: P = V · I V = P/I I = P/V Em que P é potência, V é tensão e I é corrente. Vamos, então, montar as nossas funções no VBA. A Figura 23 apresenta como elas ficaram. Figura 23. Funções para uso nas células do Excel. As funções estão prontas, então, precisamos invocá-las no Excel. Do mesmo modo que invocamos as principais funções, também invocaremos as três que nós criamos. A Figura 24 apresenta uma sugestão de organização da tabela do Excel. Figura 24. Estrutura das células no Excel. Observe que a Figura 24 apresenta três espaços em cinza mais escuro; nele ficará a nossa resposta. Vale ressaltar que as cores foram escolhidas para fins didáticos e que não possuem influência. No primeiro conjunto, temos os valores para a tensão e para a corrente, logo, calcularemos a potência. No segundo conjunto, temos os valores da tensão e da potência, logo, calcularemos a corrente. Por fim, no terceiro conjunto, teremos que calcular a tensão a partir dos valores dados de corrente e potência. Então, para o primeiro conjunto, clique na célula cinza, digite =calc_potencia(C2;C3) e pressione Enter. Assim, passaremos dois valores por parâmetro para a função calc_potencia. Para o segundo conjunto, clique na célula cinza, digite =calc_corrente(F4;F2) e pressione Enter. Assim, passaremos dois valores por parâmetro para a função calc_corrente. Para o terceiro e último conjunto, clique na célula cinza, digite =calc_tensao(I4;I3) e pressione Enter. Assim, passaremos dois valores por parâmetro para a função calc_tensao. Lembre-se que a planilha do Excel possibilita a invocação e a criação de todos os tipos de função e de cálculos matemáticos. MODIFICADORES DE ACESSOS PÚBLICO E PRIVADO Os termos público e privado são usados em relação aos módulos. O conceito básico é de que variáveis, Subs ou funções públicas podem ser vistas e usadas por todos os módulos da pasta de trabalho e, enquanto variáveis, Subs e funções privadas podem ser usadas apenas por código dentro do mesmo módulo. // Subprocedimentos (Sub) Ao pensar sobre a diferença entre Subs públicas e privadas, as duas principais perguntas a serem feitas são: 1. O código aparece na lista de macros disponíveis na janela Macro do Excel? 2. O código pode ser executado a partir de outra macro? Se a resposta for negativa para alguma dessas perguntas, significa que a Sub é privada, ou seja, ninguém ou nenhum processo consegue “enxergá-la”, exceto o próprio módulo. Já a pública funciona de forma contrária. Quando não houver discriminação sobre Sub ser pública ou privada, o VBA compreende que a Sub é pública por definição. // Funções (Functions) A definição de privado e público para Subs também valem para funções. Vamos voltar ao exemplo do cálculo da equação de segundo grau; caso você não queira que suas funções sejam acessadas por qualquer pessoa, você pode colocar um private em todas as funções, bloqueando-as. Assim, somente o módulo que possui essas funções as enxergará. Mas por que não deixar tudo como público? Vamos pensar no controle remoto da televisão. Você sabe que, ao pressionar o sinal de + (mais), o volume aumenta e, se pressionar o sinal de – (menos), o volume diminui. Você precisa ter acesso à placa do circuito do controle para realizar esta operação? Não, você não precisa. Considere o controle remoto um programa que você criou. As funções dos botões não são abertas ao usuário. Você, desenvolvedor, as conhece e sabe como elas funcionam, entretanto, para o usuário, interessa apenas aumentar ou diminuir o volume, por exemplo, mas não interessa a programação. Podemos dizer, portanto, que toda a lógica por trás das ações do controle remotoé privada. Entretanto, sua interface é pública, uma vez que permite interagir com o aparelho. VAMOS REFORÇAR O QUE APRENDEMOS ATÉ AGORA? Em relação a modificadores de acessos, pode-se afirmar que: Resposta = O modificador private, quando aplicado em uma função, a tornará disponível apenas dentro do módulo. SINTETIZANDO No decorrer dessa unidade, você pôde compreender os conceitos que envolvem os operadores aritméticos, de comparação e lógicos. Quando falamos de operadores aritméticos, nos vêm à mente os operadores clássicos da matemática, como adição, subtração, divisão e multiplicação. Porém, vimos mais outros dois operadores diferentes: a exponenciação, representada pelo acento circunflexo (^); e o módulo, responsável por receber o resto de uma divisão. Outra forma de relacionarmos variáveis, além da utilização de operadores aritméticos, é através do uso dos operadores de comparação. Utilizaremos com muita frequência esse tipo de operador durante nosso tempo de estudos, principalmente em conjunto com os operadores lógicos E, OU e OU Exclusivo. Observamos, também, as principais funções matemáticas, bem como as propriedades que a cercam, como parâmetros de entrada e o que cada função retorna. Vimos o conceito de modularização, e, também, que podemos criar nossas próprias funções e invocá-las em qualquer parte do código. Esse é um procedimento de organização do código, que facilita sua leitura e manutenção. Por fim, vimos que as funções e as sub-rotinas possuem modificadores de acessos. Quando públicas (public), elas podem ser vistas e chamadas em qualquer local do Excel e do nosso programa VBA. Por outro lado, quando estão no modo privado (private), só é possível invocar uma função dentro do módulo que a implementou. REFERÊNCIAS BIBLIOGRÁFICAS CORMEN, T. et. al. Algoritmos: teoria e prática. 2. ed. São Paulo: Editora Campus, 2002. EDELWEISS, N.; LIVI, M. Algoritmos e programação com exemplos em Pascal e C. Porto Alegre: Bookman, 2014. MICROSOFT. Funções matemáticas (Visual Basic). [s. l.], 27 jan. 2020. Disponível em: <https://docs.microsoft.com/pt-br/dotnet/visual- basic/language-reference/functions/math-functions>. Acesso em: 01 jun. 2020. MICROSOFT. Introdução ao VBA no Office. [s. l.], 14 ago. 2019. Disponível em: <https://docs.microsoft.com/pt-br/office/vba/library- reference/concepts/getting-started-with-vba-in-office>. Acesso em: 02 abr. 2020. SHARP, H.; ROGERS, Y.; PREECE, J. Interaction design: beyond human- computer interaction. Nova Iorque: John Wiley & Sons, 2002. STRINGS: conceito e utilização - Linguagem C. Postado por Eduardo Casavella. (11min. 14s.). son. color. port. Disponível em: <https://youtu.be/x3YFQjWFGy4>. Acesso em: 22 maio 2020. WALKENBACH, J. Programando Excel VBA para leigos. Rio de Janeiro: Alta Books, 2013. https://docs.microsoft.com/pt-br/dotnet/visual-basic/language-reference/functions/math-functions https://docs.microsoft.com/pt-br/dotnet/visual-basic/language-reference/functions/math-functions https://docs.microsoft.com/pt-br/office/vba/library-reference/concepts/getting-started-with-vba-in-office https://docs.microsoft.com/pt-br/office/vba/library-reference/concepts/getting-started-with-vba-in-office https://youtu.be/x3YFQjWFGy4
Compartilhar