viernes, 2 de octubre de 2015

La maldita ley D'Hont.




  • No voy a criticar políticamente la aplicación o no de dicha ley. A mi me parece que favorece un poco a las mayorías, pero eso es otro tema.
  • Para aplicar la ley  D'Hont hay que dividir los votos de cada partido por 1, 2 ,3 , ... hasta el número de elegidos.
  • Esto significa que tenemos una primera columna con el número de votos divido por 1, una segunda columna con el número de votos divido por dos, una tercera columna con el número de votos divido por tres, ... y , una enesima columna con el número de votos divido por n.
  •  Hacer esto en excel es fácil (hoja Aux, rango F22:Cl22). Como solo es una división poco hay que explicar.
  • Los partidos deben superar un determinado porcentaje antes de entrar en el reparto de escaños.
  • Esto también es sencillo en excel, lo hago (Aux Columna E) con =SI($D4>=$E$2;$C4;0), en donde D4 (votos/total votos) es el porcentaje calculado, E2 es el porcentaje mínimo para entrar en el reparto  y C4 es el número de votos.
  • Una vez hechos esos cálculos vamos a tabla, buscamos los n mayores valores y asignamos un escaño al partido correspondiente.
  • Aunque es improbable, puede producirse un empate. Empate que además solo es crítico si se produce para el último escaño. Aunque es improbable  lo he resuelto en . Aquí utilizo un pequeño truco, concatenar al valor de los votos divididos por n , sumandole 10000000 y el número total de votos sumandole, también 10000000 (=$E4/F$2+$F$1&" "&$F$1+$C4 ) 
  • A la hora de encontrar los n valores mayores, en un primer momento, pensé que no era posible sin programar, pero si que lo es y ademas de una manera sencilla. Se trata de contar, para un determinado valor, el número de valores que lo superan, con =CONTAR.SI($F$4:$CL$23;">"&F4) en hoja Aux F27:BJ46.
  • Por una cuestión de presencia utilizo =SI(CONTAR.SI($F$4:$CL$23;">"&F4)<$B$2;CONTAR.SI($F$4:$CL$23;">"&F4);"") en vez de =CONTAR.SI($F$4:$CL$23;">"&F4) solamente.
  • Por último cuento, para cada partido, el número de items menores del número total de escaños con =CONTAR.SI($F27:$CL27;"<"&$B$2).