Notifications
Clear all

Organizar dados da exporta do meu sistema

23 Posts
2 Usuários
0 Reactions
1,770 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá pessoal,
Tenho que fazer um controle, onde exporto dados do meu sistema para Excel, mas fica muito bagunçados os dados e demorados para ser organizados manualmente.
Nesta organização devem ser copiado o nome do funcionário em todas as linhas correspondente ao seu apontamento até que apareça outro nome e assim sucessivamente. Os dados estarão na aba "Rel. Tempo.xls" e os dados deverão ser organizados na aba Plan1, conforme layout como exemplo.
Na coluna em destaque na Plan1 de amarelo, terá que converter os minutos da coluna "H" que está separado por ponto em horas decimais, substituindo o ponto por virgula para reconhecer números em uma soma. EX.: 5.45 (5 HORAS E 45 MINUTOS) CONVERTIDO FICA 5.75.

Mais compreensão da necessidade favor verificar o arquivo em anexo.

silvajmp

 
Postado : 15/04/2014 8:04 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Sem macro.

Me avise.

Abs

http://www.4shared.com/file/MGIwAY8Fce/ ... macro.html

 
Postado : 16/04/2014 9:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Matrix, e isso mesmo ficou muito bom, vou fazer outras simulações no trabalho, depois indico como resolvido.
Porém seria pedir muito se mandasse via macro, para eu estuda-la e aumentar meus conhecimentos?

silva_jmp

 
Postado : 17/04/2014 7:57 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Cara, vou ficar te devendo com macro pois sou garoto novo no assunto (mas tem uma galera aqui que manja e pode te ajudar).

Qq coisa avisa.

Abs,

 
Postado : 17/04/2014 8:42 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Veja se ajuda:

Sub Organiza_GT()
'Não atualiza a tela
Application.ScreenUpdating = False

'Definição das variáveis
Dim ws_Origem   As Worksheet
Dim ws_Cópia    As Worksheet
Dim Funcionário As String
Dim i           As Integer 'linhas da planiha original
Dim j           As Integer 'linhas da planilha para onde os dados serão copiados
Dim PL          As Integer 'Primeira Linha
Dim UL          As Integer 'Última Linha
Dim Hora        As Double
Dim Minutos     As Double

'Define as planilhas
Set ws_Origem = Sheets("Rel. Tempo.xls")
Set ws_Cópia = Sheets("Plan1")

'Define a primeira linha com dados que interessam
PL = 10
'Pega a última linha com base na coluna A
UL = ws_Origem.Cells(Rows.Count, "A").End(xlUp).Row
'Define o valor de j para a primeira linha onde os dados serão inseridos
j = 2

'Faz o loop entre a primeira e a última linha definidas acima, aumentanto de 2 em 2 linhas
For i = PL To UL Step 2
    'Verifica qual o funcionário atual e joga seus dados para a variável Funcionário
    If ws_Origem.Cells(i, "A").Value = "Funcionário:" Then Funcionário = ws_Origem.Cells(i, "B").Value
    'Verifica se é uma data, se for, copia os dados
    If IsDate(ws_Origem.Cells(i, "A").Value) Then
        ws_Cópia.Cells(j, "A").Value = Funcionário
        ws_Cópia.Cells(j, "B").Value = ws_Origem.Cells(i, "A").Value
        ws_Cópia.Cells(j, "C").Value = ws_Origem.Cells(i + 1, "A").Value
        ws_Cópia.Cells(j, "D").Value = ws_Origem.Cells(i + 1, "B").Value
        ws_Cópia.Cells(j, "E").Value = ws_Origem.Cells(i, "B").Value
        ws_Cópia.Cells(j, "F").Value = ws_Origem.Cells(i, "C").Value
        ws_Cópia.Cells(j, "G").Value = ws_Origem.Cells(i, "D").Value
        ws_Cópia.Cells(j, "H").Value = ws_Origem.Cells(i, "E").Value
        'Converte os minutos em decimais
            Hora = ws_Origem.Cells(i, "E").Value / 100
                Minutos = Hora - Int(Hora)
                Hora = Int(Hora)
                Minutos = Minutos / 60 * 100
                Hora = Hora + Minutos
        ws_Cópia.Cells(j, "I").Value = Hora
        'Ao fim das cópias, passa j para o valor da linha seguinte
        j = j + 1
    End If
Next i

'Atualiza a tela
Application.ScreenUpdating = True
End Sub
 
Postado : 17/04/2014 9:42 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Matrix obrigado pela ajuda até o momento.

gtsalikis bom dia, valeu pela contribuição, criei um botão para chamar a macro, porém o que eu pude observar algumas datas do 1 a 12 estão com a formatação errada mm/dd/aaaa, preciso que todas as datas estejam no formato de data, pois vou a data como referencia em algumas formulas. E outra coisa que observei que a linha que organizei além da data a hora inicial apareceu em decimal, preciso que seja igual ao original.

000051 - PEDRO JANIO ESPINDOLA RAMIRO	[b]04/02/2014[/b]  62266	1-DESTRAVAR A BOMBA DE MAGMA  DA FABRICA .	MCP	[b]0,638888889[/b]	19:00	3,4	3,67

silva_jmp

http://www.4shared.com/rar/3lrdf2JAba/Cpia_de_Rel__Tempo_xls.html

 
Postado : 18/04/2014 8:15 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Tente agora:

Sub Organiza_GT()
'Não atualiza a tela
Application.ScreenUpdating = False

'Definição das variáveis
Dim ws_Origem   As Worksheet
Dim ws_Cópia    As Worksheet
Dim Funcionário As String
Dim i           As Integer 'linhas da planiha original
Dim j           As Integer 'linhas da planilha para onde os dados serão copiados
Dim PL          As Integer 'Primeira Linha
Dim UL          As Integer 'Última Linha
Dim Horas       As String
Dim Minutos     As String
Dim Tempo       As String

'Define as planilhas
Set ws_Origem = Sheets("Rel. Tempo.xls")
Set ws_Cópia = Sheets("Plan1")

'Define a primeira linha com dados que interessam
PL = 10
'Pega a última linha com base na coluna A
UL = ws_Origem.Cells(Rows.Count, "A").End(xlUp).Row
'Define o valor de j para a primeira linha onde os dados serão inseridos
j = 2

'Formata as colunas H e I como texto para inserir o tempo com ponto
ws_Cópia.Columns("H:I").NumberFormat = "@"

'Faz o loop entre a primeira e a última linha definidas acima, aumentanto de 2 em 2 linhas
For i = PL To UL Step 2
    'Verifica qual o funcionário atual e joga seus dados para a variável Funcionário
    If ws_Origem.Cells(i, "A").Value = "Funcionário:" Then Funcionário = ws_Origem.Cells(i, "B").Value
    'Verifica se é uma data, se for, copia os dados
    If IsDate(ws_Origem.Cells(i, "A").Value) Then
        ws_Cópia.Cells(j, "A").Value = Funcionário
        ws_Cópia.Cells(j, "B").Value = Format(ws_Origem.Cells(i, "A").Value, "dd/mm/yyyy")
        ws_Cópia.Cells(j, "C").Value = ws_Origem.Cells(i + 1, "A").Value
        ws_Cópia.Cells(j, "D").Value = ws_Origem.Cells(i + 1, "B").Value
        ws_Cópia.Cells(j, "E").Value = ws_Origem.Cells(i, "B").Value
        ws_Cópia.Cells(j, "F").Value = ws_Origem.Cells(i, "C").Value
        ws_Cópia.Cells(j, "G").Value = ws_Origem.Cells(i, "D").Value
        ws_Cópia.Cells(j, "H").Value = ws_Origem.Cells(i, "E").Value
            'Converte os minutos em decimais
            Tempo = ws_Cópia.Cells(j, "H").Value
                Horas = Mid(Tempo, 1, Len(Tempo) - 2)
                Minutos = Right(Tempo, 2)
                Minutos = Round(Minutos / 60 * 100)
            Tempo = Horas & Minutos
        ws_Cópia.Cells(j, "I").Value = Tempo
        'Ao fim das cópias, passa j para o valor da linha seguinte
        j = j + 1
    End If
