Ordenar clasificación deportiva automáticamente

04/01/2006 - 13:27 por Francis | Informe spam
Hola compañeros.

Tengo una hoja de cálculo que crea una clasificación deportiva a partir de
los resultados que introduzco en un calendario de partidos que he diseñado.

La clasificación me sale perfectamente con los campos "puntos" "partidos
jugados" "partidos ganados" "partidos perdidos", etc..

Pero cada vez que introduzco un resultado, a la hora de ordenar esa
clasificación (por el orden que cada equipo le corresponde según sus
resultados), me toca seleccionar los datos y ordenarla cada vez que
introduzco un dato nuevo.

Quisiera saber si existe un modo de que esa clasificación o ese rango de
celdas se ordene automáticamente cada vez que introduzco un resultado.

Además, el criterio para ordenar esos datos, lo quiero hacer tomando en
cuenta tres columnas distintas (para el caso en el que exista un empate en la
columna que tomé como primera opción).

Llevo meses intentando solucionar este tema.

Os agradecería un poco de ayuda. GRACIAS.

Preguntas similare

Leer las respuestas

#6 Francis
09/01/2006 - 17:53 | Informe spam
Hola Mariano. Efectívamente he aprendido a grabar una macro y al ejecutarla
me ordena la tabla tal y como yo le predefiní.

Ahora, ¿puede una macro ejecutarse automáticamente? lo que quiero decir es
que si puede predeterminarse para que se ejecute simplemente cuando detecte
un cambio en los datos por los que se ordena.

Si no es así, ¿hay algún modo de que se inserte un boton en la propia hoja
de cálculo y la macro se ejecute (un estilo a un acceso directo)?

Gracias de nuevo.

"Marianoh" escribió:

Hola Francis:
Lo mas facil creo que es grabar una macro con la ordenación que
realizas, por ejemplo, el código para ordenar por las tres primeras
columnas sería:

Selection.Sort Key1:=Range("C4"), Order1:=xlDescending,
Key2:=Range("D4") _
, Order2:=xlDescending, Key3:=Range("E4"), Order3:=xlAscending,
Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom _
, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal,
DataOption3:= _
xlSortNormal

Luego reemplazas "Selection" por Range("Tabla") o por Range("B3:E10")
si no tiene nombre. Y queda:

Range("Tabla").Sort Key1:=Range("C4"), Order1:=xlDescending,
Key2:=Range("D4") _
, Order2:=xlDescending, Key3:=Range("E4"), Order3:=xlAscending,
Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom _
, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal,
DataOption3:= _
xlSortNormal

Ahora solo tendrías que ejecutar la macro para que la tabla se ordene.

-Para grabar la macro: Herramientas-Macros-Grabar nueva macro y
realizas los pasos que habitualmente utilizas para ordenar.
-Para Editar el código de la macro grabada: Alt + F11 - Módulos -
Módulo 1

Saludos: MarianoH


Respuesta Responder a este mensaje
#7 KL
09/01/2006 - 18:49 | Informe spam
Hola Francis,

Veo que llego un poco tarde. Solo comentarte que esto lo que planteas se puede hacer sin recurrir a los macros. Revisa el siguiente
enlace:
http://www.cpearson.com/excel/rank.htm

y un ejemplo aqui:
http://www.cpearson.com/Zips/RANK.ZIP

Saludos,
KL


"Francis" wrote in message news:
Hola compañeros.

Tengo una hoja de cálculo que crea una clasificación deportiva a partir de
los resultados que introduzco en un calendario de partidos que he diseñado.

La clasificación me sale perfectamente con los campos "puntos" "partidos
jugados" "partidos ganados" "partidos perdidos", etc..

Pero cada vez que introduzco un resultado, a la hora de ordenar esa
clasificación (por el orden que cada equipo le corresponde según sus
resultados), me toca seleccionar los datos y ordenarla cada vez que
introduzco un dato nuevo.

Quisiera saber si existe un modo de que esa clasificación o ese rango de
celdas se ordene automáticamente cada vez que introduzco un resultado.

Además, el criterio para ordenar esos datos, lo quiero hacer tomando en
cuenta tres columnas distintas (para el caso en el que exista un empate en la
columna que tomé como primera opción).

Llevo meses intentando solucionar este tema.

Os agradecería un poco de ayuda. GRACIAS.
Respuesta Responder a este mensaje
#8 KL
09/01/2006 - 19:15 | Informe spam
Hola Francis,



