Notifications
Clear all

Macro para organizar relatório

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

Boa noite pessoal feliz ano novo para todos, preciso novamente da ajuda de vocês, mais um relatório do meu sistema :x , uma verdadeira m...a, segue em anexo a planilha, na aba plan1 esta o relatório exportado do sistema e na aba plan2 esta o relatório como quero que fique.

silvajmp

 
Postado : 08/01/2015 6:26 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia pessoal, fiz a macro mas precisa melhorar, podem dar uma olhada, como exemplo de melhoria que eu não consegui fazer e quando faço a formula e copio até a última linha preenchida, pois o tamanho do relatório pode variar.

Sub Org_Relatorio()
 
    Application.ScreenUpdating = False
    Rows("1:11").Select
    Selection.Delete Shift:=xlUp
    Columns("B:B").Select
    Selection.Copy
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
    Range("B2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("B2").Select
    Selection.Delete Shift:=xlUp
    Columns("B:B").Select
    Selection.Copy
    Columns("C:C").Select
    Selection.Insert Shift:=xlToRight
    Range("C1").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    Range("C2").Select
    Selection.Delete Shift:=xlUp
    Columns("D:D").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=IF(MID(RC[-2],6,1)=""-"",RC[-1]&R[1]C[-1],"""")"
    Range("D2").Select
    Selection.Copy
    
    ' Selecionar a célula D2 até a última célula preenchida da coluna A
    
    ActiveWindow.SmallScroll Down:=849
    ActiveWindow.ScrollRow = 852
    ActiveWindow.ScrollRow = 856
    ActiveWindow.ScrollRow = 858
    ActiveWindow.ScrollRow = 860
    ActiveWindow.ScrollRow = 862
    ActiveWindow.ScrollRow = 864
    ActiveWindow.ScrollRow = 868
    ActiveWindow.ScrollRow = 869
    ActiveWindow.ScrollRow = 871
    ActiveWindow.ScrollRow = 873
    ActiveWindow.ScrollRow = 875
    ActiveWindow.ScrollRow = 879
    ActiveWindow.ScrollRow = 883
    ActiveWindow.ScrollRow = 885
    ActiveWindow.ScrollRow = 887
    ActiveWindow.ScrollRow = 889
    ActiveWindow.ScrollRow = 891
    ActiveWindow.ScrollRow = 895
    ActiveWindow.ScrollRow = 897
    ActiveWindow.ScrollRow = 899
    ActiveWindow.ScrollRow = 905
    ActiveWindow.ScrollRow = 915
    ActiveWindow.ScrollRow = 921
    ActiveWindow.ScrollRow = 929
    ActiveWindow.ScrollRow = 933
    ActiveWindow.ScrollRow = 936
    ActiveWindow.ScrollRow = 940
    ActiveWindow.ScrollRow = 942
    ActiveWindow.ScrollRow = 944
    ActiveWindow.ScrollRow = 946
    ActiveWindow.ScrollRow = 948
    ActiveWindow.ScrollRow = 952
    ActiveWindow.ScrollRow = 958
    ActiveWindow.ScrollRow = 962
    ActiveWindow.ScrollRow = 968
    ActiveWindow.ScrollRow = 972
    ActiveWindow.ScrollRow = 978
    ActiveWindow.ScrollRow = 982
    ActiveWindow.ScrollRow = 986
    ActiveWindow.ScrollRow = 990
    ActiveWindow.ScrollRow = 996
    ActiveWindow.ScrollRow = 997
    ActiveWindow.ScrollRow = 999
    ActiveWindow.ScrollRow = 1001
    ActiveWindow.ScrollRow = 1003
    ActiveWindow.ScrollRow = 1009
    ActiveWindow.ScrollRow = 1017
    ActiveWindow.ScrollRow = 1023
    ActiveWindow.ScrollRow = 1029
    ActiveWindow.ScrollRow = 1035
    ActiveWindow.ScrollRow = 1039
    ActiveWindow.ScrollRow = 1041
    ActiveWindow.ScrollRow = 1043
    ActiveWindow.ScrollRow = 1045
    ActiveWindow.ScrollRow = 1047
    ActiveWindow.ScrollRow = 1049
    ActiveWindow.ScrollRow = 1055
    ActiveWindow.ScrollRow = 1061
    ActiveWindow.ScrollRow = 1064
    ActiveWindow.ScrollRow = 1070
    ActiveWindow.ScrollRow = 1076
    ActiveWindow.ScrollRow = 1082
    ActiveWindow.ScrollRow = 1088
    ActiveWindow.ScrollRow = 1096
    ActiveWindow.ScrollRow = 1102
    ActiveWindow.ScrollRow = 1108
    ActiveWindow.ScrollRow = 1112
    ActiveWindow.ScrollRow = 1116
    ActiveWindow.ScrollRow = 1118
    ActiveWindow.ScrollRow = 1120
    ActiveWindow.ScrollRow = 1122
    ActiveWindow.ScrollRow = 1124
    ActiveWindow.ScrollRow = 1127
    ActiveWindow.ScrollRow = 1135
    ActiveWindow.ScrollRow = 1139
    ActiveWindow.ScrollRow = 1147
    ActiveWindow.ScrollRow = 1149
    ActiveWindow.ScrollRow = 1151
    ActiveWindow.ScrollRow = 1155
    ActiveWindow.ScrollRow = 1157
    ActiveWindow.ScrollRow = 1161
    ActiveWindow.ScrollRow = 1165
    ActiveWindow.ScrollRow = 1173
    ActiveWindow.ScrollRow = 1179
    ActiveWindow.ScrollRow = 1183
    ActiveWindow.ScrollRow = 1189
    ActiveWindow.ScrollRow = 1194
    ActiveWindow.ScrollRow = 1198
    ActiveWindow.ScrollRow = 1204
    ActiveWindow.ScrollRow = 1206
    ActiveWindow.ScrollRow = 1210
    ActiveWindow.ScrollRow = 1214
    ActiveWindow.ScrollRow = 1222
    ActiveWindow.ScrollRow = 1228
    ActiveWindow.ScrollRow = 1230
    ActiveWindow.ScrollRow = 1232
    ActiveWindow.ScrollRow = 1234
    ActiveWindow.ScrollRow = 1238
    ActiveWindow.ScrollRow = 1240
    ActiveWindow.ScrollRow = 1248
    ActiveWindow.ScrollRow = 1254
    ActiveWindow.ScrollRow = 1259
    ActiveWindow.ScrollRow = 1261
    ActiveWindow.ScrollRow = 1265
    ActiveWindow.ScrollRow = 1267
    ActiveWindow.ScrollRow = 1269
    ActiveWindow.ScrollRow = 1271
    ActiveWindow.ScrollRow = 1273
    ActiveWindow.ScrollRow = 1279
    ActiveWindow.ScrollRow = 1285
    ActiveWindow.ScrollRow = 1291
    ActiveWindow.ScrollRow = 1297
    ActiveWindow.ScrollRow = 1303
    ActiveWindow.ScrollRow = 1305
    ActiveWindow.ScrollRow = 1315
    ActiveWindow.ScrollRow = 1324
    ActiveWindow.ScrollRow = 1330
    ActiveWindow.ScrollRow = 1332
    ActiveWindow.ScrollRow = 1336
    ActiveWindow.ScrollRow = 1338
    ActiveWindow.ScrollRow = 1342
    ActiveWindow.ScrollRow = 1344
    ActiveWindow.ScrollRow = 1348
    ActiveWindow.ScrollRow = 1352
    ActiveWindow.ScrollRow = 1354
    ActiveWindow.ScrollRow = 1356
    ActiveWindow.ScrollRow = 1360
    ActiveWindow.ScrollRow = 1364
    ActiveWindow.ScrollRow = 1368
    ActiveWindow.ScrollRow = 1372
    ActiveWindow.ScrollRow = 1376
    ActiveWindow.ScrollRow = 1378
    ActiveWindow.ScrollRow = 1383
    ActiveWindow.ScrollRow = 1387
    ActiveWindow.ScrollRow = 1391
    ActiveWindow.ScrollRow = 1393
    ActiveWindow.ScrollRow = 1397
    ActiveWindow.ScrollRow = 1401
    ActiveWindow.ScrollRow = 1403
    ActiveWindow.ScrollRow = 1405
    ActiveWindow.ScrollRow = 1407
    ActiveWindow.ScrollRow = 1411
    ActiveWindow.ScrollRow = 1413
    ActiveWindow.ScrollRow = 1415
    Range("D2:D1441").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Copy
    Range("C2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("D:D").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    Range("D2").Select
    Selection.Delete Shift:=xlUp
    Columns("D:D").Select
    Selection.Copy
    ActiveWindow.SmallScroll ToRight:=2
    Columns("J:J").Select
    Selection.Insert Shift:=xlToRight
    Range("J1").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Selection.Delete Shift:=xlToLeft
    Range("K2:M2").Select
    Selection.Delete Shift:=xlUp
    Range("M1").Select
    Selection.Style = "Normal 2"
    Selection.Locked = False
    Selection.FormulaHidden = False
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlTop
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    ActiveCell.FormulaR1C1 = "% Prevista"
    Range("N1").Select
    Selection.Style = "Normal 2"
    Selection.Locked = False
    Selection.FormulaHidden = False
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlTop
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    ActiveCell.FormulaR1C1 = "Filtro"
    Range("E2:I2").Select
    Selection.Delete Shift:=xlUp
    Range("N2").Select
    ActiveCell.FormulaR1C1 = "=IF(LEN(RC[-11])>14,TRUE,FALSE)"
    Range("N2").Select
    Selection.Copy
    
    ' Selecionar a célula N2 até a última célula preenchida da coluna A

    ActiveWindow.SmallScroll Down:=72
    ActiveWindow.ScrollRow = 74
    ActiveWindow.ScrollRow = 76
    ActiveWindow.ScrollRow = 82
    ActiveWindow.ScrollRow = 88
    ActiveWindow.ScrollRow = 103
    ActiveWindow.ScrollRow = 117
    ActiveWindow.ScrollRow = 133
    ActiveWindow.ScrollRow = 149
    ActiveWindow.ScrollRow = 170
    ActiveWindow.ScrollRow = 186
    ActiveWindow.ScrollRow = 206
    ActiveWindow.ScrollRow = 227
    ActiveWindow.ScrollRow = 251
    ActiveWindow.ScrollRow = 273
    ActiveWindow.ScrollRow = 294
    ActiveWindow.ScrollRow = 318
    ActiveWindow.ScrollRow = 340
    ActiveWindow.ScrollRow = 361
    ActiveWindow.ScrollRow = 379
    ActiveWindow.ScrollRow = 401
    ActiveWindow.ScrollRow = 422
    ActiveWindow.ScrollRow = 446
    ActiveWindow.ScrollRow = 466
    ActiveWindow.ScrollRow = 483
    ActiveWindow.ScrollRow = 503
    ActiveWindow.ScrollRow = 515
    ActiveWindow.ScrollRow = 529
    ActiveWindow.ScrollRow = 539
    ActiveWindow.ScrollRow = 548
    ActiveWindow.ScrollRow = 556
    ActiveWindow.ScrollRow = 564
    ActiveWindow.ScrollRow = 576
    ActiveWindow.ScrollRow = 586
    ActiveWindow.ScrollRow = 598
    ActiveWindow.ScrollRow = 612
    ActiveWindow.ScrollRow = 627
    ActiveWindow.ScrollRow = 641
    ActiveWindow.ScrollRow = 663
    ActiveWindow.ScrollRow = 678
    ActiveWindow.ScrollRow = 698
    ActiveWindow.ScrollRow = 716
    ActiveWindow.ScrollRow = 730
    ActiveWindow.ScrollRow = 741
    ActiveWindow.ScrollRow = 755
    ActiveWindow.ScrollRow = 763
    ActiveWindow.ScrollRow = 775
    ActiveWindow.ScrollRow = 785
    ActiveWindow.ScrollRow = 797
    ActiveWindow.ScrollRow = 812
    ActiveWindow.ScrollRow = 828
    ActiveWindow.ScrollRow = 848
    ActiveWindow.ScrollRow = 866
    ActiveWindow.ScrollRow = 887
    ActiveWindow.ScrollRow = 905
    ActiveWindow.ScrollRow = 921
    ActiveWindow.ScrollRow = 936
    ActiveWindow.ScrollRow = 950
    ActiveWindow.ScrollRow = 966
    ActiveWindow.ScrollRow = 980
    ActiveWindow.ScrollRow = 994
    ActiveWindow.ScrollRow = 1009
    ActiveWindow.ScrollRow = 1021
    ActiveWindow.ScrollRow = 1035
    ActiveWindow.ScrollRow = 1049
    ActiveWindow.ScrollRow = 1064
    ActiveWindow.ScrollRow = 1076
    ActiveWindow.ScrollRow = 1090
    ActiveWindow.ScrollRow = 1104
    ActiveWindow.ScrollRow = 1112
    ActiveWindow.ScrollRow = 1124
    ActiveWindow.ScrollRow = 1131
    ActiveWindow.ScrollRow = 1141
    ActiveWindow.ScrollRow = 1147
    ActiveWindow.ScrollRow = 1151
    ActiveWindow.ScrollRow = 1157
    ActiveWindow.ScrollRow = 1167
    ActiveWindow.ScrollRow = 1177
    ActiveWindow.ScrollRow = 1185
    ActiveWindow.ScrollRow = 1194
    ActiveWindow.ScrollRow = 1204
    ActiveWindow.ScrollRow = 1214
    ActiveWindow.ScrollRow = 1222
    ActiveWindow.ScrollRow = 1228
    ActiveWindow.ScrollRow = 1234
    ActiveWindow.ScrollRow = 1238
    ActiveWindow.ScrollRow = 1240
    ActiveWindow.ScrollRow = 1246
    ActiveWindow.ScrollRow = 1250
    ActiveWindow.ScrollRow = 1254
    ActiveWindow.ScrollRow = 1259
    ActiveWindow.ScrollRow = 1269
    ActiveWindow.ScrollRow = 1281
    ActiveWindow.ScrollRow = 1287
    ActiveWindow.ScrollRow = 1289
    ActiveWindow.ScrollRow = 1293
    ActiveWindow.ScrollRow = 1295
    ActiveWindow.ScrollRow = 1297
    ActiveWindow.ScrollRow = 1299
    ActiveWindow.ScrollRow = 1301
    ActiveWindow.ScrollRow = 1303
    ActiveWindow.ScrollRow = 1305
    ActiveWindow.ScrollRow = 1307
    ActiveWindow.ScrollRow = 1309
    ActiveWindow.ScrollRow = 1311
    ActiveWindow.ScrollRow = 1317
    ActiveWindow.ScrollRow = 1320
    ActiveWindow.ScrollRow = 1324
    ActiveWindow.ScrollRow = 1328
    ActiveWindow.ScrollRow = 1330
    ActiveWindow.ScrollRow = 1332
    ActiveWindow.ScrollRow = 1334
    ActiveWindow.ScrollRow = 1336
    ActiveWindow.ScrollRow = 1338
    ActiveWindow.ScrollRow = 1340
    ActiveWindow.ScrollRow = 1344
    ActiveWindow.ScrollRow = 1352
    ActiveWindow.ScrollRow = 1356
    ActiveWindow.ScrollRow = 1358
    ActiveWindow.ScrollRow = 1360
    ActiveWindow.ScrollRow = 1362
    ActiveWindow.ScrollRow = 1364
    ActiveWindow.ScrollRow = 1366
    ActiveWindow.ScrollRow = 1368
    ActiveWindow.ScrollRow = 1376
    ActiveWindow.ScrollRow = 1378
    ActiveWindow.ScrollRow = 1380
    ActiveWindow.ScrollRow = 1382
    ActiveWindow.ScrollRow = 1383
    ActiveWindow.ScrollRow = 1385
    ActiveWindow.ScrollRow = 1389
    ActiveWindow.ScrollRow = 1397
    ActiveWindow.ScrollRow = 1399
    ActiveWindow.ScrollRow = 1401
    ActiveWindow.ScrollRow = 1403
    ActiveWindow.ScrollRow = 1405
    ActiveWindow.ScrollRow = 1407
    ActiveWindow.ScrollRow = 1409
    Range("N2:N1440").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("N1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$N$5000").AutoFilter Field:=14, Criteria1:="=FALSO" _
        , Operator:=xlOr, Criteria2:="="
    Row("3:5000").Select
    
    ' Selecionar a linha após nome "EQUIPE" até a última célula preenchida da coluna A

  
    Selection.Delete Shift:=xlUp
    
    ActiveSheet.Range("$A$1:$N$2000").AutoFilter Field:=14
    
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    Cells.Select
    Cells.EntireColumn.AutoFit
    Application.ScreenUpdating = True
    
    
End Sub

silvajmp

 
Postado : 09/01/2015 7:15 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

Para ultima linha da guia, tente...

Dim lastRow As Long

    lastRow = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
    
    Range("N2:N" & lasRow).Select

Att

 
Postado : 09/01/2015 7:37 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Ve se ajuda:

Sub arrumar_GT()

Application.ScreenUpdating = False

Dim EQUIPE  As String
Dim i       As Long
Dim UL      As Long

Rows("1:11").Delete
Columns(1).Insert

Cells(1, "A").Value2 = "EQUIPE:"
Cells(1, "M").Value2 = "Prevista"

UL = Cells(Rows.Count, 2).End(xlUp).Row

For i = 2 To UL
    If Cells(i, "B").Value2 = "EQUIPE:" Then
        EQUIPE = Cells(i, "C").Value2
        Rows(i).Delete
    End If
    
    If Cells(i, "E").Value2 = "" _
    Or Cells(i, "E").Value2 = "Eqpto" Then
        Rows(i).Delete
        i = i - 1
    Else
        Cells(i, "A").Value2 = EQUIPE
        Range(Cells(i, "K"), Cells(i, "M")).Value2 = Range(Cells(i, "I"), Cells(i, "K")).Value2
        Cells(i, "J").Value2 = Cells(i + 1, "C").Value2
        Cells(i, "I").ClearContents
        Range(Cells(i, "D"), Cells(i, "G")).Value2 = Range(Cells(i, "C"), Cells(i, "F")).Value2
        Cells(i, "C").Value2 = Cells(i + 1, "B").Value2 & Cells(i + 2, "B").Value2
        Rows(i + 1 & ":" & i + 2).Delete
    End If
    
    UL = Cells(Rows.Count, 2).End(xlUp).Row
    If i + 1 >= UL Then Exit For
Next i

Range(Cells(1, 1), Cells(UL, "M")).ClearFormats
Range(Cells(1, 1), Cells(1, "M")).Font.Bold = True
Range(Cells(1, 1), Cells(UL, 1)).Font.Bold = True
With Range(Cells(1, 1), Cells(UL, "M")).Font
    .Name = "Arial"
    .Size = 7
End With
Range(Cells(2, "F"), Cells(UL, "I")).NumberFormat = "dd/mm"
Range(Cells(1, 1), Cells(UL, "M")).HorizontalAlignment = xlCenter
Range(Cells(1, 1), Cells(UL, 1)).HorizontalAlignment = xlLeft
Range(Cells(1, 3), Cells(UL, 3)).HorizontalAlignment = xlLeft
Range(Cells(1, 1), Cells(UL, "M")).Columns.AutoFit

End Sub
 
Postado : 09/01/2015 10:34 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Gilmar bom dia, obrigado por me atender, mas preciso de mais favor, se você reparar quando o texto e muito grande a exportação do sistema reparte a descrição em 2 linhas ou até em mais, e após o término da descrição vem outro número de ordem de serviço, a macro atual esta concatenando os números das ordens de serviços junto com as descrições das atividades, preciso que venha somente a descrição.

        Cells(i, "C").Value2 = Cells(i + 1, "B").Value2 & Cells(i + 2, "B").Value2
        Rows(i + 1 & ":" & i + 2).Delete

silvajmp

 
Postado : 12/01/2015 6:05 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Silva, pelo que percebi (não olhei linha por linha), o modelo que vc postou sempre tem 2 linhas para a descrição.

Com isso, não dá pra saber como tratar as informações com variações de linhas. Seria bom ter um exemplo com casos com 1 linha, 2 linhas e 3 linhas, dai eu posso ajustar o código.

 
Postado : 12/01/2015 7:39 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Gilmar blz, estou enviando um relatório com 10513 linhas desorganizadas de exemplo com descrições com 1, 2 e 3 linhas.

silvajmp

 
Postado : 12/01/2015 8:51 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

:roll: Olá Pessoal do fórum, na postagem anterior solicitei mais uma ajuda de vocês, na exportação do relatório do sistema para Excel, quando a descrição da atividade e muito grande, a exportação divide a descrição 1, 2 ou 3 linhas, preciso que a macro concatene somente a descrição, outra coisa seria que o relatório na macro postada anterior não esta organizando até o fim do relatório desorganizado.

:D silvajmp

 
Postado : 14/01/2015 6:31 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Gilmar, verifiquei a macro determinando ponto de interrupção de execução e colocando as telas Vba e Excel paralelas para visualizar a macro atuando, e constatei que a macro chega em uma determinada linhas ou por outro motivo que eu não sei, a macro esta deletando as linhas que ainda consta dados a serem organizados deixando a organização parcial.
Eu acho que e alguma coisa nestas linhas do código.

       Rows(i + 1 & ":" & i + 2).Delete
    End If
    
    UL = Cells(Rows.Count, 2).End(xlUp).Row
    If i + 1 >= UL Then Exit For
Next i

silvajmp

 
Postado : 15/01/2015 8:31 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá pessoal consegui resolver o meu problema com a macro abaixo:

Option Explicit
Private module

Sub arrumar()
Dim shtOrigem   As Worksheet
Dim shtDestino  As Worksheet
Dim lngUltLinha As Long
Dim i, x, y     As Integer
Dim strEquipe   As String
Dim strTexto    As String
Dim fCheck      As Boolean

'Desabilitando atualização de tela
Application.ScreenUpdating = False

'Desabilitando os calculos automaticos
Application.Calculation = xlCalculationManual

'Estabelecendo quais as planilhas serão utilizadas
'Caso altere o nome das planilha será necessario alterar os nomes entre aspas abaixo
Set shtOrigem = ThisWorkbook.Sheets("Rel_Ori")
Set shtDestino = ThisWorkbook.Sheets("Rel_Org")

'Limpando a area de dados antes de iniciar o tratamento de dados
shtDestino.Range("A2:M1048576").ClearContents

'Capturando a ultima linha preenchida com base na planilha original e coluna A
lngUltLinha = shtOrigem.Range("A1048576").End(xlUp).Row

'Variavel que será incrementada indicando a quantidade de registros e/ou linhas
i = 2

'Formatando as colunas para texto
shtDestino.Range("F2:I1048576").NumberFormat = "@"

'Iniciando a leitura de dados por repetição até a ultima linha preenchida
For x = 1 To lngUltLinha
    With shtOrigem
        If .Cells(x, 1).Value = "EQUIPE:" Then _
            strEquipe = .Cells(x, 2).Value
        
        If VBA.Mid(VBA.Trim(.Cells(x, 1).Value), 6, 1) = "-" Then
            shtDestino.Cells(i, 1).Value = strEquipe
            shtDestino.Cells(i, 2).Value = .Cells(x, 1).Value
            
            'Parte do codigo que existe a duvida utilizando seu criterio logico
            strTexto = .Cells(x + 1, 1).Value
            fCheck = False
            y = 2
            'Executando um laço de repetição
            Do Until fCheck 'verificando quando a variavel será verdadeira
                'Verificando se a proxima linha entra em alguma das relações de fim de relatorio
                If VBA.Left(VBA.Trim(.Cells(x + y, 1).Value), 6) = "FMIREL" _
                    Or VBA.Left(VBA.Right(VBA.Trim(.Cells(x + y, 1).Value), 3), 1) = "," _
                    Or VBA.Mid(VBA.Trim(.Cells(x + y, 1).Value), 6, 1) = "-" Then
                        fCheck = True
                Else
                    strTexto = strTexto & .Cells(x + y, 1).Value
                End If
                y = y + 1
            Loop
            
            shtDestino.Cells(i, 3).Value = strTexto
            '*******************************************************************
            shtDestino.Cells(i, 4).Value = .Cells(x, 2).Value
            shtDestino.Cells(i, 5).Value = .Cells(x, 3).Value
            shtDestino.Cells(i, 6).Value = .Cells(x, 4).Value
            shtDestino.Cells(i, 7).Value = .Cells(x, 5).Value
            shtDestino.Cells(i, 8).Value = .Cells(x, 6).Value
            shtDestino.Cells(i, 9).Value = .Cells(x, 7).Value
            shtDestino.Cells(i, 10).Value = .Cells(x + 1, 2).Value
            
            On Error Resume Next
                shtDestino.Cells(i, 11).Value = VBA.CDbl(.Cells(x, 8).Value)
                shtDestino.Cells(i, 12).Value = VBA.CDbl(.Cells(x, 9).Value)
                shtDestino.Cells(i, 13).Value = VBA.CDbl(.Cells(x, 10).Value)
            On Error GoTo 0
            
            'Incremento de linha
            i = i + 1
        End If
    End With
Next

MsgBox "Finalizado!"

'Habilitando atualização de tela
Application.ScreenUpdating = True

'Habilitando os calculos automaticos
Application.Calculation = xlCalculationAutomatic

Set shtOrigem = Nothing
Set shtDestino = Nothing
End Sub

silvajmp

 
Postado : 02/02/2015 11:36 am