Notifications
Clear all

Macro para Auto Numerar

7 Posts
2 Usuários
0 Reactions
2,715 Visualizações
(@leandromattos)
Posts: 3
Active Member
Topic starter
 

Boa Tarde ^^

Estou tentando fazer uma macro para auto numerar uma coluna de acordo com quantas células estão preenchidas na coluna vizinha:

Até ai tudo bem, isso resolveria:

Sub macro_numera()
'
' macro_numera Macro
'
ActiveCell.FormulaR1C1 = "1"
Range("A3").Select
ActiveCell.FormulaR1C1 = "2"
Range("A2:A3").Select
Selection.AutoFill Destination:=Range("A2:A14"), Type:=xlFillDefault
Range("A2:A21").Select
ActiveWindow.SmallScroll Down:=6
End Sub

O problema é que nem todas as minhas tabelas tem o mesmo número de campos. E quando eu uso a macro em uma tabela com mais campos, por exemplo, acontece isso:

Eu sei que deixei especificado no código até a "A14", por isso só vai até "A14 "! rs .. mas como eu faço para a macro ir até a ultima célula preenchida da coluna vizinha??

Vou continuar tentando e conto com a galera do fórum para me ajudar nessa!
Vlw!! ^^

 
Postado : 08/11/2012 10:58 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Tenho quase certeza que não vai ficar nesta duvida, mas para Numerar a Coluna A de acordo com a Qde de Itens na Col B, utilize a rotina abaixo :

Sub Numera_ColA_Relativo_ColB()
    'Declaramos as Variaveis
    Dim sNumeros
    Dim sLinsB
    Dim nLinsA
    
    'Iniciamos a Variavel com Numero 1
    sNumeros = 1
    
    'CONTAMOS OS ITENS NA COLUNA B PLAN1
    sLinsB = Sheets("plan1").Cells(Rows.Count, 2).End(xlUp).Row
    
    'Loop para preencher as Linhas Col A conforme Qde Coluna B
    For nLinsA = 2 To sLinsB
        Sheets("plan1").Range("A" & nLinsA) = sNumeros
        sNumeros = sNumeros + 1
    Next

End Sub

[]s

 
Postado : 08/11/2012 5:39 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Outra opção..

Sub Auto_NumerAleVBA()
With Range("A2")
    .Formula = "=row(A1)"
    With .Resize(Range("B" & Rows.Count).End(xlUp).Row - 1)
        .FillDown
        .Copy
        .PasteSpecial xlPasteValues
        End With
    End With
    Application.CutCopyMode = False
End Sub

Att

 
Postado : 08/11/2012 5:57 pm
(@leandromattos)
Posts: 3
Active Member
Topic starter
 

Bom dia ^^
Muito Obrigado por responderem, agradeço muito Mauro Coutinho e Alexandre.

Sou iniciante em vba, embora tenha conceitos básicos bem estruturados sobre linguagens de programação.

Eu testei e tentei entender as duas macros. A do Mauro foi mais fácil para mim, embora a do Alexandre me ajudou a entender a instrução With, muito útil, vlw Alexandre ^^

Quero apenas tirar algumas pequenas dúvidas em relação a essa linha do código do Mauro:

sLinsB = Sheets("plan1").Cells(Rows.Count, 2).End(xlUp).Row

Deixa eu ver se entendi.."Cells(Rows.Count,2)" atribui a "sLinsB" o número total de linhas da coluna 2, então esse ".End(xlUp).Row " é um critério de parada, para ele ir até a ultima linha preenchida da coluna 2 ???

 
Postado : 09/11/2012 7:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Leandro, é isto mesmo, utilizando a instrução :
Cells(Rows.Count, 2).End(xlUp).Row - É contado a quantidade de linhas preenchidas na Coluna B (2), é o equivalente quando utilizamos as teclas de atalhos "END + SHIFT + SETA ABAIXO" onde é selecionado só as celulas que conteem dados, se utilizar o gravador de macros e ativar o conjunto de teclas citados será gravada esta instrução.

Alemda propria ajuda do Excel na Janela do VBA, você pode ar uma olhada no link abaixo, temos outros exemplos, como por exemplo pegar somente o último valor da coluna :

Obter Última Linha de uma Coluna
http://www.ambienteoffice.com.br/excel/ ... intervalo/

[]s

 
Postado : 09/11/2012 9:24 pm
(@leandromattos)
Posts: 3
Active Member
Topic starter
 

Entendi. Obrigado Mauro ^^

 
Postado : 12/11/2012 9:18 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Leandro, lembre se de agradecer (clicando na mãozinha), e marcar sua postagem como resolvido!!!
Marcar Tópico como Resolvido e Agradecimento
viewtopic.php?f=7&t=3784

Att

 
Postado : 12/11/2012 9:19 am