Valores auto-numéricos al insertar filas

Tengo un archivo de excel al cual es una lista de personas, lo primero que me exponen es que si se ingresa un nuevo registro de una persona al final del ultimo valor... El valor del numero correspondiente de la fila sea generado automáticamente a lo cual pensé en incorporar la función CONTARA y listo solo copio el valor con el relleno y se va generando el valor incremental, pero luego me indican que quieren que el orden de los listados sea por orden alfabético, entonces es aplicar un filtro después de ingresado el valor del registro, después me exponen que si la persona que va a ingresar el nuevo registro por costumbre hace la operación de insertar fila en un lado específico se genere de igual manera el numero incremental en la columna y ordene por orden alfabetico, se que esto es una macro pero no tengo experiencia.

2 respuestas

Respuesta
1

Ya recibí tu libro. No finalices aún hasta que te lo envíe con la solución a tu problema.

Sdos

Elsa

Muchas gracias Elsa :) 

Bien, viendo el formato de tu hoja le hice los ajustes necesarios a la macro de Miguel, quedando así:

Private Sub Worksheet_Change(ByVal Target As Range)
'x Miguel Guzmán - comentada y ajustada x Elsamatilde
'se ejecuta al realizar cambios en col C (nombres)
If Target.Column <> 3 Then Exit Sub
'si se modifica un rango no se ejecuta
If Target.Count > 1 Then Exit Sub
'si se borra un nombre no se ejecuta
If Target.Value = "" Then Exit Sub
'si se trata de un nombre nuevo se coloca el correlativo y el pto.
If Target.Offset(0, -2) = "" Then
    Cells(ActiveCell.Row, 1).Value = Application.Max([A:A]) + 1
    Cells(ActiveCell.Row, 2).Value = "."
End If
'se selecciona el rango sin los títulos para reordenar
    ActiveCell.CurrentRegion.Select
    Selection.Offset(2, 0).Select
    Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'opcional: seleccionar alguna celda
Range("C2").select
End Sub

Los controles iniciales son para que no se ejecute al tratar de borrar 1 o varios nombres en col C.

Al modificar un nombre no se registra nuevo número, por lo que pasa directamente al proceso de ordenamiento.

Sdos!

Así quedaría la macro si necesitas 'actualizar' los nros en col A:

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'se ejecuta al realizar cambios en col C (nombres)
If Target.Column <> 3 Then Exit Sub
'si se modifica un rango no se ejecuta
If Target.Count > 1 Then Exit Sub
'si se borra un nombre no se ejecuta
If Target.Value = "" Then Exit Sub
'si se trata de un nombre nuevo se coloca el correlativo y el pto.
If Target.Offset(0, -2) = "" Then
    Cells(ActiveCell.Row, 2).Value = "."
End If
'se selecciona el rango sin los títulos para reordenar
    ActiveCell.CurrentRegion.Select
    Selection.Offset(2, 0).Select
    Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'actualiza numeración
Range("A3").Value = 1
Range("A3:A" & Range("C" & Rows.Count).End(xlUp).Row).Select
    Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
        Step:=1, Trend:=False
'opcional: seleccionar alguna celda
Range("C2").Select
End Sub

Debes colocar solo 1 de las 2 macros, dependiendo de si debe o no actualizar los valores numéricos de cada registro.

Sdos!

Respuesta
1

Puedes añadir esta macro en el editor VBA en la hoja donde tengas la lista:

Private Sub worksheet_change(ByVal Target As Range)
If Target.Column = 2 Then
    Cells(ActiveCell.Row, 1).Value = Application.Max([A:A]) + 1
    ActiveCell.CurrentRegion.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End If
End Sub

hecha para el ejemplo siguiente:

Al añadir un nombre en la columna B (o col. 2) le añade automáticamente el máximo valor +1 del código en la misma fila columna A (o col. 1) y ordena por orden alfabetico de B.

Por ejemplo añado "Cristina" y quedaría así:

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas