DEV Community

Oberdan Brito
Oberdan Brito

Posted on

1

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?

Dim flag As Boolean
flag = False
Dim linha, contador, inicio, final As Long
linha = 1
contador = 0
inicio = 0
final = 0
view raw gistfile1.txt hosted with ❤ by GitHub

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

While Not flag
If InStr(ws.Cells(linha, 1).Value, "Empresa:") > 0 Then
view raw gistfile1.txt hosted with ❤ by GitHub

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

Do
final = final + 1
If InStr(ws.Cells(final, 1).Value, "Empresa:") > 0 Or vazios = 10 Then Exit Do
If IsEmpty(ws.Cells(final, 1)) Then vazios = vazios + 1
Loop
Range("A" & inicio & ":K" & final - 1).Copy
view raw gistfile1.txt hosted with ❤ by GitHub

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.

Workbooks.Add
Set novoarquivo = ActiveWorkbook
Worksheets.Item(1).Name = "Planilha da fatura"
Worksheets.Item(1).Paste
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range("A1").Activate
novoarquivo.SaveAs Filename:="C:\minhas_empresas\" & empresa & ".xls"
novoarquivo.Save
novoarquivo.Close
Debug.Print empresa & " Inicio:" & inicio & " Final:" & final
view raw gistfile1.txt hosted with ❤ by GitHub

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.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

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

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs