por ioyama » 13 Sep 2007 03:06
Hola franziskaner1789
Me imagino que tu problema estará en la función matricial
{=SI(O(ESERROR(INDICE(Hoja1!$B$2:$B$10000;COINCIDIR(0;--ESNUMERO(COINCIDIR(Hoja1!$B$2:$B$10000;Hoja2!$A$1:A1;0));0)));INDICE(Hoja1!$B$2:$B$10000;COINCIDIR(0;--ESNUMERO(COINCIDIR(Hoja1!$B$2:$B$10000;Hoja2!$A$1:A1;0));0))=0);"";INDICE(Hoja1!$B$2:$B$10000;COINCIDIR(0;--ESNUMERO(COINCIDIR(Hoja1!$B$2:$B$10000;Hoja2!$A$1:A1;0));0)))}
Por partes (y olvidando inicialmente que es matricial):
La función empieza con un condiciional (SI) la condición es para evitar que te aparezcan errores (por ejemplo #N/A) cuando ho hay datos O(ESERROR(INDICE(Hoja1!$B$2:$B$10000;COINCIDIR(0;--ESNUMERO(COINCIDIR(Hoja1!$B$2:$B$10000;Hoja2!$A$1:A1;0));0)));INDICE(Hoja1!$B$2:$B$10000;COINCIDIR(0;--ESNUMERO(COINCIDIR(Hoja1!$B$2:$B$10000;Hoja2!$A$1:A1;0));0))=0)
pongo dos condiciones, que la función principal de errore (ESERROR) o que sea =0.
Si se produce el error te devuelve "", es decir te deja la celda en blanco (ten en cuenta que he puesto la función hasta la fila 28 y sólo hay datos en 4, el resto te aparecerían con 0 o errores).
Si no hay error es cuando se aplica la función que nos interesa
=INDICE(Hoja1!$B$2:$B$10000;COINCIDIR(0;--ESNUMERO(COINCIDIR(Hoja1!$B$2:$B$10000;Hoja2!$A$1:A1;0));0))
INDICE nos devuelve el valor de la intersección de una fila y una columna en un rango
El rango va de B2 a B10000 he considerado que con 10000 filas sería suficiente (podíamos haber "automatizado la toma del último valor a base de complicar la función), como puedes ver el rango será una columna
La fila que buscamos dentro de ese rango viene dada por COINCIDIR
COINCIDIR nos devuelve la posición relativa de un elemento de una matriz que coincide con un valor
El valor que buscamos es 0 y la matriz de búsqueda viene dada por
--ESNUMERO(COINCIDIR(Hoja1!$B$2:$B$10000;Hoja2!$A$1:A1;0))
dejamos de momento --ESNUMERO y veamos
COINCIDIR(Hoja1!$B$2:$B$10000;Hoja2!$A$1:A1;0)
Nuevamente usamos la función coincidir como en el caso anterior lo que buscamos ahora es un valor dado por el rango Hoja1!$B$2:$B$10000 (matriz)
Este valor lo buscamos en el rango Hoja2!$A$1:A1, verás que la primera referencia es absoluta y la segunda relativa, por lo que al copiar la función en filas sucesivas el rango se va a ir incrementando Hoja2!$A$1:A2, Hoja2!$A$1:A3,..., el tipo de coincidencia es 0 o lo que es lo mismo el primer valor que es exactamente igual al valor buscado.
Si encuentra el valor nos devolverá su posición, y si no lo encuentra un error
Ahora viene la parte en la que no sé si me explicaré bien,
con --ESNUMERO hacemos lo siguiente, ESNUMERO comprueba si el valor encontrado es un número con lo que devuelve VERDADERO o no lo es, con lo que devuelve FALSO. Con el doble guión lo que hacemos es pasar el verdadero a 1 (unos) y el falso a 0 (ceros).
Si recuerdas tras este rollo (nada fácil de entender la primera vez) en el primer coincidir el valor que buscábamos era un 0 y lo buscábamos en el rango dado por --ESNUMERO(.......), rango que ahora hemos transformado en un rango de ceros y unos.
Así pues llegamos a la funció INDICE con unos valores que le permitiran devolvernos cada primer nombre distinto del listado de nombres.
La función debe ser matricial, ya que trabajaremos con conjuntos de valores y se introduce con Mayúsculas+Control+Intro
Luego
En la primera fila (la 2, ya que en la primera está el título de columna) la función busca el listado de nombres en el rango $A1:A1 de la Hoja 2 , obviamente no lo encuentra ya que sólo está el título, luego el segundo coincidir nos devolverá 0 (error realmente, pero con --ESNUMERO lo pasa a 0) como primer valor de la matriz de vuelta; el segundo coincidir nos va a decir Que la primera coincidencia con el valor 0 es el primer elemento 1, así INDICE nos devolvera el elemento 1 del listado.
En la segunda fila (la 3) la función es casi igual pero el rango de la Hoja2 pasa a ser el rango $A1:A2, es decir el título y el primer nombre del listado, ahora la función se encontrará que el segundo coincidir nos devolverá como primer término de la matriz encontrada 1 ya que el primer nombre del listado ya existe en el rango de la hoja anterior (en la fila 2), y como segundo valor 0 (si el segundo nombre del listado fuera igual que el primero nos devolvería 1), luego el segundo coincidir nos dará como valor de vuelta 2 e INDICE nos devolverá el segundo nombre.
Si seguimos copiando la función en la fila 4 tendremos Hoja2!$A$1:A4 y si revisamos los valores devueltos por cada parte de la función veremos que la matriz de ceros y unos queda como {1\1\1\1\1\1\1\1\1\0\......} con lo que el segundo coincidir nos devuelve 10 e INDICE nos dará el décimo valor de la lista para la fila 4. etc.
No sé si he conseguido explicarme, lo he repasado y parece que no he bailado nada de sitio.
Si siguel sin entender algo lo dices Y si alguien puede dar una explicación más clara que no se corte.
Un saludo desde Vitoria
P.S. Es más que probable que este sábado me pase por tu bonita localidad, esperemos que el tiempo medio acompañe.