Notifications
Clear all

Como criar um Loop para executar macro linha a linha

5 Posts
3 Usuários
0 Reactions
2,371 Visualizações
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Olá a todos,
Alguém saberia dizer como criar um loop que execute uma macro linha a linha?
Trabalho com uma planilha que tem muitas linhas (mais de 1500) com números aleatórios.
Criei uma macro que os coloca em ordem, porém preciso aciona-la manualmente linha após linha. Haveria uma maneira de criar uma rotina que vá descendo e organizando e só parar quando a célula ativa for vazia?

Mando um exemplo em anexo. Para executar a macro eu seleciono a alguma célula da coluna "A" uso o atalho Ctrl+y.

Agradeço desde já a ajuda.

Ps. Essa é a macro que estou usando

Sub Organiza()
'Seleciona um intervalo com numeors desorganizados
'Cola na Plan2 transposto na vertical  e organiza do menor para o maior
'Em seguida seleciona os numeros ordenados e transpõe horizontalmente na célula ativada


Application.ScreenUpdating = False

    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("Plan2").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("Plan2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Plan2").Sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Plan2").Sort
        .SetRange Range("A1:A8")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    Range("A1:A8").Select
    Selection.Copy
    
    End With
    Sheets("Plan1").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
        
    ActiveCell.Offset(1, 0).Select
    
 
 Application.ScreenUpdating = True
End Sub

 
Postado : 19/09/2013 9:41 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Não entendi muito bem a tua planilha, mas incluí um loop no código:

Sub Organiza()
'Seleciona um intervalo com numeors desorganizados
'Cola na Plan2 transposto na vertical  e organiza do menor para o maior
'Em seguida seleciona os numeros ordenados e transpõe horizontalmente na célula ativada

Application.ScreenUpdating = False

Dim i

i = 1

Do While i < 5

    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("Plan2").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("Plan2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Plan2").Sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Plan2").Sort
        .SetRange Range("A1:A8")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    Range("A1:A8").Select
    Selection.Copy
    
    End With
    Sheets("Plan1").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
        
    ActiveCell.Offset(1, 0).Select
    
 i = i + 1
    
 Loop
 
 Application.ScreenUpdating = True
End Sub

Nesse caso, ela executa 5 vezes, que foi definido aqui

Do While i < 5

basta alterar para quantas vezes vc precisa.

PS: acredito que o pessoal que manja de VBA pode dar um trato no teu código

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 19/09/2013 10:42 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não pode ser na mesma planilha?

Sub OrdenaHorizontall()
'Determina qual a ultima linha com valores na coluna "A"
    lastrow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
    'Inicia o loop para ordenar linha a linha de coluna "A" a coluna "H"
    For i = 2 To lastrow
        Range("A" & i & ":H" & i).Select
        Selection.Sort Key1:=Range("A" & i), Order1:=xlAscending, Header:=xlGuess _
            , OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _
            DataOption1:=xlSortNormal
    Next
    End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 19/09/2013 12:50 pm
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Muito obrigado pela força gtsalikis.

 
Postado : 19/09/2013 1:05 pm
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Caraca Reinaldo, a macro varreu todas as minhas 3000 linhas e organizou tudo em menos de 10 segundos!
E ainda com bem menos linhas de programação.
Muito obrigado pela força, merece até uma rodada de cerveja.

Abraço.

 
Postado : 19/09/2013 1:08 pm