¿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:
Respuesta1
Respuesta2
Respuesta rápida:
Puedes hacer esto usando fórmulas matriciales. En tu celular C2
escribe 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 IF
funció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 SUM
acepta felizmente. El resultado es, por tanto, el número de celdas de la columna A
que son iguales a A2
...
Bueno, casi. Este sería el caso si SUM
se trataran TRUE
los valores como 1 y FALSE
los 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, A
ya 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 AND
operació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 B
esnoigual a B2
. Al final, SUM
actú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 AND
funció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:A
e B:B
ignorar otras cosas potencialmente ubicadas en la misma columna (así como el rendimiento), o incluso crear rangos con nombre de las dos. columnas como IDs
y Fruits
, luego coloque estos nombres en la fórmula en lugar de los rangos.