Como fazer uma tabela de campeonato de futebol – Pontos corridos

Futebol[1]

Introdução
Lá pelos idos de 2002 caiu no meu colo uma planilha Excel que calculava toda a tabela da copa do mundo de 2002, tudo automático. A planilha era uma beleza, toda decorada com as bandeiras das seleções, calculava os classificados automaticamente e fazia o mata-mata até a final. Tudo automático. Uma das coisas que me deixou mais interessado era que na primeira fase da copa a regra era de todos-contra-todos, pontos corridos e a planilha calculava e classificava os times automaticamente. Tudo isso feito sem macros. Modifiquei a planilha e me inspirei nela. Desde então passei a fazer planilhas para campeonatos de futebol. Postei num site desses de downloads e foi um sucesso. Todos os dias recebo emails pedindo a senha para alterar a planilha para campeonatos de bairro, de PES, Fifa,  vídeo game e por aí vai.

O maior desafio era fazer a planilha do campeonato Brasileiro da série A que passou a ser feito em pontos corridos com 20 times em jogo de ida e volta, 38 rodadas com 10 jogos cada, 380 jogos. Essa planilha está disponível para download aqui na versão do campeonato de 2013. A senha para alterá-la é naotem.  Esta planilha pode ser facilmente modificada para campeonatos com outros times.

Como funciona a planilha
Para quem quer entender como a planilha funciona, eu decidi escrever esse artigo e deixar aberto para discussão, dicas e truques de modo que outras pessoas podem baixar a planilha e modificá-la para seus campeonatos. Para saber como a planilha do Brasileirão de pontos corridos funciona é preciso primeiro entender quais são as regras do campeonato.

No Brasileirão temos 20 times que jogam entre si em jogos de ida e volta. A primeira coisa a fazer é calcular quantos jogos a tabela vai ter. Segundo a análise combinatória, o número de jogos de um campeonato com N times é calculado pela fórmula N * (N – 1) / 2. No caso, a Série A tem 20 times então a fórmula fica 20 * (20 -1) /2 = 20 * 19 / 2 = 380 / 2 = 190 jogos. Acontece que temos dois turnos, para proporcionar a ida e a volta. Então temos 190 * 2 jogos = 380 jogos. Tenha isso em mente quando for fazer a sua tabela do seu campeonato. Se você fizer um campeonato com todos contra todos em ida e volta pode acabar tendo uma quantidade de jogos muito grande que vai requerer muito tempo para jogar. Imagine um campeonato com 15 times de PES, em 2 turnos = 15 * 14 = 210 jogos ! Se cada jogo durar 30 minutos, estamos falando de 105 horas de jogo ininterrupto. Depois trataremos desse assunto dos campeonatos longos demais.

Agora temos que definir as regras para pontuação no campeonato. No Brasileirão a regra é clara. Uma vitória vale 3 pontos, empates valem 1 ponto, derrotas valem 0 (zero) pontos. Isso estimula os times a partirem para vitória e não se contentarem apenas com empates tornando os jogos mais emocionantes.

Depois de estabelecido o critério de pontuação é preciso estabelecer os critérios de classificação. No Brasileirão a regra é a seguinte:
Critérios de classificação
1 – Pontos ganhos
2 – Vitórias
3 – Saldo de gols
4 – Gols marcados
5 – Sorteio

Desde que o campeonato passou a ser assim, a classificação nunca precisou usar o critério de sorteio.

Com essas informações já podemos fazer a planilha para calcular tudo automaticamente, sem macros, inclusive com a classificação dos times. Exibi-los em ordem descendente de pontuação, inclusive usando os critérios de desempate caso a pontuação fique igual.

Estrutura da Planilha
Uma das coisas mais importantes quando vamos fazer uma planilha Excel é estruturar bem os dados. Colocar os dados numa disposição que facilite a elaboração das fórmulas. Quanto melhor planejarmos a estrutura da planilha, mais simples as fórmulas e cálculos serão. Com a planilha do Brasileirão a regra se aplica. A estrutura ficou assim

