top of page

Numero de producto de suma

Tenemos los siguientes valores:















Debemos de enumerar todos los números de producto de Suma de la columna A.

Un número de producto de suma es aquel número que es divisible tanto por la suma de dígitos como por el producto de dígitos.


Por ejemplo, el número 135, es 1+3+5 = 9, y, 1*3*5=15, si dividimos 9 y 15 entre el número de dígitos, es decir, 3, nos devuelve un resto de cero, quiere decir que es divisible.


Pues, debemos de identificar de los valores de la columna A aquellos números que son número de producto de suma.


En la celda B2, usamos LET, creamos una variable, usamos EXTRAE como argumento texto, seleccionamos el rango A2:A10, como argumento posición inicial, usamos SECUENCIA, omitimos el argumento filas, como argumento columnas, usamos MAX, como argumento de MAX usamos LARGO, como argumento seleccionamos el rango A2:A10, como argumento numero de caracteres ponemos 1.


=LET(b;EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1);b)


¿Por qué usamos MAX(LARGO(A2:A10))?


Vamos a separar cada digito de cada celda, en el argumento posición inicial, le estamos indicando a partir de que posición debemos de extraer, la pregunta es cuantos caracteres se debe de extraer de cada cadena, al usar la funcion MAX, obtenemos la longitud máxima de todas las cadenas, por lo que extraemos dichos caracteres, aunque no todos tengan la misma longitud, donde aparecerán blancos para rellenar los dígitos que no ha, de esta manera, nos aseguramos de extraer cada carácter de cada cadena.


Probamos variable.


Obtenemos cada digito de cada cadena.












Vemos que los valores están alineados a la izquierda, quiere decir que están en formato de texto, pues, antes de EXTRAE, ponemos la funcion ABS.


Tenemos los dígitos alineados a la derecha, ya están en formato de número, pero, obtenemos error donde no hay dígitos, por lo que usamos la funcion SI.ERROR, y, si la expresión devuelve un error, que devuelva blanco.


=LET(b;SI.ERROR(ABS(EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1));"");b)



Creamos otra variable, la llamamos operaciones, usamos la funcion BYROW, como argumento array, ponemos la variable “b”, como argumento funcion, ponemos LAMBDA, creamos una variable, como argumento cálculo de LAMBDA, usamos SUMA como argumento ponemos la variable “x”, concatenamos con un espacio, concatenamos con la funcion PRODUCTO, como argumento ponemos la variable “x”, concatenamos con un espacio, concatenamos con la funcion SUMA, como argumento usamos LARGO y como argumento ponemos la variable “x”, concatenamos con una barra inclinada.


=LET(b;SI.ERROR(ABS(EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1));"");operaciones;BYROW(b;LAMBDA(x;SUMA(x)&" "&PRODUCTO(x)&" "&SUMA(LARGO(x))&"/"));operaciones)


Obtenemos una matriz desbordada en vertical donde en cada celda tenemos la suma de cada digito, la multiplicación, un recuento de dígitos, y, una barra inclinada.
















Usamos CONCAT antes de BYROW.


=LET(b;SI.ERROR(ABS(EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1));"");operaciones;CONCAT(BYROW(b;LAMBDA(x;SUMA(x)&" "&PRODUCTO(x)&" "&SUMA(LARGO(x))&"/")));operaciones)


Obtenemos todos los datos en una fila.





Antes de CONCAT, usamos DIVIDIRTEXTO, como argumento texto, es la funcion CONCAT, como argumento delimitador de columna ponemos un espacio, como argumento delimitador de fila, ponemos la barra inclinada.


=LET(b;SI.ERROR(ABS(EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1));"");operaciones;DIVIDIRTEXTO(CONCAT(BYROW(b;LAMBDA(x;SUMA(x)&" "&PRODUCTO(x)&" "&SUMA(LARGO(x))&"/")));" ";"/");operaciones)


Obtenemos una matriz desbordada de tres columnas, en la primera columna tenemos la suma de dígitos, en la segunda columna, la multiplicación, y, en la tercera columna el recuento.


















Vemos que se ha añadido una ultima fila donde tenemos dos errores, pues, antes de DIVIDIRTEXTO, usamos la funcion EXCLUIR, como argumento matriz es la función DIVIDIRTEXTO, como argumento filas ponemos 1.


=LET(b;SI.ERROR(ABS(EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1));"");operaciones;EXCLUIR(DIVIDIRTEXTO(CONCAT(BYROW(b;LAMBDA(x;SUMA(x)&" "&PRODUCTO(x)&" "&SUMA(LARGO(x))&"/")));" ";"/");-1);operaciones)


Ya nos hemos desecho de la última fila.














Creamos otra variable la llamamos calculo1, usamos la funcion RESIDUO que nos devuelve el resto de una división, como argumento número, usamos la funcion TOMAR, como argumento matriz, ponemos la variable operaciones, omitimos el argumento filas, como argumento columnas, ponemos 1, vamos a obtener los datos de la primera columna, pero vemos que están alineados a la izquierda, es decir, están en formato de texto, pues multiplicamos por 1.


=LET(b;SI.ERROR(ABS(EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1));"");operaciones;EXCLUIR(DIVIDIRTEXTO(CONCAT(BYROW(b;LAMBDA(x;SUMA(x)&" "&PRODUCTO(x)&" "&SUMA(LARGO(x))&"/")));" ";"/");-1);calculo1;RESIDUO(TOMAR(operaciones;;1)*1


Como argumento numero divisor, volvemos a usar TOMAR, como argumento matriz es la variable operaciones, omitimos el argumento filas, como argumento columnas, ponemos -1, por lo que va a tomar la última columna que es la de recuentos.


=LET(b;SI.ERROR(ABS(EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1));"");operaciones;EXCLUIR(DIVIDIRTEXTO(CONCAT(BYROW(b;LAMBDA(x;SUMA(x)&" "&PRODUCTO(x)&" "&SUMA(LARGO(x))&"/")));" ";"/");-1);calculo1;RESIDUO(TOMAR(operaciones;;1)*1;TOMAR(operaciones;;-1));calculo1)


Obtenemos el residuo para cada suma.
















Donde aparece cero quiere decir que la división es exacta.


Creamos otra variable, la llamamos calculo2, volvemos a usar RESIDUO, como argumento número usamos INDICE, como argumento matriz, ponemos la variable operaciones, omitimos el argumento número de fila, como argumento numero de columna ponemos 2, y, multiplicamos por 1.


=LET(b;SI.ERROR(ABS(EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1));"");operaciones;EXCLUIR(DIVIDIRTEXTO(CONCAT(BYROW(b;LAMBDA(x;SUMA(x)&" "&PRODUCTO(x)&" "&SUMA(LARGO(x))&"/")));" ";"/");-1);calculo1;RESIDUO(TOMAR(operaciones;;1)*1;TOMAR(operaciones;;-1));calculo2;RESIDUO(INDICE(operaciones;;2)*1


Como argumento numero divisor, volvemos a usar TOMAR, como argumento matriz, ponemos la variable operaciones, omitimos el argumento filas, como argumento columnas, ponemos -1.


=LET(b;SI.ERROR(ABS(EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1));"");operaciones;EXCLUIR(DIVIDIRTEXTO(CONCAT(BYROW(b;LAMBDA(x;SUMA(x)&" "&PRODUCTO(x)&" "&SUMA(LARGO(x))&"/")));" ";"/");-1);calculo1;RESIDUO(TOMAR(operaciones;;1)*1;TOMAR(operaciones;;-1));calculo2;RESIDUO(INDICE(operaciones;;2)*1;TOMAR(operaciones;;-1));calculo2)


Obtenemos el resto para la operación de multiplicación.
















Como argumento calculo de LET, usamos la funcion IGUAL, como argumento texto1, ponemos la variable calculo1, como argumento texto2, ponemos la variable calculo2.


=LET(b;SI.ERROR(ABS(EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1));"");operaciones;EXCLUIR(DIVIDIRTEXTO(CONCAT(BYROW(b;LAMBDA(x;SUMA(x)&" "&PRODUCTO(x)&" "&SUMA(LARGO(x))&"/")));" ";"/");-1);calculo1;RESIDUO(TOMAR(operaciones;;1)*1;TOMAR(operaciones;;-1));calculo2;RESIDUO(INDICE(operaciones;;2)*1;TOMAR(operaciones;;-1));IGUAL(calculo1;calculo2))


Obtenemos VERDADERO donde los valores son iguales, y, FALSO donde no lo es.















Nos interesan los valores VERDADEROS, antes de IGUAL ponemos la funcion FILTRAR, como argumento array seleccionamos el rango A2:A10, como argumento Include es la funcion IGUAL.


=LET(b;SI.ERROR(ABS(EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1));"");operaciones;EXCLUIR(DIVIDIRTEXTO(CONCAT(BYROW(b;LAMBDA(x;SUMA(x)&" "&PRODUCTO(x)&" "&SUMA(LARGO(x))&"/")));" ";"/");-1);calculo1;RESIDUO(TOMAR(operaciones;;1)*1;TOMAR(operaciones;;-1));calculo2;RESIDUO(INDICE(operaciones;;2)*1;TOMAR(operaciones;;-1));FILTRAR(A2:A10;IGUAL(calculo1;calculo2)))


Aceptamos y ya lo tenemos.
















Miguel Angel Franco

 
 
 

Comments


© 2019 Miguel Ángel Franco García

bottom of page