por xpelos » 16 Nov 2011 17:37
La fórmula propuesta es:
=SI(COLUMNAS($F2:F2)>CONTAR.SI($B$3:$B$7;$E3);"-";DESREF($B$2;COINCIDIR($E3;$B$3:$B$7;0)-1+COLUMNAS($F2:F2);1))
Para ver cómo funciona, vamos por partes: Se supone que en la columna 'B' tenemos los nombres de los 'jefes', y en la 'C', al lado del nombre de cada jefe, los empleados que de él dependen. Lo ideal, antes de comenzar, es que se ordene todo a partir del nombre de los 'jefes'
=SI( Establece una condición. Vamos a ver qué hace, en caso de que sea 'verdadera' la condición:
COLUMNAS($F2:F2)>CONTAR.SI($B$3:$B$7;$E3);"-"; Esta condición indica que si el número de columnas (que no es más que un 'contador') -desde 'F' hasta la que consideramos: 'G', 'H'...- es mayor que el número de veces que aparece el nombre de determinado jefe, entonces, que ponga un guión (es decir, que deje de buscar nombres de empleados de cada jefe. Si el jefe aparece 3 veces -tiene tres empleados- (lo que se encuentra mediante CONTAR.SI($B$3:$B$7;$E3))) entonces, deje de buscar.En este caso, rellenará los datos de trabajadores dependientes del jefe en las columnas 'F', 'G' y 'H', pero no más: F=1, G=2, H=3. A partir de ahí ('I' y siguientes), pondrá '-'.
¿Y en caso de que en la columna no supere el 3 (en este ejemplo)?
Entonces, hará esto:
DESREF($B$2;COINCIDIR($E3;$B$3:$B$7;0)-1+COLUMNAS($F2:F2);1))
La función 'DESREF()' es una de las que me costó más entender cómo funciona; pero, una vez entendido -probando y probando, que es la mejor manera, a partir de haber leído las instrucciones de Excel- es muy útil, y permite hallar un mismo resultado de distintas maneras. Yo he usado la que aquí explico...
Básicamente, DESREF() nos trae el contenido de una celda, que se localiza a partir de una dada, que sirve de REFerencia. El contenido se localiza por la información de DESplazamiento -en filas y columnas- a partir de la celda REFerencia.
La celda REFerencia, en nuestro caso, la sitúo en $B$2 (fijada con $, para que el arrastre siempre considere la celda [B2] como referencia-base).
¿Con qué desplazamiento, a partir de [B2]?
Pues allí donde coincida COINCIDIR($E3;$B$3:$B$7;0). Es decir: en [$E3] está el nombre del 'jefe' que busco a lo largo de la lista de 'jefes' en B3...B7. COINCIDIR() localiza la primera coincidencia del nombre del jefe en el rango de 'jefes'. El valor final de parámetro, ;0) de la función indica que la coincidencia debe ser EXACTA.
Como DESREF() desplaza determinado número de filas a partir de la primera -que no tiene en cuenta- le resto '1', para que se quede en la primera, y no en 'la siguiente'.
Entonces, añado el número de columnas -que no es más que un contador: cada columna añade una 'fila' más de desplazamiento- así que, mientras más a la derecha vamos en el rango de 'resultados', más hacia abajo busca en los datos de origen, mediante: +COLUMNAS($F2:F2)
Finalmente:
...DESREF($B$2;COINCIDIR($E3;$B$3:$B$7;0)-1+COLUMNAS($F2:F2);1))
Como el valor que busco -el nombre del empleado- se encuentra en la 2ª columna, a partir de $B$2, es decir la 'C' en nuestro caso, debo añadir una columna de DESplazamiento : interesa el nombre el empleado.
Si después de esta lectura tienes más dudas, no dudes: la ayuda de Excel te iluminará algo más; pero vuelve a preguntar.
Un saludo