La función obtiene el siguiente número consecutivo en una secuencia numérica al recorrer las celdas de un rango, determinar el valor máximo existente, incrementarlo en 1 y formatearlo a 3 dígitos. La función toma como parámetro el rango a analizar, extrae la celda inicial y final, recorre los valores numéricos, almacena el máximo, le suma 1 y devuelve el resultado formateado.
Macro función que nos obtiene el siguiente número consecutivo
1. Macro Función que nos obtiene el siguiente número
consecutivo
Vamos a hacer a continuación una función que nos determine el siguiente número consecutivo en
un campo llave dentro de una tabla de Excel. Supongamos que tenemos la siguiente tabla.
Lo que va hacer la función es obtener el siguiente número consecutivo, que en este caso seria
“028”. Tenemos que buscar dentro de la primera columna el valor máximo y luego agregarle la
unidad y luego convertirlo en texto.
2. La función va a contener como parámetro el rango donde están las claves existentes que van a ser
recorridas para determinar cuál de ellas es la mayor, por lo tanto la declaramos asi:
Public Function siguiente_consecutivo(ByVal rango As String) As String
End function
A continuación declaramos las variables que vamos a necesitar
Dim dvalormaximo As Integer 'Se usa para almacenar el valor máximo
Dim valor_actual As Integer 'Se usa para almacenar el valor del elemento actual
Dim renglon_inicial As Integer 'Almacena la fila donde empieza la revisión
Dim renglon_final As Integer ' Almacena la fila donde termina la revisión
Dim dcolumna As Integer 'Almacena la columna donde se hace la revisión
Dim i As Integer 'Contador del ciclo de recorrido
Dim posicion As Byte 'Posición del separador de rango
Dim celda_inicial As String 'Almacena la celda de inicio de revisión
Dim celda_final As String 'Almacena la celda de fin de revisión
Dim longitud_rango As Byte 'Almacena el número de caracteres del rango
Ahora vamos a separar del rango la celda inicial y la celda final determinando la ubicación del
separador de rango, que en este caso son los dos puntos.
'Obtener la posicion del separador de rango (:)
posicion = InStr(1, rango, ":")
'Longitud del rango
longitud_rango = Len(rango)
'Celda inicial del rango como referencia
celda_inicial = Left(rango, posicion - 1)
'Celda final del rango como refencia
celda_final = Right(rango, longitud_rango - posicion)
'Obtenemos el numero de fila de la celda inicial
numero_inicial = Range(celda_inicial).Row
'Obtenemos el número de fila de la celda final
numero_final = Range(celda_final).Row
'Obtenemos el numero de columna donde esta la lista
dcolumna = Range(celda_inicial).Column
Inicializamos la variable que almacena el valor maximo en 0
dvalor_maximo = 0
3. Hacemos el recorrido de cada una de las claves evaluando si es el máximo valor.
For i = numero_inicial To numero_final
valor_actual = Val(Cells(i, dcolumna).Value)
If valor_actual > dvalor_maximo Then
dvalor_maximo = valor_actual
End If
Next i
Después de hacer el recorrido el valor máximo estará almacenado en la variable dvalor_maximo,
el cual le aumentamos una unidad y lo convertimos en texto a 3 posiciones y lo asignamos al
resultado de la función
siguiente_consecutivo = Format(dvalor_maximo + 1, "000")
De esta manera el código completo queda como sigue:
Public Function siguiente_consecutivo(ByVal rango As String) As String
Dim dvalormaximo As Integer 'Se usa para almacenar el valor maximo
Dim valor_actual As Integer 'Se usa para almacenar el valor del elemento actual
Dim renglon_inicial As Integer 'Almacena la fila donde empieza la revision
Dim renglon_final As Integer ' Almacena la fila donde termina la revision
Dim dcolumna As Integer 'Almacena la columna donde se hace la revision
Dim i As Integer 'Contador del cliclo de recorrido
Dim posicion As Byte 'Posicion del separador de rango
Dim celda_inicial As String 'Almacena la celda de inicio de revision
Dim celda_final As String 'Almacena la celda de fin de revision
Dim longitud_rango As Byte 'Almacena el numero de caracteres del rango
posicion = InStr(1, rango, ":")
longitud_rango = Len(rango)
celda_inicial = Left(rango, posicion - 1)
celda_final = Right(rango, longitud_rango - posicion)
numero_inicial = Range(celda_inicial).Row
numero_final = Range(celda_final).Row
dcolumna = Range(celda_inicial).Column
dvalor_maximo = 0
For i = numero_inicial To numero_final
valor_actual = Val(Cells(i, dcolumna).Value)
If valor_actual > dvalor_maximo Then
dvalor_maximo = valor_actual
4. End If
Next i
siguiente_consecutivo = Format(dvalor_maximo + 1, "000")
End Function
Ahora solo falta que la usemos en alguna celda como sigue:
=siguiente_consecutivo(“A3:A29”)
Fuente http://sintad.com.mx/macros%20excel/index.html