Necesito una macro que detecte el valor máximo, y a partir de esa celda valide cuando suba el valor en todo un rango

El día de hoy vengo al foro para preguntarles por una macro, yo soy un usuario que apenas voy empezando en VBA y me ha causado dolores de cabeza el tratar de encontrar la solución al siguiente tema:

Necesito una Macro que valide un rango y detecte el valor máximo.

Que la macro siga validando el rango desde el valor máximo que detecto y cada vez que suba el valor me de en otra celda el valor que subió.

Lo necesito porque es para manejo de inventario y quiero saber que cantidad queda cada vez que entre material.

1 respuesta

Respuesta
2

Se si te entendí muy bien pero prueba esta macro o ve si es lo que necesitas:

Sub BuscarMayor()
Dim i As Long
Dim a As Long
Dim ValorMaximo As Integer
Dim ValorComparar As Integer
Dim ValorEncontrado As Integer
Dim l As Long

Fila = Range("A65000").End(xlUp).Row
For i = 1 To Fila
ValorMaximo = Hoja1.Range("A" & i).Value
For a = 1 To Fila
ValorComparar = Hoja1.Range("A" & a + 1).Value
If ValorMaximo < ValorComparar Then
ValorEncontrado = ValorComparar - ValorComparar
End If
Next
Next
Hoja1.Range("B1").Value = ValorEncontrado
End Sub

Hola Ricardo, sinceramente Muchas gracias, la manera que usas si es la correcta, y discúlpame te molesté otra vez, pero no comenté que los valores a evaluar están en verticales es decir en un rango de O2:AS2. Yo intente modificar los rangos de acuerdo al workbook que tengo y quedo de la siguiente manera pero marca error. Te dejo los datos abajo

Lo resaltado en negro es lo que cambie en tu código:

Sub BuscarMayor()
Dim i As Long
Dim a As Long
Dim ValorMaximo As Integer
Dim ValorComparar As Integer
Dim ValorEncontrado As Integer
Dim l As Long

Fila = Range("O65000").End(xlToRight).Row
For i = 1 To Fila
ValorMaximo = Worksheets("Hoja1").Range("O" & i).Value
For a = 1 To Fila
ValorComparar = Worksheets("Hoja1").Range("O" & a + 1).Value
If ValorMaximo < ValorComparar Then
ValorEncontrado = ValorComparar - ValorComparar
End If
Next
Next
Worksheets("Hoja1").Range("AU2").Value = ValorEncontrado
End Sub

Imagen del depurador (marco error que dice "No coinciden los tipos")

Imagen del archivo: 

Hola Ricardo, he usado la macro tal cual lo pusiste y el valor que me esta dando es 0, he adjuntado otra foto la cual me ayudara para explicarme.

De la foto lo que busco es que la macro valide los valores de C2:T2 Y  en la celda U2 ponga la ultima cantidad que entro, y después pase a hacer la misma validación en C3:T3 Y ponga la ultima cantidad que entro en U3.

Espero me pueda ayudar, muchísimas gracias

En este caso debemos usar la forma Cells para recorrer mejor hacia la derecha, te da 0 por que estas restando la misma cantidad; Detallemos, ValorMaximo va a ser el primer valor es decir el que esta en la A1 y Valor a Comparar es B1, se realiza una comparación y luego si se cumple el criterio se restan lo valores creo que fue lo que te entendí, de igual manera el criterio o la condición se la puedes modificar en el IF ya que sabes cual es cada valor, y en la ultima linea tu mismo podrás colocar donde quieres el resultado. Espero te ayude no olvides Valorar la respuesta amigo por favor.

Sub BuscarMayor()
Dim i As Long
Dim a As Long
Dim ValorMaximo As Double
Dim ValorComparar As Double
Dim ValorEncontrado As Double
Dim l As Long

Fila = Worksheets("Hoja1").Range("A1").End(xlToRight).Column
For i = 1 To Fila
ValorMaximo = Worksheets("Hoja1").Cells(1, i)
For a = 1 To Fila
ValorComparar = Worksheets("Hoja1").Hoja1.Cells(1, a + 1)
If ValorMaximo < ValorComparar Then
ValorEncontrado = ValorComparar - ValorEncontrado
End If
Next
Next
Worksheets("Hoja1").Range("AU2").Value = ValorEncontrado
End Sub

¡Gracias! Mi estimado Ricardo, en efecto, la condicionante ya se puede modificar después.

Mira que al correr la macro me manda un error de ejecución 13: no coinciden los tipos. Y la línea que resalta es la siguiente:

ValorMaximo = Worksheets("Hoja1").Cells(1, i)

Yo aprecio mucho la ayuda y ya he valorado tus respuestas con excelente porque definitivamente el punto de inicio que yo tenía y donde estamos actualmente es un gran avance.

Espero poder contar con tu ayuda nuevamente para saber porque esta marcando ese error, ya he intentado quitando worksheets y poniendo solo Hoja1.Cells(1, i) pero continua marcando eso.

En lo que pueda y este a mi alcance te ayudare, este error que te marca es e siguiente, yo coloque como defecto la celda A te explico como es la estructura del Cells, el primer numero va referido a la celda que deseas recorrer y el segundo que en este caso es el que se incremente por el For es la columna que va recorriendo, en tu caso la Celda A tiene datos alfabéticos y la variable ValorMaximo es de tipo Double, debes cambiar la fila donde deseas que recorra la macro, si deseas que sea la fila 1 colocas 1 si es la dos colocas 2 y así de acuerdo a tus necesidades, en en tu caso y por lo que veo en la imagen es la fila 2 y 3 tendrías que crear dos macros para recorrer las dos filas quedaría así:

ValorMaximo = Worksheets("Hoja1"). Cells(2, i) - Si es la fila 2

ValorMaximo = Worksheets("Hoja1"). Cells(3, i) - Si es la Fila 3

De igual manera la variable ValorComparar:

ValorComparar = Worksheets("Hoja1").Hoja1.Cells(2, a + 1) - Si es la Fila 2

ValorComparar = Worksheets("Hoja1").Hoja1.Cells(3, a + 1) - Si es la Fila 3

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas