top of page

Si_no por coordenadas

Para el siguiente ejemplo, tenemos cuatro columnas, en cada cuatro columnas tenemos cuatro coordenadas.


Las coordenadas de los puntos se dan en formato x, y.


Debemos de rellenar con Sí si los puntos están conectados, de lo contrario, debe de poner No.


Los puntos están conectados si el valor Y de un punto es el mismo que el valor X del siguiente punto para todos los puntos.


Por ejemplo, para los siguientes datos, que están rellenas las cuatro columnas.


Vemos que el valor 1 de la primera celda aparece en la segunda celda, el valor 3 de la segunda celda, aparece en la tercera celda, el valor 8 de la tercera celda, aparece en la cuarta celda, entonces, la condición se cumple, por lo que debe de aparecer Si.


Para saber si se cumple la condición, debemos de tener en cuenta las siguientes circunstancias:


Si tenemos las cuatro columnas rellenas, debe de haber tres coincidencias, en el ejemplo anterior, vemos que hay tres coincidencias, que son los números 1, 3, y 8, dichos números aparecen en mas de una celda, quiere decir que hay coincidencia, si solo aparecieran dos números, quiere decir que, de cuatro celdas, solo aparecen dos coincidencias, por lo que no se cumple la condición para cuando hay cuatro celdas rellenas, pero, el número de coincidencias cambiara dependiendo del número de celdas ocupadas.


No lo vamos a realizar de forma matricial, lo iremos haciendo fila por fila.


En la celda E2, usamos LET, creamos una variable, usamos la funcion LARGO, como argumento, seleccionamos el rango A2:D2.


=LET(longitud;LARGO(A2:D2);longitud)


Tenemos una matriz desbordada en horizontal de cuatro columnas, en cada columna, tenemos la cantidad de 4, que son las celdas ocupadas.


Antes de la funcion LARGO, usamos el condicional SI, como argumento prueba lógica, preguntamos si el resultado de LARGO es mayor a cero, como argumento valor si verdadero, ponemos 1, como argumento valor si falso, ponemos 0.


=LET(longitud;SI(LARGO(A2:D2)>0;1;0);longitud)


Obtenemos 1 donde es mayor a 0, y, 0 donde no lo es.


Antes del condicional SI, usamos la funcion SUMA.


=LET(longitud;SUMA(SI(LARGO(A2:D2)>0;1;0));longitud)

 

Nos devuelve 4.


Creamos otra variable, usamos el condicional SI, como argumento prueba lógica, preguntamos si la variable longitud es igual a 4, quiere decir, que las cuatro celdas están ocupadas, como argumento valor si verdadero, ponemos 3, quiere decir que debe de haber tres coincidencias, como argumento valor si falso, ponemos otro condicional SI, como argumento prueba lógica, preguntamos si la variable longitud es igual 3, como argumento valor si verdadero, ponemos 2, como argumento valor si falso del segundo SI, ponemos 1, es decir, si la longitud no es 4, ni 3, que ponga 1.


=LET(longitud;SUMA(SI(LARGO(A2:D2)>0;1;0));coinci;SI(longitud=4;3;SI(longitud=3;2;1));coinci)


Nos devuelve 3, quiere decir que cuando las cuatro celdas están ocupadas, debe de haber tres coincidencias.


Creamos otra variable, usamos la funcion REDUCE, como argumento valor inicial, ponemos blanco, como argumento array, usamos la funcion DIVIDIRTEXTO, como argumento texto, seleccionamos el rango A2:D2, como argumento delimitador de columna, entre comillas dobles, ponemos coma, como argumento funcion, ponemos LAMBDA, y, declaramos dos variables.


=LET(longitud;SUMA(SI(LARGO(A2:D2)>0;1;0));coinci;SI(longitud=4;3;SI(longitud=3;2;1));a;REDUCE("";DIVIDIRTEXTO(A2:D2;",");LAMBDA(x;y


Como argumento calculo de LAMBDA, usamos la funcion APILARV, como argumento matriz1, ponemos la variable “x”, como argumento matriz2, usamos la funcion HALLAR, como argumento texto buscado, ponemos la variable “y”, como argumento dentro del texto, usamos la funcion TEXTODESPUES, como argumento texto, seleccionamos el rango A2:D2, como argumento delimitador, entre comillas dobles, ponemos coma.


=LET(longitud;SUMA(SI(LARGO(A2:D2)>0;1;0));coinci;SI(longitud=4;3;SI(longitud=3;2;1));a;REDUCE("";DIVIDIRTEXTO(A2:D2;",");LAMBDA(x;y;APILARV(x;HALLAR(y;TEXTODESPUES(A2:D2;",")))));a)

 

Tenemos una matriz desbordada de cuatro columnas, y, cinco columnas, con la posición de la primera letra donde hay coincidencia, y, error donde no hay coincidencia.


La primera fila está de más, antes de REDUCE usamos la funcion EXCLUIR, como argumento matriz, es la funcion REDUCE, como argumento filas, ponemos 1.


=LET(longitud;SUMA(SI(LARGO(A2:D2)>0;1;0));coinci;SI(longitud=4;3;SI(longitud=3;2;1));a;EXCLUIR(REDUCE("";DIVIDIRTEXTO(A2:D2;",");LAMBDA(x;y;APILARV(x;HALLAR(y;TEXTODESPUES(A2:D2;",")))));1);a)


Usamos la funcion SI.ERROR, antes de EXCLUIR, como argumento valor es la funcion EXCLUIR, como argumento valor si error, ponemos blanco.

=LET(longitud;SUMA(SI(LARGO(A2:D2)>0;1;0));coinci;SI(longitud=4;3;SI(longitud=3;2;1));a;SI.ERROR(EXCLUIR(REDUCE("";DIVIDIRTEXTO(A2:D2;",");LAMBDA(x;y;APILARV(x;HALLAR(y;TEXTODESPUES(A2:D2;",")))));1);””);a)


Vamos a trabajar con cada fila de forma independiente, por lo que creamos otra variable, usamos la funcion BYROW, como argumento array, ponemos la variable “a”, como argumento funcion, ponemos LAMBDA, declaramos una variable, y, sumamos la variable “x”.


=LET(longitud;SUMA(SI(LARGO(A2:D2)>0;1;0));coinci;SI(longitud=4;3;SI(longitud=3;2;1));a;SI.ERROR(EXCLUIR(REDUCE("";DIVIDIRTEXTO(A2:D2;",");LAMBDA(x;y;APILARV(x;HALLAR(y;TEXTODESPUES(A2:D2;",")))));1);"");b;BYROW(a;LAMBDA(x;SUMA(x)));b)


Tenemos una matriz desbordada en vertical de cuatro filas, donde en cada celda tenemos el número de coincidencias.


Nos colocamos antes de BYROW, usamos el condicional SI, como argumento prueba lógica, preguntamos si el resultado de BYROW es mayor a 0, como argumento valor si verdadero, ponemos 1, como argumento valor si falso, ponemos 0.


=LET(longitud;SUMA(SI(LARGO(A2:D2)>0;1;0));coinci;SI(longitud=4;3;SI(longitud=3;2;1));a;SI.ERROR(EXCLUIR(REDUCE("";DIVIDIRTEXTO(A2:D2;",");LAMBDA(x;y;APILARV(x;HALLAR(y;TEXTODESPUES(A2:D2;",")))));1);"");b;SI(BYROW(a;LAMBDA(x;SUMA(x)))>0;1;0);b)

 

Tenemos una matriz desbordada con 0 donde no es mayor a cero, y, 1 donde es mayor a 0.


Sumamos el condicional SI.


=LET(longitud;SUMA(SI(LARGO(A2:D2)>0;1;0));coinci;SI(longitud=4;3;SI(longitud=3;2;1));a;SI.ERROR(EXCLUIR(REDUCE("";DIVIDIRTEXTO(A2:D2;",");LAMBDA(x;y;APILARV(x;HALLAR(y;TEXTODESPUES(A2:D2;",")))));1);"");b;SUMA(SI(BYROW(a;LAMBDA(x;SUMA(x)))>0;1;0));b)


Nos devuelve 3, quiere decir que para el rango A2:D2 hay tres coincidencias, por lo que se cumple la condición.


Usamos el argumento calculo de LET, usamos el condicional SI, como argumento prueba lógica, preguntamos si la variable “b” es mayo o igual a la variable coinci, como argumento valor si verdadero, entre comillas obles, ponemos Si, como argumento valor si falso, entre comillas dobles, ponemos No.


=LET(longitud;SUMA(SI(LARGO(A2:D2)>0;1;0));coinci;SI(longitud=4;3;SI(longitud=3;2;1));a;SI.ERROR(EXCLUIR(REDUCE("";DIVIDIRTEXTO(A2:D2;",");LAMBDA(x;y;APILARV(x;HALLAR(y;TEXTODESPUES(A2:D2;",")))));1);"");b;SUMA(SI(BYROW(a;LAMBDA(x;SUMA(x)))>0;1;0));SI(b>=coinci;"Si";"No"))


Aceptamos, arrastramos, y, ya lo tenemos.




Miguel Angel Franco

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page