Excel - ordenar

 
Vista:
sin imagen de perfil

ordenar

Publicado por cruz (4 intervenciones) el 15/03/2017 19:04:53
Hola buen dia
Me podrian ayudar a realizar una pequeña macro por favor usando excel o VBA
Necesito saber el valor de P. La macro debe obtener el valor maximo de "q" (ejemplo de este caso lo marque con rojo, no siempre estara en esta fila), despues necesito saber que valor de P corresponde a valor de "q"maximo-1 y colocarlo en su respectiva casilla. Estos valores son de ejemplo, las filas pueden variar, las columnas estaran fijas.
Adjunte una imagen del problema planteado
Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 112
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

ordenar

Publicado por José Luis (46 intervenciones) el 16/03/2017 17:41:09
Hola,

Al menos yo tengo algunas dudas abiertas, por ejemplo para que sirve la columna con la R?

Cuando encuentre el valor máximo, le resto una unidad o sea 1, pero el valor lo compararé en que exactitud?

Si en el ejemplo 40.945864 es el máximo menos 1 va a ser 39.945864 y el valor que tu pones como ejemplo da 39.945, o busco uno exactamente menos una unidad o sea 1, o el más próximo anterior si es que no encuentro uno exactamente igual?

Si tuviera un valor como 39.945865 no podría considerarse como el máximo menos 1?


Saludos
José Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

ordenar

Publicado por cruz (4 intervenciones) el 16/03/2017 18:21:20
Hola, la columna R la puse solo para referencia, se puede ignorar. Basicamente lo que quiero es que la macro me ponga en una celda el valor de P que corresponde al valor de "q maximo -1"
Gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 112
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

ordenar

Publicado por José Luis (46 intervenciones) el 16/03/2017 20:34:25
Hola,

Creo que sin necesidad de macro puedes hacer =buscarv(min(rango celdas)-1,rango$:rango$,2,0)

pero tienes que poner la celda B primero y la celda A después .

La macro mas o menos debería de quedar así:

Dejando las celdas a como las pusiste en la imagen,

Al pulsar el botón para ejecutar la macro o con un shortcut key.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub prueba()
    Row_B = 2
    I = Row_B
    Max_Q = 0
    While Not IsEmpty(Range("B" & I).Value)
        If Range("B" & I).Value > Max_Q Then
            Max_Q = Range("B" & I).Value
        End If
        I = I + 1
    Wend
    Max_Q = Max_Q - 1
    Valor_P = 0
    Diferencia_Minima = Max_Q + 1
    For j = Row_B To I - 1
        If Range("B" & j).Value <= Max_Q Then
            If (Max_Q - Range("B" & j).Value) < Diferencia_Minima Then
                Valor_P = Range("A" & j).Value
                Diferencia_Minima = (Max_Q - Range("B" & j).Value)
            End If
        End If
    Next j
    'Aqui debes indicar en donde se alojará el valor.
    Range("E3").Value = Valor_P
    Range("E4").Value = Max_Q
End Sub

Espero que comentes y sirva.

Saludos
José Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

ordenar

Publicado por cruz (4 intervenciones) el 17/03/2017 18:56:53
Hola Jose Luis gracias por tu ayuda. El codigo que me pasaste funciona, sabes como le puedo hacer para agregar que haga la operacion en ciertos rangos?, te adjunto el archivo en excel para ver si me puedes ayudar.
De antemano muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 112
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

ordenar

Publicado por José Luis (46 intervenciones) el 17/03/2017 19:31:36
Hola,

Para ellos tendrías que agregar una columna mas para indicar por ejemplo el fin del grupo y adaptar el código para que hasta allí haga el calculo nada mas.

Saludos
José Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

ordenar

Publicado por cruz (4 intervenciones) el 17/03/2017 22:30:59
Intente poner el rango en estas instrucciones pero me marca error
1
2
3
4
5
Row_B = 2
I = Row_B
Max_Q = 0
While Not IsEmpty(Range("B2:B6" & I).Value)
    If Range("B2:B6" & I).Value > Max_Q Then
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 112
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

ordenar

Publicado por José Luis (46 intervenciones) el 17/03/2017 23:39:22
No sé que es lo que pretendes con ese código pero el rango especificado "B2:B6" & I es un error porque inicialmente seria B2:B62 y estaría fijo.

O es una celda fija "B2" o es una celda rango "B2:B6" o es una celda fija con parámetro "B" & I ó un rango celda parámetro "B"& I &":B" & J

No sé que quisiste hacer....

Además como te dije pusieras un delimitador ya sea en la columna C en donde está la "r" o la Columna D me refiero como delimitador un texto que te avise que es fin de grupo por ejemplo:
C6 = "Fin de Grupo"
C11 = "Fin de Grupo"
C16 = "Fin de Grupo"

He modificado el código para que funcione con lo comentado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Sub prueba()
    Row_B = 2
    While Not IsEmpty(Range("B" & I).Value)
        I = Row_B
        Max_Q = 0
        Flag = 0
        While Not Flag
            If Range("B" & I).Value > Max_Q Then
                Max_Q = Range("B" & I).Value
            End If
            If Range("C" & I).Value = "Fin de Grupo" Then
                Flag = 1
            End If
            I = I + 1
        Wend
        Max_Q = Max_Q - 1
        Valor_P = 0
        Diferencia_Minima = Max_Q + 1
        For j = Row_B To I - 1
            If Range("B" & j).Value <= Max_Q Then
                If (Max_Q - Range("B" & j).Value) < Diferencia_Minima Then
                    Valor_P = Range("A" & j).Value
                    Diferencia_Minima = (Max_Q - Range("B" & j).Value)
                End If
            End If
        Next j
        'Aqui debes indicar en donde se alojará el valor.
        Range("E" & Row_B).Value = Valor_P
        Range("E" & Row_B + 1).Value = Max_Q
        Row_B = I
    Wend
End Sub

Esto colocaría en la Celda E2, E3 el valor de P y MaxQ, E11, E12 el valor de P y Max Q, E16, E17 el valor de P y MaxQ

Nota: Veo posible error de no encontrar una P si no hay un valor menor de MaxQ - 1



Espero te sirva y comentes.

Saludos
José Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar