Macros de Excel

Hola que tal mi pregunta es la siguiente tengo dos tablas en una hoja de excel (equipo de fútbol jugando como local y visitante) quiero que de los datos arrojados en estas dos tablas los compare y descargue los datos en una tercera tabla (Posición general) acomodados de mayor a menor (empezando por el equipo con más puntos y que tome encuenta mejor diferencia de goles)

1 respuesta

Respuesta
1
Pues bien, necesito que me digas cuantos datos tienes de los equipos y como están las tablas, es decir, por lo que entiendo tienes:
Local
Nombre - Part Jugados - Part Ganados - Part Perdidos - Partidos Empatados - GF - GC - DG - Puntos
y lo mismo para visitante
Si no es así, dime como esta y según tenga un hueco (estuve de vacaciones y tengo trabajo acumulado, lo hago en un momento).
Queda de la manera en que lo pusiste. Gracias
Nombre - Part Jugados - Part Ganados - Part Empatados - GF - GE - DG - Ptos.
Vale, esta mañana supongo que la tendré más tranquila que la de ayer.
Lo que entiendo que quieres hacer es una clasificación normal, si no es así y lees esto antes de que yo ponga la solución dímelo.
Ya lo tengo, creo que es lo que buscas, sino aquí me tienes.
Lo hice para que la clasificación resultante te la de en otra hoja, no por nada en especial, creo que así queda mejor, pero vamos, si lo quieres cambiar lo comentas y te digo como.
Suponiendo que los datos que tenemos son los siguientes:
Nombre Jugados Ganados Empatados Perdidos GF GC DG Puntos
Puestos horizontalmente, desde la celda A2 para el local (en a1 pone LOCAL) y empezando desde la celda K2 para el visitante sacamos el siguiente código que tengo puesto en un botón:
Private Sub CommandButton1_Click()
Hoja2.Columns("A:I").Clear
Range("A2:I2").Select
Selection.Copy
Hoja2.Range("A1").PasteSpecial xlPasteValues
Sheets("Hoja1").Select
For Each celdita In ActiveSheet.Range("a3", Range("A3").End(xlDown))
cont = 0
Nombre = celdita.Value
jugados = celdita.Offset(0, 1).Value
ganados = celdita.Offset(0, 2).Value
empatados = celdita.Offset(0, 3).Value
perdidos = celdita.Offset(0, 4).Value
GF = celdita.Offset(0, 5).Value
GC = celdita.Offset(0, 6).Value
DG = celdita.Offset(0, 7).Value
Ptos = celdita.Offset(0, 8).Value
For Each celdita2 In Hoja2.Range("a1", Hoja2.Range("A100"))
If celdita2.Value = "" And cont = 0 Then
celdita2.Value = Nombre
celdita2.Offset(0, 1).Value = jugados
celdita2.Offset(0, 2).Value = ganados
celdita2.Offset(0, 3).Value = empatados
celdita2.Offset(0, 4).Value = perdidos
celdita2.Offset(0, 5).Value = GF
celdita2.Offset(0, 6).Value = GC
celdita2.Offset(0, 7).Value = DG
celdita2.Offset(0, 8).Value = Ptos
cont = 1
End If
Next celdita2
Next celdita
For Each celdita3 In ActiveSheet.Range("k3", Range("k3").End(xlDown))
cont = 0
Nombre = celdita3.Value
jugados = celdita3.Offset(0, 1).Value
ganados = celdita3.Offset(0, 2).Value
empatados = celdita3.Offset(0, 3).Value
perdidos = celdita3.Offset(0, 4).Value
GF = celdita3.Offset(0, 5).Value
GC = celdita3.Offset(0, 6).Value
DG = celdita3.Offset(0, 7).Value
Ptos = celdita3.Offset(0, 8).Value
For Each celdita2 In Hoja2.Range("a1", Hoja2.Range("A100"))
If celdita2.Value = Nombre Then
celdita2.Offset(0, 1).Value = celdita2.Offset(0, 1).Value + jugados
celdita2.Offset(0, 2).Value = celdita2.Offset(0, 2).Value + ganados
celdita2.Offset(0, 3).Value = celdita2.Offset(0, 3).Value + empatados
celdita2.Offset(0, 4).Value = celdita2.Offset(0, 4).Value + perdidos
celdita2.Offset(0, 5).Value = celdita2.Offset(0, 5).Value + GF
celdita2.Offset(0, 6).Value = celdita2.Offset(0, 6).Value + GC
celdita2.Offset(0, 7).Value = celdita2.Offset(0, 7).Value + DG
celdita2.Offset(0, 8).Value = celdita2.Offset(0, 8).Value + Ptos
End If
Next celdita2
Next celdita3
Ordenar
End Sub
y el código de Ordenar:
Sub Ordenar()
Sheets("Hoja2").Select
Hoja2.Columns("A:I").Select
Selection.Sort Key1:=Hoja2.Range("I2"), Order1:=xlDescending, Key2:=Hoja2.Range("H2") _
, Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
End Sub
Te voy explicar el código así por encima lo que hace.
Se supone que los equipos juegan como local y como visitante, así que en un primer bucle recorremos la tabla local, guardando los nombres de los equipos y sus datos en una variable que después pasamos a la otra hoja.
Después en otra vuelta por la tabla visitante lo que hacemos es almacenar los datos todos en las variables (estaría bien definirlas, no lo hice pero es MUY recomendable) y comprobar el nombre que tenemos almacenado con el nombre que hay en la otra hoja, si el nombre es el mismo lo que hace es sumar los valores todos a los ya existentes
Al final de todo pues ordena por puntuación (de mayor a menos) y de segundo criterio la diferencia de goles (de mayor a menor) como me dijiste.
También al comienzo de la macro, al ejecutarse borra por completo la hoja donde va a estar la clasificación, ya que si no lo hace saldrían repetidos los equipos, por eso esta de esa forma.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas