Notifications
Clear all

Organizar dados com quantidade variavel

6 Posts
2 Usuários
0 Reactions
125 Visualizações
(@rechbr)
Posts: 22
Eminent Member
Topic starter
 

Ola prezados mestres do Excel!

   Eu até consegui "resolver" o problema, mas tenho certeza que possuem formas mais inteligentes e eficazes de fazer isso. Ai vai:

   Preciso copiar dados de um site e colar manualmente no excel. A quantidade de dados vai variar. Esses dados estao em uma unica coluna e em um formato que cada linha representa uma coluna ate um momento que repete, exemplo: linha 1 coluna 1, linha 2 coluna 2 e linha 3 coluna 3, linha 5 coluna 1 novamente...
  Alem disso, a primeira coluna trata-se de uma data no formato: 26 Oct 2024, 16:54:14.893 e gostaria de separar Data e Hora em colunas separadas.

 Um extra seria interessante se eu conseguisse filtrar as linhas repetidas e ficar com o valor mais recente eliminando os outros. Podendo ate mesmo deletar o restante das linhas.

  Segue anexo para que entendam. Qualquer sugestão de formulas que devo usar ou como pesquisar para melhorar isso.

Já fiz algumas coisas em VBA e formulas complexas.

Muito Obrigado desde já.

 

 

 
Postado : 25/12/2024 10:07 pm
Tags do Tópico
(@osvaldomp)
Posts: 870
Prominent Member
 

Olá, @  RechBr

Veja se esta solução via macro lhe serve.

O código abaixo utiliza somente a coluna G da planilha Dados Puros e as colunas A:E da planilha Dados Organizados.

Sub OrganizaDados()
Dim ws As Worksheet, k As Long, x As Long, LRo As Long, LRd As Long
Set ws = Sheets("Dados Organizados")
If ws.[A2] <> "" Then ws.Range("A2:E" & ws.Cells(Rows.Count, 1).End(3).Row) = ""
ws.Columns("A:B").NumberFormat = "@"
LRo = Sheets("Dados Puros").Cells(Rows.Count, "G").End(3).Row
LRd = 2
With Sheets("Dados Puros")
For k = 2 To LRo Step 7
If k = 2 Then
GoTo th
ElseIf Left(.Cells(k, "G"), 11) <> Left(.Cells(x, "G"), 11) Then
th:
ws.Cells(LRd, 1) = Left(.Cells(k, "G"), 11)
ws.Cells(LRd, 2) = Right(.Cells(k, "G"), 12)
ws.Cells(LRd, 3) = .Cells(k + 1, "G")
ws.Cells(LRd, 4) = .Cells(k + 2, "G")
ws.Cells(LRd, 5) = .Cells(k + 3, "G")
LRd = LRd + 1
End If
x = k
Next k
End With
End Sub

Osvaldo

 
Postado : 26/12/2024 1:15 pm
(@rechbr)
Posts: 22
Eminent Member
Topic starter
 

MUITO Obrigado pela atenção! Como posso retribuir?

         
 
Postado : 02/01/2025 5:43 pm
(@osvaldomp)
Posts: 870
Prominent Member
 

"MUITO Obrigado pela atenção! ---> Obrigado por retornar. 😀 

 

"Como posso retribuir?"---> Em qualquer lugar, a qualquer hora, ajude alguém que esteja precisando. 🤩 

Osvaldo

 
Postado : 02/01/2025 6:53 pm
(@rechbr)
Posts: 22
Eminent Member
Topic starter
 

Deu liberdade, vou abusar um pouco... haha

Pq por exemplo, o de cima funciona e o de baixo nao? Estou quebrando a cabeca tarde toda e nada

=PROCV("41449";OrdemTrab[#Tudo];5;0)

=PROCV([@SERIAL];OrdemTrab[#Tudo];5;0)

 
Postado : 02/01/2025 9:20 pm
(@osvaldomp)
Posts: 870
Prominent Member
 

Na tabela DadosOrg a coluna SERIAL é formada por números, ao passo que na tabela OrdemTrab a coluna SERIAL é formada por textos.

=PROCV("41449";OrdemTrab[#Tudo];5;0) ---> esta fórmula retorna o resultado correto porque o valor procurado está entre aspas ("41449") , e isso converte o número em texto, que fica compatível com a coluna em que é feita a busca.

=PROCV([@SERIAL];OrdemTrab[#Tudo];5;0) ---> esta retorna #N/D porque está buscando número em um intervalo que contém textos, conforme comentei acima.

Experimente essa abaixo.

=PROCV(TEXTO([@SERIAL];"0000");OrdemTrab[#Tudo];5;0)

__________________________________________________________________________________________________________________

Sobre o assunto inicial deste tópico, vi que você alterou o código que passei.

ElseIf Left(.Cells(k, "A"), 11) <> Left(.Cells(x, "A"), 12) Then ---> ao alterar de 11 para 12 você tornou esse comando inútil, e esse comando no código que passei tem a missão de impedir a criação de registros duplicados no resultado, aí, para "compensar o seu erro", você acrescentou comando para remover os registros duplicados.

Sugestão: no futuro, se precisar de ajustes em códigos retorne, ao invés de fazer gambiarras.

Dica - não utilize Select nos seus códigos.

Osvaldo

 
Postado : 03/01/2025 8:22 am