Separação de conteúdo em arquivos no Microsoft Excel
Tags: braziliandevs, excel, vba
Published: 2023-03-20 20:28:27


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qfqrlrwo4uv37j0x2ys9.jpg)

O código dessa semana é uma ajuda que dei a um amigo. Ele estava precisando separar uma lista de clientes contida em um arquivo, onde continha a palavra "Empresa" porém estava separada por intervalos com nomes de funcionários. Como a urgência falava mais alto, construir algo do zero seria impossível, então encontrei uma solução simples e que acabou sendo útil para muitas planilhas dele. Este e o link do código completo

Há sim... quem não se lembra do velho VBA. Ainda na década de 90 a Microsoft precisava apresentar aos seus clientes corporativos alguma forma que ajudasse eles a automatizar as tarefas. Visto que a grande sacada do Office é oferecer um produto genérico na qual usuários com conhecimento mais aprofundados pudessem deixar rotinas mais inteligentes. mas sem longas histórias, a solução que encontrei, utiliza dois loops para identificar onde encontrar uma palavra que sempre repete no arquivo. Se essa for a sua necessidade dê uma olhada nesse exemplo:

Para quem não está familiarizado com VBA, toda variável deve ser declarada e repare que para fazer isso você deve usar a palavra reservada "Dim" de dimensionar, sacou?

{% embed https://gist.github.com/OberdanBrito/318ff7ce407aa16cef8f3610fefd0182 %}

Agora a parte fundamental, repare que há um loop. Este é utilizado para percorrer todas as linhas da planilha do Excel.

{% embed https://gist.github.com/OberdanBrito/a416c8c59a365392926f45f131ff7964 %}

Você pode substituir por qualquer palavra para pesquisar, desde que essa faça parte de um padrão dentro do seu arquivo. Vamos imaginar que ao invés de "Empresa:" o seu arquivo seja uma lista de alunos, nesse caso basta modificar o valor da pesquisa pela palavra "alunos". Mas atenção, procure identificar bem o seu padrão. Se na sua planilha existir mais de uma forma para escrita, você deve primeiro certificar-se de que está pesquisando um caso bem específico. No meu caso para evitar essa coincidência, eu reparei que sempre quando havia a palavra empresa ela era seguida pelos dois pontos (:), assim ficou fácil.

Após a identificação, você deve estabelecer um ponto de partida e um ponto de encerramento, que servem para você fazer o que mais estiver necessitado no momento, uma cópia das células (Meu caso), formatação ou edição de dados seja possível. Então para que a magia pudesse ocorrer eu usei um novo loop

{% embed https://gist.github.com/OberdanBrito/1a1cdadbac66dd850136d87f39961530 %}

Repare que no primeiro loop estamos percorrendo linha por linha para identificar onde começa uma empresa, já nesse segundo caso nós precisamos identificar o final que determina o início da uma outra empresa. Uma vez encontrado o final agora sabemos o que selecionar. É aí que entra a palavra "Range" Essa função interna do Excel nada mais é que a capacidade de selecionar uma área ou os mesmos movimentos que você faria com o seu mouse passando encima e selecionado as áreas que deseja de uma planilha

Por fim eu definir o que desejava com a minha seleção. **É claro que você deve alterar isso também, a fim de refletir a sua necessidade eyes **



Bônus: O código final apresenta uma maneira fácil de separar o conteúdo obtido no comando "Range" e cola dentro de um novo arquivo. Um para cada empresa que foi encontrada na planilha.

{% embed https://gist.github.com/OberdanBrito/94f62e2f68b4fa09c84a2b4d279ac553 %}


Pessoal, essa dica é para aqueles que ainda não conhecem esse ambiente de trabalho. Vá até o Excel aperte Alt+F11 e confira.

E para nós saudosistas de plantão! eu deixo esse print de quando agente brincava de formulários...

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5eobazuz3clx6oqpymcy.png)
 
Acessem o [código completo](https://gist.github.com/OberdanBrito/8fa25738036b0fb4fff17fa24a62ba39), estudem e se divirtam! Sinta-se a vontade para tirar alguma dúvida.

Uma boa semana e até a próxima.