1 – Planilha de jogos. Nessa planilha está a relação de todos os jogos do campeonato. Nela serão informados os resultados dos jogos a medida em que eles vão acontecendo. Os jogos estão relacionados em ordem cronológica, agrupados por rodadas. Não existe preocupação maior com o agrupamento por rodadas. É só para facilitar o preenchimento. Nenhum cálculo é feito por rodada. Tudo aqui é calculado por jogo. A planilha é dividida em uma parte visível, onde o usuário irá informar os resultados dos jogos, e uma parte oculta, que calcula os pontos ganhos, gols pró e gols contra de cada time. A parte visível fica a esquerda da planilha e a parte oculta fica a direita. Para alterar as fórmulas é só reexibir as colunas da parte oculta. Aqui o pulo do gato é o ninho de SE()´s que calcula o resultado do jogo e a pontuação. O primeiro SE() testa se o jogo foi jogado. Para saber se o jogo foi jogado ou não, testa-se se o gols do time mandante (o time do lado esquerdo) e do time visitante (o time do lado direito) foram informados. Se sim, partimos para calcular quantos pontos o mandante fez e quantos pontos o visitante fez. Também calculamos os gols pró e contra do mandante e os gols pró e contra do visitante. Obviamente, se o mandante ganhou o jogo, 3 pontos para ele, 0 (zero) para o visitante. Se empatou, 1 ponto para cada, se o mandante perdeu, 0 (zero) para ele, 3 para o visitante. Parece simples e óbvio mas essa explicitação do resultado e contra-resultado facilita muito as fórmulas para somatório dos pontos de cada time. Essa planilha é editável nas colunas onde se digita os gols de cada time de cada jogo. Os times propriamente ditos, datas, etc, é tudo bloqueado para edição.
2 – Planilha de pontuação. Nessa planilha os times são relacionados em ordem alfabética. Ao lado de cada time está o sumário dos resultados de cada time: pontuação, número de vitórias, número de empates, saldo de gols, gols pró, gols contra. Essa parte do sumário dos resultados é um monte de soma.se() e cont.se() usando como critério o time relacionado e como origem os resultados dos jogos na planilha de jogos. Aqui a coluna mais importante é a coluna de RANKING que é calculada a partir das outras colunas dessa mesma planilha. Mais sobre essa coluna adiante. Essa planilha é editável nos nomes dos times. Isso significa que se você quer usar essa planilha para fazer seu campeonato, basta mudar os nomes dos times aqui. Ela trocará o nome do time em todas as abas.
3 – Planilha de classifcação. Essa planilha contém os mesmos dados da planilha de pontuação só que classificada, ou seja, o time que está melhor no campeonato lá em cima e o pior lá embaixo. A separação de cores é para denotar as classificações para a Copa Libertadores, quem vai ser rebaixado para a segundona, etc. Não tem o que editar nessa planilha. Ela é toda calculada
4 – Meu time. Essa é uma planilha em que o usuário escolhe um time e os jogos desse time serão destacados na planilha de jogos. Além disso, os jogos do time aparecem filtrados nessa planilha. Nada editável exceto a seleção do Meu Time.
5 – Carreira. Essa é uma planilha muito feia que conta a história da classificação de cada time ao longo do campeonato. O sobe-desce de cada time ao longo das rodadas. Cada time e a colocação dele no campeonato. Ela é a base para ser usada no gráfico que é muito legal e a única parte da planilha que precisa de macro.
6 – Gráfico. É a exibição gráfica do sobe-desce ao longo do campeonato. É muito legal. Você pode selecionar quais times quer ver no gráfico e pedir para exibí-lo. Não adianta colocar os 20 times de uma vez que fica muito poluído, a não ser que você tenha uma tela realmente muito grande no seu computador. Normalmente dá para exibir uns 5 ou 6 times. Para exibir o gráfico, você coloca o número de rodadas que deseja exibir na célula A1 da aba carreira e clica no botão para fazer o gráfico. Os times que tiverem um X ao lado do seu nome serão exibidos no gráfico.
7 – Início, Instruções e Revisões. São planilhas que contém apenas informações e nenhum dado é calculado nelas ou a partir delas.
Vimos como estruturar a planilha e como calcular o ranking de cada time. Agora é a hora de classificá-los e exibi-los na ordem certa. Do 1º colocado para o último.

Como classificar a tabela

Isso é feito na aba classificação. Essa aba é totalmente calculada a partir da aba pontuação, especialmente da coluna R.

A coluna R na aba de pontuação é calculada usando a função ORDEM() do Excel. Essa função é muito útil. Ela recebe 3 argumentos

=ordem( número ; lista de números ; tipo de ordem)

Ela retorna em que posição o número fornecido está na lista de números fornecida. A ordem pode ser descendente (0) ou ascendente (1). No nosso caso, usamos a função Ordem() para dar a classificação do ranking de cada time na lista de rankings de todos os times, em ordem DESCENDENTE (do maior para o menor).

Se usarmos o comando classificar do Excel para classificar a planilha pontuação, teremos a classificação. Mas isso é chato. A cada resultado de jogo, teríamos que ir lá na tabela de pontuação, marcar a área, acionar a classificação, selecionar a coluna de classificação. Uma macro pode fazer isso mas macro é chato. Muita gente desconfia das macros (com razão) e nem todo mundo entende de programação para sequer entender como macro funciona, quanto mais fazer uma. O desafio é fazer classificação sem macro. Esse assunto foi discutido em detalhes nesse post aqui. Vejamos como se aplica no caso dessa tabela em particular.

Se observarem a aba de classificação, verificarão que a coluna B está oculta. Basta ir em Exibir, e marcar a opção Títulos para ver os títulos das linhas e colunas.

A coluna B é o pulo do gato dessa aba. Ela contém um corresp() que vai buscar na planilha de pontuação o time correspondente a classificação 1, 2, 3, 4 … até 20, disponíveis na coluna A. Corresp() vai retornar um número que é o número do time na tabela de pontuação que corresponde a essa classificação. De posse desse número, é só usar a função índice() para trazer os dados da planilha pontuação para a planilha classificação.

Notem que a medida que avançamos na planilha as coisas ficam mais simples. Isso se deve ao fato de termos estruturado a planilha de forma boa, facilitando as fórmulas. Se você analisar verá que não tem fórmulas muito complexas.

Anúncios

Como levar dados selecionados de uma planilha para outra

Uma das técnicas mais úteis do Excel são os autofiltros. Nesse vídeo abaixo … tem uma dica de como funcionam os autofiltros. A vantagem dessa técnica é que é fácil e rápido de usar. Basta marcar a base de dados e selecionar o filtro desejado. Em conjunto com a função subtotal() pode-se facilmente obter somas, contagens, maiores e menores valores apenas dos registros que atenderam aquele filtro.

Apesar de muito útil, prática e rápida, essa técnica tem algumas desvantagens. Se for necessário usar o valor de uma célula para filtrar os dados, essa técnica já não funciona. Outra desvantagem é que a manipulação de múltiplos filtros ao mesmo tempo pode confundir o usuário e dar resultados inesperados.

Existe uma alternativa a essa técnica simples. Essa alternativa requer um pouco mais de fórmulas mas pode ser útil em alguns casos. Para ilustrar essa técnica, eu fiz uma planilha que pode ser baixada aqui

Essa pasta é simples. Na plan2 existe uma relação de vendas feitas por cliente relacionando os produtos, preços, quantidade, etc. Os dados são inseridos nas colunas de B a N na plan2, registrando as vendas.

O que se quer é … ao digitar na plan1 o nome de um cliente na célula E4 e o código do produto em E5, listar as vendas realizadas desse cliente+produto. Ou seja, vamos usar um filtro com dois critérios, o cliente e o produto. A relação aparecerá na plan1 mesmo, mantendo plan2 intacta.

Como fazer ?

Criamos em plan2 3 colunas auxiliares que serão calculadas automaticamente. A primeira coluna é a coluna O que indicará se o cliente daquela linha é o mesmo cliente colocado em E4 (da plan1). A coluna P indicará se o produto daquela linha é o mesmo produto colocado em E5 (da plan1). Essas duas colunas terão apenas os valores 1 caso seja verdadeiro e 0 caso seja falso. Ou seja, a coluna O terá um 1 para cada linha que tiver o mesmo cliente que desejamos. A coluna P terá um 1 em cada linha que tiver o produto que desejamos.

