DEV Community

Oberdan Brito
Oberdan Brito

Posted on

Separação de conteúdo em arquivos no Microsoft Excel

Image description

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?

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

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

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.

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

Acessem o código completo, estudem e se divirtam! Sinta-se a vontade para tirar alguma dúvida.

Uma boa semana e até a próxima.

Top comments (2)

Collapse
 
gubleo profile image
Gustavo Borges

Obrigado pela postagem me ajudou bastante.

Porém ainda estou com uma dúvida, não sei se você conseguiria me ajudar... Talvez sim, pois você parece ter muita expertise nessa área 😅😅😅

Qual é a melhor maneira de pesquisar várias palavras em várias planilhas do Excel?

Collapse
 
oberdanbrito profile image
Oberdan Brito

Opa, uma forma fácil é assim:

Sub ListarArquivosAbertos()

    Dim wb As Workbook
    Dim row As Integer
    row = 1

    For Each wb In Application.Workbooks
        Debug.print wb.Name
       Workbooks(wb.Name).Activate
       NumSheets = Sheets.Count 'obtém o número de planilhas
       For i = 1 To NumSheets 'repete para cada planilha
        Debug.print Sheets(i).Name
    Next i

    Next wb

End Sub
Enter fullscreen mode Exit fullscreen mode

Com esse método você consegue listar o nome de todos os arquivos abertos no seu Excel e ele percorre um a um, dentro do loop ele percorre todas as planilhas
aí se não me engano existe o método searchRange.Find(What:="ValorProcurado", LookIn:=xlValues) para pesquisas