Next i

'Atualiza a tela
Application.ScreenUpdating = True
End Sub
 
Postado : 18/04/2014 10:35 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

gtsalikis obrigado novamente, mas não deu certo abaixo esta o resultado após inserir a macro revisada, permanecendo a formatação das datas de 1 a 12 em mm/dd/aaaa e inicio da hora esta em decimal.

000051 - PEDRO JANIO ESPINDOLA RAMIRO	04/02/2014	62266	1-DESTRAVAR A BOMBA DE MAGMA  DA FABRICA .	MCP	0,638888889	19:00	3.40	3.67

silva_jmp

 
Postado : 18/04/2014 12:30 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

silva,

verifique se a planilha onde vc está usando está igual a que vc enviou, se as colunas em ambas as planilhas são a mesma.

Verifique também a formatação das células.

No teu modelo, eu formtei as células da Plan1 como texto e rodei a macro, deu certo.

 
Postado : 18/04/2014 1:24 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

gtsalikis, apaguei a macro coloquei a última revisão, executei e esta aparecendo os mesmos erros: datas do 1 a 12 estão com outra formatação e em uma das linhas, as horas iniciais esta em decimais e observei também você colocou para que as colunas H e I tivessem a formação com ponto, pois preciso que a coluna "I" fique com a separação em virgula e a "H" pode permanecer os dados originais.

000051 - PEDRO JANIO ESPINDOLA RAMIRO 04/02/2014 62266 1-DESTRAVAR A BOMBA DE MAGMA DA FABRICA . MCP 0,638888889 19:00 3.40 3.67

Módulo:

Sub Organiza_GT()
'Não atualiza a tela
Application.ScreenUpdating = False

'Definição das variáveis
Dim ws_Origem   As Worksheet
Dim ws_Cópia    As Worksheet
Dim Funcionário As String
Dim i           As Integer 'linhas da planiha original
Dim j           As Integer 'linhas da planilha para onde os dados serão copiados
Dim PL          As Integer 'Primeira Linha
Dim UL          As Integer 'Última Linha
Dim Horas       As String
Dim Minutos     As String
Dim Tempo       As String

'Define as planilhas
Set ws_Origem = Sheets("Rel. Tempo.xls")
Set ws_Cópia = Sheets("Plan1")

'Define a primeira linha com dados que interessam
PL = 10
'Pega a última linha com base na coluna A
UL = ws_Origem.Cells(Rows.Count, "A").End(xlUp).Row
'Define o valor de j para a primeira linha onde os dados serão inseridos
j = 2

'Formata as colunas H e I como texto para inserir o tempo com ponto
ws_Cópia.Columns("H:I").NumberFormat = "@"

'Faz o loop entre a primeira e a última linha definidas acima, aumentanto de 2 em 2 linhas
For i = PL To UL Step 2
    'Verifica qual o funcionário atual e joga seus dados para a variável Funcionário
    If ws_Origem.Cells(i, "A").Value = "Funcionário:" Then Funcionário = ws_Origem.Cells(i, "B").Value
    'Verifica se é uma data, se for, copia os dados
    If IsDate(ws_Origem.Cells(i, "A").Value) Then
        ws_Cópia.Cells(j, "A").Value = Funcionário
        ws_Cópia.Cells(j, "B").Value = Format(ws_Origem.Cells(i, "A").Value, "dd/mm/yyyy")
        ws_Cópia.Cells(j, "C").Value = ws_Origem.Cells(i + 1, "A").Value
        ws_Cópia.Cells(j, "D").Value = ws_Origem.Cells(i + 1, "B").Value
        ws_Cópia.Cells(j, "E").Value = ws_Origem.Cells(i, "B").Value
        ws_Cópia.Cells(j, "F").Value = ws_Origem.Cells(i, "C").Value
        ws_Cópia.Cells(j, "G").Value = ws_Origem.Cells(i, "D").Value
        ws_Cópia.Cells(j, "H").Value = ws_Origem.Cells(i, "E").Value
            'Converte os minutos em decimais
            Tempo = ws_Cópia.Cells(j, "H").Value
                Horas = Mid(Tempo, 1, Len(Tempo) - 2)
                Minutos = Right(Tempo, 2)
                Minutos = Round(Minutos / 60 * 100)
            Tempo = Horas & Minutos
        ws_Cópia.Cells(j, "I").Value = Tempo
        'Ao fim das cópias, passa j para o valor da linha seguinte
        j = j + 1
    End If