Suponiendo que...
1) tu tabla de clasificacion esta en el rango A1:I30
P.ej.:
[A] Equipo
[B] Partidos jugados
[C] Victorias
[D] Empates
[E] Derrotas
[F] Goles Marcados
[G] Goles Encajados
[H] Diferencia de goles
[I] Puntos Totales
2) quieres ordenar la tabla al cambiar algun dato en el rango [C2:G30]
3) quieres ordenar la tabla usando como criterio las columnas [I] y en caso de igualdad [H]

prueba hacer lo siguiente:

1) Haz clic-derecho sobre el nombre de la hoja en cuestion (en una de las pestanas de la parte de abajo de la ventana de Excel).
2) Elige la opcion Ver Codigo para abrir el editor VBA.
3) Una vez en el Editor VBA, en la ventana mas grande a la derecha pega el codigo que te pongo a continuacion:

'--
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [C2:G30]) Is Nothing Then Exit Sub
Range("A1:I30").Sort _
Key1:=Range("I2"), _
Order1:=xlDescending, _
Key2:=Range("H2"), _
Order2:=xlDescending, _
Header:=xlGuess
End Sub
'--

4) Ahora pulsa Alt+F11 para volver a la hoja.
5) Prueba cambiar los valores en el rango [C2:G30]

Saludos,
KL




"Francis" wrote in message news:
Hola Mariano. Efectívamente he aprendido a grabar una macro y al ejecutarla
me ordena la tabla tal y como yo le predefiní.

Ahora, ¿puede una macro ejecutarse automáticamente? lo que quiero decir es
que si puede predeterminarse para que se ejecute simplemente cuando detecte
un cambio en los datos por los que se ordena.

Si no es así, ¿hay algún modo de que se inserte un boton en la propia hoja
de cálculo y la macro se ejecute (un estilo a un acceso directo)?

Gracias de nuevo.

"Marianoh" escribió:

Hola Francis:
Lo mas facil creo que es grabar una macro con la ordenación que
realizas, por ejemplo, el código para ordenar por las tres primeras
columnas sería:

Selection.Sort Key1:=Range("C4"), Order1:=xlDescending,
Key2:=Range("D4") _
, Order2:=xlDescending, Key3:=Range("E4"), Order3:=xlAscending,
Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom _
, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal,
DataOption3:= _
xlSortNormal

Luego reemplazas "Selection" por Range("Tabla") o por Range("B3:E10")
si no tiene nombre. Y queda:

Range("Tabla").Sort Key1:=Range("C4"), Order1:=xlDescending,
Key2:=Range("D4") _
, Order2:=xlDescending, Key3:=Range("E4"), Order3:=xlAscending,
Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom _
, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal,
DataOption3:= _
xlSortNormal

Ahora solo tendrías que ejecutar la macro para que la tabla se ordene.

-Para grabar la macro: Herramientas-Macros-Grabar nueva macro y
realizas los pasos que habitualmente utilizas para ordenar.
-Para Editar el código de la macro grabada: Alt + F11 - Módulos -
Módulo 1

Saludos: MarianoH


Respuesta Responder a este mensaje
#9 Marianoh
09/01/2006 - 23:17 | Informe spam
Francis:

Como te indican abajo, la fórmula "JERARQUIA" te puede servir para
resolver tu problema, pero para ordenar la lista automáticamente
entiendo que la única solución es el código, ya que, de otra manera,
una celda solo puede cambiar de valor sin tu acción cuando contiene
una fórmula.

Lo que me preguntas debería haberlo incluido desde un principio. De
hecho si se puede ejecutar una macro cuando cambia el valor de una
celda (o mejor dicho cuando este es editado), para ello se utiliza el
evento Change y la función Intersect.

El evento Change de la hoja se dispara cuando cambia un valor de la
misma, y ejecuta el código que le asignes. Un ejemplo es más claro:

Private Sub Worksheet_Change(ByVal Target As Range)
Lo que escribas aca, se ejecuta cada vez que cambia un valor en la
hoja
End Sub

Así como editaste el código que la grabadora de macros aloja en un
módulo, este va en la hoja, para lo que haces doble click en esta en
el editor de VBA.

Y para que la lista se ordene cuando el valor que cambia esté dentro
de la tabla..:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("Tabla")) Is Nothing Then
'En castellano: Si el rango resultado de la intersección entre
la celda con el
'valor que cambió (Target) y la tabla no es vacío...que ocurra
lo que escribo aca.
End If
End Sub

Saludos: MarianoH
Respuesta Responder a este mensaje
#10 KL
10/01/2006 - 00:31 | Informe spam
Hola Marianoh,

para ordenar la lista automáticamente
entiendo que la única solución es el código



Creo que te equivocas - el articulo cuyo enlace expuse en el otro mensaje habla precisamente de como hacer una clasificacion
dinamica mediante formulas sin necesidad de recurrir a macros ;-)

Saludos,
KL
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida