Excel - número sequencial fixo - Microsoft Office - Clube do Hardware
Por AdrianoKbcao, 24 de agosto de 2016 em Microsoft Office
Tenho uma planilha de controle de pedidos no excel onde eu gostaria que a cada nova linha digitada, fosse gerado automaticamente na coluna A um número sequencial único desse novo pedido.
Fazer isso é muito simples usando fórmulas como A1+1, LIN, MAIOR, etc. O problema é que se eu excluo uma linha (pedido cancelado) ou eu classifico a minha planilha por data ou produto, os números são alterados. embaralhados, ou dão erro. Eu gostaria que a partir do momento que o número é dado para aquela linha, ele continue fixo aos dados daquela linha, independente do que aconteça. E que como falei anteriormente, seja gerado automaticamente.
@AdrianoKbcao use a funcao max para criar o sequencial. Ex.:
Function GerarNumAutomatic() As Long
Set rngId = .Range(.Cells(2, 1), .Cells(.UsedRange.Rows.Count, 1))
GerarNumAutomatic = Application.WorksheetFunction.Max(rngId) + 1
ActiveCell.Value = GerarNumAutomatic
@Basole Obrigado pela resposta, mas não entendi onde devo colocar esse código.
Até hoje só usei linhas de códigos no excel em macros.
@AdrianoKbcao o codigo que postei é uma função GerarNumAutomatic() cria uma sequencia numerica somando +1 ao numero maior da coluna "A" . Cole esta funcão em um Standart Módulo.
E a macro abaixo no modulo da sua Respectiva planilha (Aba):
If Not Intersect(Target, Range("B2:B1000")) Is Nothing Then ' * ajuste o intervalo se necessario
Target.Offset(, -1).Value = GerarNumAutomatic
Eu tb. nao entendi em qual intervalo que vai utilizar, pois nao informou.
Mas na sugestao acima, ao digitar algo na coluna "B" a partir da 2ª linha a macro insere uma numeração automatica, na respectiva linha na coluna "A", automaticamente.
@Basole Entendi um pouco melhor agora. Obrigado.
Então eu fui no vba, inseri um novo módulo e colei o primeiro código que você passou, depois ainda no vba dei 2 clicks no nome da planilha que queria aplicar e inseri o segundo código que você passou e funcionou como você descreveu. Toda vez que insiro um valor na coluna B, ele insere um valor sequencial na coluna A. O problema é que toda vez que altero qualquer informação em qualquer coluna B, ele atualiza o valor na A daquela linha, então bagunça toda a numeração. Eu queria que uma vez que é dado um número em uma linha, ele não inserisse novamente. Talvez se desse pra colocar uma condição que ele só vai inserir o número se a coluna A estiver vazia ou algo do tipo. É possível?
@AdrianoKbcao sem ver sua planilha fica difícil dar uma sugestão melhor.
O que poderia fazer alterar a Coluna "B" do exemplo para uma outra coluna "Z" por exemplo, (tipo auxiliar) que voce coloca-se um "X" para a macro inserir a numeração.
Mas fiz algumas alterações conforme sua solicitação.
A macro so ira inserir a numeraçao se a respec. linha da coluna "A" estiver vazia.
Lr = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
If Not Intersect(Target, Range("B2:B" & Lr)) Is Nothing Then  ' * ajuste a coluna desejada
If Target.Offset(, -1).Value = "" Then Target.Offset(, -1).Value = GerarNumAutomatic
@Basole Valeu mais uma vez. Agora parece que ficou certinho como queria, obrigado.
Único detalhe que percebi agora é que para adicionar nova linha, fiz um macro que abre um formulário, e quando o usuário digita no formulário a informação da coluna B, o número não é gerado na coluna A, só se ele reinserir a informação. Consegue corrigir isso?