Next i

'Atualiza a tela

silva_jmp

http://www.4shared.com/file/-Lq5_Va5ba/Rel_Tempo_-_R1.html

 
Postado : 18/04/2014 2:42 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Silva,

Fiz algumas alterações e testei na tua última versão, e deu certo:

Sub Organiza_GT()
'Não atualiza a tela
Application.ScreenUpdating = False

'Definição das variáveis
Dim ws_Origem   As Worksheet
Dim ws_Cópia    As Worksheet
Dim Funcionário As String
Dim i           As Integer 'linhas da planiha original
Dim j           As Integer 'linhas da planilha para onde os dados serão copiados
Dim PL          As Integer 'Primeira Linha
Dim UL          As Integer 'Última Linha
Dim Horas       As String
Dim Minutos     As String
Dim Tempo       As String

'Define as planilhas
Set ws_Origem = Sheets("Rel. Tempo.xls")
Set ws_Cópia = Sheets("Plan1")

'Define a primeira linha com dados que interessam
PL = 10
'Pega a última linha com base na coluna A
UL = ws_Origem.Cells(Rows.Count, "A").End(xlUp).Row
'Define o valor de j para a primeira linha onde os dados serão inseridos
j = 2

'Formata a coluna B como data
ws_Cópia.Columns("B").NumberFormat = "dd/mm/yyyy"
'Formata as colunas F e G como hora
ws_Cópia.Columns("F:G").NumberFormat = "hh:mm"
'Formata as colunas H e I como texto para inserir o tempo com ponto
ws_Cópia.Columns("H:I").NumberFormat = "@"

'Faz o loop entre a primeira e a última linha definidas acima, aumentanto de 2 em 2 linhas
For i = PL To UL Step 2
    'Verifica qual o funcionário atual e joga seus dados para a variável Funcionário
    If ws_Origem.Cells(i, "A").Value = "Funcionário:" Then Funcionário = ws_Origem.Cells(i, "B").Value
    'Verifica se é uma data, se for, copia os dados
    If IsDate(ws_Origem.Cells(i, "A").Value) Then
        ws_Cópia.Cells(j, "A").Value = Funcionário
        ws_Cópia.Cells(j, "B").Value = CDate(ws_Origem.Cells(i, "A"))
        ws_Cópia.Cells(j, "C").Value = ws_Origem.Cells(i + 1, "A").Value
        ws_Cópia.Cells(j, "D").Value = ws_Origem.Cells(i + 1, "B").Value
        ws_Cópia.Cells(j, "E").Value = ws_Origem.Cells(i, "B").Value
        ws_Cópia.Cells(j, "F").Value = ws_Origem.Cells(i, "C").Value
        ws_Cópia.Cells(j, "G").Value = ws_Origem.Cells(i, "D").Value
        ws_Cópia.Cells(j, "H").Value = ws_Origem.Cells(i, "E").Value
            'Converte os minutos em decimais
            Tempo = ws_Cópia.Cells(j, "H").Value
                Horas = Mid(Tempo, 1, Len(Tempo) - 3)
                Minutos = Right(Tempo, 2)
                Minutos = Round(Minutos / 60 * 100)
            Tempo = Horas & "," & Minutos
        ws_Cópia.Cells(j, "I").Value = Tempo
        'Ao fim das cópias, passa j para o valor da linha seguinte
        j = j + 1
    End If
Next i

'Atualiza a tela
Application.ScreenUpdating = True
End Sub
 
Postado : 18/04/2014 5:48 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

gtsalikis bom dia, blz deu certo em questão as irregularidades anteriores, porém observei que a macro esta pegando o primeiro nome fazendo toda rotina ai ao invés da macro ir para o próximo nome, a macro esta pulando um nome e todos os seus dados, isto é, esta buscando um sim e outro não, no total são 45 funcionários e a macro só buscou 23 funcionários.

silva_jmp

 
Postado : 20/04/2014 7:29 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Veja agora:

Sub Organiza_GT()
'Não atualiza a tela
Application.ScreenUpdating = False

'Definição das variáveis
Dim ws_Origem   As Worksheet
Dim ws_Cópia    As Worksheet
Dim Funcionário As String
Dim i           As Integer 'linhas da planiha original
Dim j           As Integer 'linhas da planilha para onde os dados serão copiados
Dim PL          As Integer 'Primeira Linha
Dim UL          As Integer 'Última Linha
Dim Horas       As String
Dim Minutos     As String
Dim Tempo       As String

'Define as planilhas
Set ws_Origem = Sheets("Rel. Tempo.xls")
Set ws_Cópia = Sheets("Plan1")

'Define a primeira linha com dados que interessam
PL = 10
'Pega a última linha com base na coluna A
UL = ws_Origem.Cells(Rows.Count, "A").End(xlUp).Row
'Define o valor de j para a primeira linha onde os dados serão inseridos
j = 2

'Formata a coluna B como data
ws_Cópia.Columns("B").NumberFormat = "dd/mm/yyyy"
'Formata as colunas F e G como hora
ws_Cópia.Columns("F:G").NumberFormat = "hh:mm"
'Formata as colunas H e I como texto para inserir o tempo com ponto
ws_Cópia.Columns("H:I").NumberFormat = "@"

'Faz o loop entre a primeira e a última linha definidas acima, aumentanto de 2 em 2 linhas
For i = PL To UL Step 1
    'Verifica qual o funcionário atual e joga seus dados para a variável Funcionário
    If ws_Origem.Cells(i, "A").Value = "Funcionário:" Then Funcionário = ws_Origem.Cells(i, "B").Value
    'Verifica se é uma data, se for, copia os dados
    If IsDate(ws_Origem.Cells(i, "A").Value) Then
        ws_Cópia.Cells(j, "A").Value = Funcionário
        ws_Cópia.Cells(j, "B").Value = CDate(ws_Origem.Cells(i, "A"))
        ws_Cópia.Cells(j, "C").Value = ws_Origem.Cells(i + 1, "A").Value
        ws_Cópia.Cells(j, "D").Value = ws_Origem.Cells(i + 1, "B").Value
        ws_Cópia.Cells(j, "E").Value = ws_Origem.Cells(i, "B").Value
        ws_Cópia.Cells(j, "F").Value = ws_Origem.Cells(i, "C").Value
        ws_Cópia.Cells(j, "G").Value = ws_Origem.Cells(i, "D").Value
        ws_Cópia.Cells(j, "H").Value = ws_Origem.Cells(i, "E").Value
            'Converte os minutos em decimais
            Tempo = ws_Cópia.Cells(j, "H").Value
                Horas = Mid(Tempo, 1, Len(Tempo) - 3)
                Minutos = Right(Tempo, 2)
                Minutos = Round(Minutos / 60 * 100)
            Tempo = Horas & "," & Minutos
        ws_Cópia.Cells(j, "I").Value = Tempo
        'Ao fim das cópias, passa j para o valor da linha seguinte
        j = j + 1
    End If
Next i

'Atualiza a tela
Application.ScreenUpdating = True
End Sub
 
Postado : 20/04/2014 7:52 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

gtsalikis, blz agora sim, sem fazer uma revisão minuciosa, parece que atendeu todas as minhas necessidades, vou fazer alguns testes na terça-feira no trabalho, caso não tenha nenhuma ocorrecia encerro este tópico, valeu muito obrigado. :lol:

silvajmp

 
Postado : 20/04/2014 8:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

gtsalikis, antecipei em fazer alguns controles com os dados já organizados, e observei que o resultado da coluna "I" esta na formatação de texto, ai eu não consigo fazer como que as formulas obtenham os resultados esperado, podem ver isso para mim.

silvajmp

 
Postado : 20/04/2014 9:07 am
Página 1 / 2