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 de Fran Riveiro
1
1
Fran Riveiro, Tecnico superior en administrador de sistemas informáticos
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.