Como obtener el máximo de una columna respecto al nombre de otra columna en Excel (Max. Si)

Buenas Tardes por favor su ayuda, he revisado en varios foros pero aun no he podido solucionar la siguiente duda:
Necesito sacar el máximo valor de una columna”B” respecto al valor que se encuentra en una columna “A”, dándole un nombre a lo que necesito es como tener un max. Si, algo similar a la función sumar. Si pero en vez de sumar que me de el mayor valor. Siendo la salida la columna C, como ejemplo la siguiente tabla:

A B C

a 100 100

b 2 150

a 3 100

c 7 200

a 5 100

b 150 150

a 30 100

c 200 200

c 20 200

b 17 150


1 respuesta

Respuesta
1

No me acorde de nada en v 2007 como para eso, asi que te escribi una funcion personalizada.

Abre un libro ( en donde vayas a utilizar la funcion), presiona alt+f11 se te abrira el editor de vbasic

Inserta un modulo ( no de clase) y alli pegas esto:

Public Function maxsi(criterio As String, rango_criterios As Range, rango_valores As Range)
' recupera el maximo de una lista en funcion de su criterio de seleccion
Dim maximo As Double
Dim i As Long
Dim r As Range
'4c7569735f50
If Application.WorksheetFunction.CountA(rango_criterios) = 0 Then Exit Function
Dim lista(65535) As Double
For Each r In rango_criterios
If r = criterio Then lista(i) = CDbl(r.Offset(0, rango_valores.Column - 1)): i = (i + 1)
Next
Set rango_criterios = Nothing
Set rango_valores = Nothing
Set r = Nothing
maximo = Application.WorksheetFunction.max(lista)
maxsi = maximo
End Function

grabas y cierra es el editor

la funcion se llama maxsi()
y se utiliza como cualquier funcion normal de excel
la sintasis es la sgte:
=maxsi(criterio,rango_crirerios,rango_valores)
Criterio se refiere a el elemento para cual se establecera el maximo,
rango_criterios es el rango completo en que se encuentra la lista de elementos de criterio
rango_valores, pues la lista de valores sobre el cual se establecera el maximo
asi siguiendo tu ejemplo de datos seria:

=maxsi(a1;$a$1:$a$10;$b$1:$b$10)

Asi te devolveria el maximo de la lista para el elemento criterio de a1

Hola, la formula esta muy buena es lo que necesitaba. Muchísimas gracias,

tengo una duda, esta formula solo esta funcionando si trabajo los valores de letras (para este ejemplo) en la columna A y los números en la columna B, es posible que se pueda trabajar en cualquier columna o esta macro esta ligada a solo estas dos columnas

Cordial Saludo

Bueno entonces asi, cumple tus requerimientos:

Public Function maxsi(criterio As String, rango_criterios As Range, rango_valores As Range)
' recupera el maximo de una lista en funcion de su criterio de seleccion
Dim maximo As Double
Dim i As Long
Dim r As Range
Dim col As Integer
Dim fil As Integer
'4c7569735f50
If Application.WorksheetFunction.CountA(rango_criterios) = 0 Then Exit Function
Dim lista(65535) As Double
col = rango_criterios.Column
fil = rango_valores.Column
For Each r In rango_criterios
If r = criterio Then lista(i) = CDbl(r.Offset(0, (fil - col))): i = (i + 1)
Next
Set rango_criterios = Nothing
Set rango_valores = Nothing
Set r = Nothing
maximo = Application.WorksheetFunction.Max(lista)
maxsi = maximo
End Function

La verdad estoy muy agradecido, es perfecto para lo que necesitaba pues estaba creando una macro y era necesario hacer tablas dinámicas las cuales siempre me generaban errores, con esto me sale perfecto una ampliación para mi trabajo que me ahorrará mucho tiempo. mil y mil gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas