# Macro

Uma macro (abreviação para macroinstrução), em ciência da computação, é uma regra ou padrão que especifica como uma certa sequência de entrada (frequentemente uma sequência de caracteres) deve ser mapeada para uma substituição de sequência de saída (também frequentemente uma sequência de caracteres) de acordo com um procedimento definido. O processo de mapeamento que instancia (transforma) uma utilização de macro em uma sequência específica é conhecido como expansão de macro. O recurso de escrita de macros pode ser fornecido como parte de um software aplicativo ou como uma parte de uma linguagem de programação. No primeiro caso, as macros são usadas para realizar tarefas usando o aplicativo menos repetitivo. No outro caso, elas são uma ferramenta que permite um programador habilitar a reutilização de código ou mesmo projetar linguagens de domínio específico.
Existem duas ramificações de macros, cada uma com diferentes padrões de entrada e de saída:
* Macros de programação possuem um programa de computador como entrada e retornam como saída um novo e expandido programa. Tal processo é chamado expansão por macros e a ferramenta que faz isto é chamada de macro-expansor, ou simplesmente pré-processador. Para muitas linguagens de programação o macro-expansor é incluído no interpretador ou no compilador. Tais macros permitem a utilização de abstrações de alto nível nas linguagens de programação.
* Macros de teclado ou mouse e macros de aplicação possuem um comando como entrada e retornam como saída um novo e expandido conjunto de comandos ou instruções. Tais macros são tipicamente usadas para automatizar sequências de instruções, movimentos ou regras frequentemente usadas.

## Macros de teclado ou mouse

Macros de teclado ou mouse permitem que sequências curtas de teclas pressionadas ou ações do mouse substituam longas sequências de comandos, automatizando tarefas repetitivas. Da mesma forma que macros de aplicação, estas macros podem ser definidas tanto por gravação ou por linguagem de programação de macros.

### Macros de aplicação e script

Aplicações podem usar sistemas análogos de macros, que permitem ao usuário especificar uma série de ações em um novo procedimento. As macros são geralmente gravadas ao executar a sequência uma vez, permitindo à aplicação lembrar de tais ações. Usuários avançados podem também fazer uso de uma linguagem de programação de macros embutida, que possui acesso direto às funcionalidades da aplicação.
Uma linguagem de macro é uma linguagem de programação na qual toda a computação é feita pela expansão (instanciação) de macros. Geralmente, não são usadas para a programação geral, mas são comuns em aplicações de processamento de texto.
Visual Basic for Applications (VBA) é uma linguagem de programação incluída no Microsoft Office e algumas outras aplicações. Ela não é uma linguagem de macros, mas suas funcionalidades evoluíram e ela acabou substituindo as linguagens de macro anteriores de tais aplicações, sendo atualmente chamada incorretamente de linguagem de macro.

#### Vírus de macro

O VBA possui acesso à maioria das funções do sistema operacional e suporta execução automática de código quando um documento é aberto. Tal arquitetura torna relativamente simples a construção de vírus informáticos, conhecidos popularmente como vírus de macro.

## Ramificações
### Macros de programação

Linguagens como C e assembly possuem sistemas simples de macros, implementados como pré-processadores no compilador ou montador, respectivamente. No caso do C, as macros funcionam pela simples busca e substituição textual pelo código fonte.
Dialetos da linguagem Lisp, tais como o Common Lisp e Scheme, possuem sistemas mais elaborados de macros: em Lisp as macros agem como funções que transformam o texto do programa, com toda a linguagem disponível para expressar tais transformações. Em contraste com as macros do C, que definem simples substituições de uma sintaxe para outra, uma macro do Lisp pode controlar o processamento de seções do código e do fluxo do algoritmo.

#### Principais macros para Office

O Microsoft Office mantém diversas instruções macros gravadas em seu interior. Estas instruções são padrão entre os diversos aplicativos do pacote. Atalhos são definidos e estão disponíveis para todos os usuários.
* Ctrl + P = imprimir; arquivo
* Ctrl + T = selecionar; tudo
* Ctrl + B = salvar
* Ctrl + N = negrito
* Ctrl + I = itálico
* Ctrl + S = sublinhado
* Ctrl + C = copiar
* Ctrl + V = colar
Além disso, podemos gravar novas instruções e usar os atalhos disponíveis, criar um botão ou acessá-las usando Alt+F8 no teclado.
Usando macros, é possível, por exemplo, imprimir arquivo de única página várias vezes com números diferentes a cada impressão, colar especial valores dentro do Excel sem repetir esta operação diversas vezes, estas ações permitem que os usuários trabalhem com maior facilidade.
Para construir uma macro dentro do Office basta acessar o Menu Ferramentas, Macros, clicar em Gravar Nova Macro e realizar a sequência desejada. Esta instrução estará disponível na pasta de trabalho que for gravada. Para usar estas instruções macros em todas as pastas de trabalho grave-as na pasta pessoal de macros.
Por segurança, não execute macros em seu computador de pessoas desconhecidas ou de fontes duvidosas, é fácil produzir estas macros, assim peça explicações nos fóruns da Internet e lembre-se sempre de entender o que um determinado comando fará no computador mantendo o nível de segurança das macros do Office como médio.

#### Exemplo de Macro para Excel

Vamos agora criar uma macro para que ao se digitar na coluna A do Excel o computador mostre a data e hora que este determinado texto foi digitado. Observe que o VBA é orientado a eventos, ou seja quando ocorrer uma determinada ação o aplicativo responderá executando as linhas de código definidas pelo desenvolvedor, neste caso usaremos o comando Change (ao alterar) da planilha.
Esta é uma execução simples, porém auxilia no cadastro de entradas e saídas das pessoas de um determinado local, registro de monitoramento de processos, previsão e chegada de encomendas confrontando com a hora real de chegada, diminuindo a necessidade de digitação de datas e horas pelo operador da planilha, além de ser mais seguro desde que a data e hora do sistema esteja correta.
Outra forma de automatizar os trabalhos e minimizar a necessidade de fórmulas enormes que são copiadas entre muitas planilhas, é a construção de funções Functions dentro de um módulo macro do Excel.
Estas funções poderão ser solicitadas dentro do módulo onde foram criadas ou também pode-se gravá-las dentro da Pasta Pessoal de Macros e serem usadas por todas as planilhas abertas. Segundo o Help do Visual Basic, a função necessita do módulo para executar e as macros deverão estar habilitadas, pois, do contrário não funcionarão. Então, caso mude de computador leve junto a pasta onde estão armazenadas suas funções e faça rotineiramente cópias de segurança e guarde-as em local seguro.
A função abaixo pode ser utilizada para contar quantas vezes ocorre um determinado dia da semana num intervalo de tempo, retornando um número inteiro. A utilização desta função poderá ser feita por qualquer versão do Microsoft Excel, assim, abra a pasta de trabalho onde deseja inserir a função, vá na barra de ferramenta Visual Basic, insira um módulo e edite a função abaixo:
A partir deste ponto, a função poderá ser executada como uma função normal do Excel e estará disponível no menu Inserir Função na categoria Todas. Para usá-la deverá considerar a variável DataInicial como uma data válida, DataFinal também como uma data válida, porém maior que DataInicial e DiaProcurado um número inteiro maior ou igual a um (1) e menor ou igual a sete (7), onde 1 = domingo, 2 = segunda-feira, 3 = terça-feira... 7 = sábado.
Exemplo: Uma empresa de eventos fará seu orçamento anual, que terá início no primeiro dia de 2008 e encerrará obviamente no último dia do mesmo ano, sabe-se que seus proventos são calculados sobre os sábados, assim é necessário saber quantos sábados há no referido intervalo. Assim, usando uma planilha do Excel, pode-se definir os seguintes valores nas células:
* A1 = 01/01/2008 data inicial do período;
* A2 = 31/12/2008 data final do período, repare que esta data é maior que a anterior;
* A3 = 7 número que representa o sábado, dia da semana procurado;
A função usada para calcular este problema será editada na célula A4, a qual receberá a contagem do dia definido, sendo:
que retornará um número inteiro igual a cinquenta e dois (52) que é a quantidade de sábados do ano de 2008.
Para somar mais de um dia pode-se usar também:
o resultado será a soma dos sábados e domingos do intervalo.
Como no exemplo citado acima, é possível também criar outras funções, bastando para isso um bom problema e alguns neurónios disponíveis.

#### Exemplo de macro em C

Como exemplo, vamos usar o #define. Esse é um preprocessado em C, em que se tem a estrutura: #define nome texto_de_substituição. Outro exemplo é o #include, no qual se declara a biblioteca em que se buscam as funções fora da linguagem padrão do C. A stdio.h é uma biblioteca padrão do C, na qual se tem a famosa função printf, uma chamada de sistema para impressão na tela.
Bom, vamos ao exemplo.
* #define infinito for(;;) → aqui todas as palavras infinito do código serão substituidas por for(;;)