Crear macro para recorrer columna hasta encontrar la ultima celda que disminuye

Estoy intentando crear una macro para que recorra una columna hasta que me encuentre la ultima celda cuyo valor sea menor con respecto a la anterior

En este caso quiero que recorra por ejemplo, la columna B y que me seleccione, o me devuelva, la celda B141 que tiene valor 3460 y es menor a su anterior que es 85050.

1 Respuesta

Respuesta
1

Entra al Editor, inserta un módulo y allí copia el siguiente código:

Sub buscaMenor()
'x Elsamatilde
'guarda el contenido de la primer celda (B9)
dato = [B9]
'recorre col B a partir de fila 10 hasta el final de datos
[B10].Select
While ActiveCell <> "" And x = 0
    If ActiveCell >= dato Then
        'guarda el nuevo valor
        dato = ActiveCell.Value
    Else
        'marca para cancelar
        x = 1
    End If
    ActiveCell.Offset(1, 0).Select
Wend
'si hay marca encontró un valor menor
If x = 1 Then
    MsgBox "El valor menor se encuentra en fila " & ActiveCell.Row - 1
Else
    MsgBox "No se encontraron valores menores"
End If
End Sub

 Para ejecutar una macro hay varias opciones: desde el mismo Editor, desde menú Macros, con un botón o atajo de teclado.... estos temas los tengo explicados en la sección Macros de mi sitio que dejo al pie.

Hola Elsa, Gracias por responder ran tapido!
Con tu código tengo el siguiente problema, eso me devuelve el primer menor que encuentra, pero yo necesito el ultimo, eso no lo había explicado perdona, la cosa es que hay varios menores por que la cuenta se va reiniciando pero necesito que me devuelva el ultimo menor! El primero esta en la celda 44 y tu programa funcionaba para ese aspecto

Realmente creo que seria más sencillo hacerlo al revés, empezar por la ultima celda de la columna y recorrerlo hacia arriba hasta encontrar el primero valor mayor a la ultima, quiero decir la ultima es 17000 más o menos, conforme vas subiendo disminuye, hasta que en una celda salta a 85000, ¿e igual así seria más sencillo no?

Eso pensé pero ya me había retirado del equipo cuando enviaste las aclaraciones.

No puedo enviarte el código pero los cambios serían:

Seleccionar la última celda con datos (*)

Guardar ese dato

El while irá desde finx hasta 9

El offset (-1,0)

Y se compara por >

Sí podes armarlo bien... sino espérame.

Sdos!

Yo tampoco tengo ya el ordenador aquí, gracias por la respuesta, si mañana me puedes enviar el código perfecto, Gracias y un saludo!

Sub buscaUltimoMenor()
'x Elsamatilde
'fin de rango
finx = Range("B" & Rows.Count).End(xlUp).Row
'recorre col B a partir de última fila hasta la 9
Range("B" & finx).Select
'guarda el contenido de la ultima celda
dato = ActiveCell.Value
'recorre la col B hasta llegar a fila 9
For x = finx - 1 To 9 Step -1    '(*)
    If Range("B" & x) > dato Then
        MsgBox "El valor menor se encuentra en fila " & x + 1
        Exit For
    End If
Next x
'si se llegó hasta fila 8   '(*)
If x = 8 Then MsgBox "Fin del proceso, no se encontraron cifras mayores."
End Sub

Según la imagen el primer dato empieza en fila 9... ajusta las líneas marcadas con (*) si así no fuera.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas