¿Fórmula de Excel para buscar selectivamente una columna en función de otra columna?

¿Fórmula de Excel para buscar selectivamente una columna en función de otra columna?

¿Cómo crearía esta fórmula para aplicarla a la columna C (devolviendo un valor booleano)?

Si B2 contiene "manzana", vea si el número en A2 existe en otras celdas A cuya filanocontener "manzana" en la columna B. (Suponiendo que otras filas también tengan "manzana" en la columna B y pueden tener o no un número duplicado en la columna A).

A continuación se muestran algunos datos de ejemplo y el resultado deseado en la columna C: ingrese la descripción de la imagen aquí

Respuesta1

Utilice SI y CONTAR.SI:

=IF(B2="apple",COUNTIFS(A:A,A2,B:B,"<>"&B2)>0,"")

Primero comprobamos si B2 es "manzana"

En segundo lugar, verificamos si hay alguna que sea manzana y luego vemos si hay alguna que coincida con A2 y que no contenga "manzana" en la columna B.

ingrese la descripción de la imagen aquí

Respuesta2

Respuesta rápida:

Puedes hacer esto usando fórmulas matriciales. En tu celular C2escribe lo siguiente:

=IF(B2="apple",SUM(ISNUMBER(A:A)*(A:A=A2)*(B:B<>B2))>0,"")

luego use Ctrl+Shift+Enter para registrarlo como una fórmula matricial. Cópielo al resto de la columna después.

Explicación:

La IFfunción es del tipo normal: si en la columna B vemos "manzana", hacemos cosas; de lo contrario, simplemente escribimos la cadena vacía. Lo interesante es el segundo argumento: el que nos da el resultado en el caso de la “manzana”.

Ahora considere primero lo que haría Excel con una fórmula más simple: SUM(A:A=A2). Dentro de SUM, Excel ve una igualdad de la forma "rango = valor". Si ambos lados fueran valores simples, eso se evaluaría como un valor booleano, pero aquí debido a que usó Ctrl+Shift+Enter para activar fórmulas de matriz, Excelaplica la operación a cada elemento del lado izquierdo individualmentey los almacena en la memoria en una matriz temporal, que SUMacepta felizmente. El resultado es, por tanto, el número de celdas de la columna Aque son iguales a A2...

Bueno, casi. Este sería el caso si SUMse trataran TRUElos valores como 1 y FALSElos valores como 0. Si ese no fuera el caso, necesitaríamos convertir los valores booleanos en números, una forma sería una doble negación como esta: SUM(--(A:A=A2)). Sin embargo, el *operador en la fórmula real también se encargará de eso.

Volviendo a la suma real, tenemos el término adicional ISNUMBER(A:A). El principio es similar: esto volverá a funcionar por elementos en la columna, Aya que normalmente no sabe qué hacer con un rango. Luego, el *operador "multiplica" los dos rangos temporales que contienen booleanos elemento a elemento (básicamente aplicándoles la ANDoperación) y dándonos un nuevo rango de booleanos. (Esto está aquí solo para garantizar que las celdas en blanco no se cuenten como iguales a 0 y NOT(ISBLANK(A:A))también funcionarán).

Finalmente hacemos lo mismo con el rango adicional de valores booleanos que describen si cada valor individual en la columna Besnoigual a B2. Al final, SUMactúa sobre el rango resultante.

En conclusión, contamos filas con números en la primera columna, donde la fila actual coincide en column A, pero no en column B. Su condición simplemente dice que el número de estos es positivo.

Observación 1:
Usamos el *operador en lugar de la ANDfunción porque esta última acepta rangos como argumento de forma predeterminada, por lo que simplemente consumiría los rangos temporales en lugar de activar el "modo de matriz" y realizar una operación por elementos.

Observación 2:
Puede hacer que las columnas sean absolutas para copiar la fórmula a otras columnas, agregar números de fila (absolutos) a los rangos A:Ae B:Bignorar otras cosas potencialmente ubicadas en la misma columna (así como el rendimiento), o incluso crear rangos con nombre de las dos. columnas como IDsy Fruits, luego coloque estos nombres en la fórmula en lugar de los rangos.

información relacionada