A coluna Q irá fazer a combinação dos dois critérios, ou seja, ela só terá 1 se O e P tiverem ambas 1. Isso é feito com uma simples multiplicação O8 * P8 só dará 1 se ambos forem 1. Ou seja, só dará 1 se o cliente for o desejado e o produto também. Além de calcularmos se a combinação cliente * produto é a desejada somamos esse resultado ao resultado da linha anterior. No caso da primeira linha (a linha 8) não temos linha anterior. A soma com a linha anterior só acontece a partir da linha 9 em diante.

Esse truque de somar a linha anterior serve para marcar quando acharmos mais um novo cliente * produto que atende ao filtro especificado em E4 e E5. A coluna Q então terá uma “contagem” que muda de número apenas quando encontra uma nova linha que atendeu ao critério.

Muito bem, plan2 agora tem as 3 colunas auxiliares que fizeram o filtro. Toda vez que o valor de Q mudar é porque naquela linha tem um novo cliente * produto que atende ao critério. O que temos que fazer é levar essas linhas, e apenas essas linhas, para plan1. Como fazer isso ?

Em plan1 a primeira coluna contém uma simples relação crescente de números. Para cada linha dessa, vamos procurar na lista de plan2 qual o ítem que corresponde a ela na coluna Q. Ou seja, em que linha da faixa que começa em Q8 aparece o número que está na coluna A ? Ou … perguntando pelo significado, em que linha da coluna Q da plan2 aparece o primeiro cliente * produto que atende o critério desejado ? A coluna B de plan1 contém essa resposta a essa pergunta. Essa resposta é obtida com a função corresp() assim

=CORRESP(A27;Plan2!$Q$8:$Q$17;0)

A27 é o número crescente do itens que atendem ao critério, 1 o primeiro ítem, 2 o segundo ítem e assim por diante, entre A27 e A36

Plan2!$Q$8:$Q$17 é a coluna de plan2, calculada, que nos informa a cada novo número que achamos um cliente * produto desejado

o 0 (zero) usado na corresp() é para garantir que a busca que corresp() irá realizar é “exata”, ou seja, queremos exatamente o primeiro, depois o segundo, depois o terceiro, etc. Quando o item não é encontrado, corresp() retorna #N/D. No exemplo, não existe 3º item que atenda ao critério Mateus e Painço.

Na coluna B de Plan1 teremos então a lista de números de linha de Q8:Q17 da plan2 onde tem os itens desejados. Agora é só trazer os dados da plan2 para plan1. Para fazer isso, usamos a função INDICE() que nada mais faz do que pegar o elemento desejado de uma matriz. INDICE() funciona assim

indice( matriz original ; número da linha ; número da coluna )

índice() retorna o elemento da matriz original que estão na linha x coluna informada.

Queremos o peso bruto, a tara , o liquido bruto, o %l/kg, o %u/kg, e o total liquido. Essas colunas em plan2 são E, F, G, H, I e J respectivamente.

O número da linha foi calculado e está em B, é só aplicar então
=ÍNDICE(Plan2!E$8:E$17;B27;1) para obtermos o peso bruto, ou seja, queremos o elemento cujo número está em b27 da lista de pesos brutos que está na plan2 entre E8:E17

para não encher a planilha com erros #N/D fazemos um pequeno SE() antes assim

=SE(É.NÃO.DISP($B27);””;ÍNDICE(Plan2!E$8:E$17;Plan1!$B27;1))

Ou seja, se b27 for #N/D exibimos um nada “”. Se for um número, exibimos o valor buscado na matriz original.

Nesse exemplo, usamos 2 critérios. Através de adição de mais colunas auxiliares em plan2 a partir da coluna P podemos colocar quantos critérios quisermos. Podemos usar um critério só. É só modificar a coluna Q para se adequar a fórmula.