Enteros de 18 digitos

26/07/2005 - 11:59 por Angel O | Informe spam
Hola a todos. Necesito hacer calcular el resto de números de 18 dígitos (o
alguno mas) dividido entre uno de 2. El problema es que Excel con la fórmula
"=Residuo(123456789012345678;97)" me devuelve "#¡NUM!" supongo que por que
el entero es demasiado largo. Alguna idea para hallar el resto de la
división entre un entero de 18 cifras entre 97?.

Gracias.

Àngel O.

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
26/07/2005 - 13:09 | Informe spam
No sé si habrá alguna forma más elegante de hacerlo, pero una posible solución sería usar el tipo de datos Decimal de VBA en una función personalizada. Por ejemplo:

Function MiResto(sNúmero As String, lDivisor As Long) As Long
Dim a As Variant
Dim n As Long

a = CDec(sNúmero)
n = lDivisor

For n = 0 To lDivisor
If Int((a - n) / lDivisor) = (a - n) / lDivisor Then
MiResto = n
Exit Function
End If
Next n
End Function


La sintaxis sería:

=MiResto("123456789012345678";97)

Es necesario pasar el número a dividir como una cadena de texto para evitar que Excel lo manipule. La función CDec se encarga de convertirlo en el tipo de datos Decimal, el cual admite hasta 29 dígitos si el número es un entero (y si yo no estoy malamente equivocado).

He intentado usar en la función el operador Mod de VBA (para evitar el bucle), pero se produce un desbordamiento.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Angel O" escribió en el mensaje news:
Hola a todos. Necesito hacer calcular el resto de números de 18 dígitos (o
alguno mas) dividido entre uno de 2. El problema es que Excel con la fórmula
"=Residuo(123456789012345678;97)" me devuelve "#¡NUM!" supongo que por que
el entero es demasiado largo. Alguna idea para hallar el resto de la
división entre un entero de 18 cifras entre 97?.

Gracias.

Àngel O.



Respuesta Responder a este mensaje
#2 KL
26/07/2005 - 13:17 | Informe spam
Hola Angel O,

Me temo que vas a tener un serio problema :-( Es que Excel solo
permite/reconoce hasta 15 digitos significativos en un valor numerico, los
demas los trunca convirtiendo en ceros. Mas informacion aqui:
http://support.microsoft.com/kb/78113/es

Saludos,
KL



"Angel O" wrote in message
news:
Hola a todos. Necesito hacer calcular el resto de números de 18 dígitos (o
alguno mas) dividido entre uno de 2. El problema es que Excel con la
fórmula
"=Residuo(123456789012345678;97)" me devuelve "#¡NUM!" supongo que por
que
el entero es demasiado largo. Alguna idea para hallar el resto de la
división entre un entero de 18 cifras entre 97?.

Gracias.

Àngel O.



Respuesta Responder a este mensaje
#3 Angel O
26/07/2005 - 18:27 | Informe spam
Otra vez Gracias Fernando. Me ha sido MUY, MUY útil tu ayuda. Yo me he liado
dividiendo el número inicial en bloques de 10 cifras, etc.. Muchas Gracias y
hasta la próxima


"Fernando Arroyo" escribió en el mensaje
news:%
No sé si habrá alguna forma más elegante de hacerlo, pero una posible
solución sería usar el tipo de datos Decimal de VBA en una función
personalizada. Por ejemplo:

Function MiResto(sNúmero As String, lDivisor As Long) As Long
Dim a As Variant
Dim n As Long

a = CDec(sNúmero)
n = lDivisor

For n = 0 To lDivisor
If Int((a - n) / lDivisor) = (a - n) / lDivisor Then
MiResto = n
Exit Function
End If
Next n
End Function


La sintaxis sería:

=MiResto("123456789012345678";97)

Es necesario pasar el número a dividir como una cadena de texto para evitar
que Excel lo manipule. La función CDec se encarga de convertirlo en el tipo
de datos Decimal, el cual admite hasta 29 dígitos si el número es un entero
(y si yo no estoy malamente equivocado).

He intentado usar en la función el operador Mod de VBA (para evitar el
bucle), pero se produce un desbordamiento.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Angel O" escribió en el mensaje
news:
Hola a todos. Necesito hacer calcular el resto de números de 18 dígitos (o
alguno mas) dividido entre uno de 2. El problema es que Excel con la


fórmula
"=Residuo(123456789012345678;97)" me devuelve "#¡NUM!" supongo que por


que
el entero es demasiado largo. Alguna idea para hallar el resto de la
división entre un entero de 18 cifras entre 97?.

Gracias.

Àngel O.



Respuesta Responder a este mensaje
#4 Fernando Arroyo
27/07/2005 - 11:07 | Informe spam
"Angel O" escribió en el mensaje news:
Otra vez Gracias Fernando. Me ha sido MUY, MUY útil tu ayuda. Yo me he liado
dividiendo el número inicial en bloques de 10 cifras, etc.. Muchas Gracias y
hasta la próxima




Me alegra saber que la función te ha sido útil, pero el caso es que lo de la división entre 97 me ha hecho pensar si lo que necesitas hacer es calcular los dígitos de control de códigos IBAN.

Si es esto, te diré que hace tiempo que andaba yo buscando una fórmula que fuera capaz de calcular estos dígitos en nuestro querido Excel, y con la ayuda del siguiente enlace:

http://www.ecbs.org/Download/EBS204_V3.2.pdf

creo haberla encontrado. Suponiendo que el CCC (Código de Cuenta de Cliente de 20 dígitos del sistema bancario español) estuviera en A1, la fórmula sería:

=REPETIR("0";LARGO(98-RESIDUO(RESIDUO(RESIDUO(RESIDUO(EXTRAE(A1;1;8);97)&EXTRAE(A1;9;8);97)&EXTRAE(A1&"142800";17;8);97)&EXTRAE(A1&"142800";25;2);97))=1)&98-RESIDUO(RESIDUO(RESIDUO(RESIDUO(EXTRAE(A1;1;8);97)&EXTRAE(A1;9;8);97)&EXTRAE(A1&"142800";17;8);97)&EXTRAE(A1&"142800";25;2);97)

La fórmula para devolver el código IBAN de 24 caracteres completo (con las letras correspondientes a España y los dígitos de control) sería:

="ES"&REPETIR("0";LARGO(98-RESIDUO(RESIDUO(RESIDUO(RESIDUO(EXTRAE(A1;1;8);97)&EXTRAE(A1;9;8);97)&EXTRAE(A1&"142800";17;8);97)&EXTRAE(A1&"142800";25;2);97))=1)&98-RESIDUO(RESIDUO(RESIDUO(RESIDUO(EXTRAE(A1;1;8);97)&EXTRAE(A1;9;8);97)&EXTRAE(A1&"142800";17;8);97)&EXTRAE(A1&"142800";25;2);97)&A1

He probado la fórmula con los códigos de mis cuentas bancarias y funciona bien (espero que no haya sido casualidad :-D), pero el problema es que ninguna de ellas tiene un cero como primer dígito de control, así que en este caso no sé si devolverá el resultado correcto (debería hacerlo, pero no tengo forma de saberlo con seguridad). Si lees este mensaje y tienes acceso a muchos CCC auténticos, te pido por favor si podrías verificar si la fórmula funciona en los casos en que el primer dígito de control resulta ser un cero. Lógicamente, serviría que esta prueba la hiciera cualquiera que lea este mensaje y se quiera tomar la molestia.

Un saludo.


Fernando Arroyo
MS MVP - Excel
www.excelesp.com
Respuesta Responder a este mensaje
#5 Angel O
27/07/2005 - 12:12 | Informe spam
Frenando. Si que tengo acceso a cuenats bancarias. Y te confirmo que con
cunetas que empiezan por 0 funciona correctamente. (la celda ha de tener
formato texto, como es lógico).

Mi problema es que tengo que calcular el dígito de control de cuentas
extranjeras, la longitud de las mismas varía dependiendo del país. Francia e
Italia (que son lo smas largos), son 23 dígitos, y pueden tener letras en
medio, con lo que al pasarl éstas a números, cada una se convierte en dos
cifras, con lo que el número a tratar pude tener 25 o 26 cifras. !! :(

En cualquier caso ha hecho la prueba con la función que me pasaste y de
momento me ha funcionado correctamente con todas las puebas que he hecho.

GRACIAS DE NUEVO.

"Fernando Arroyo" escribió en el mensaje
news:
"Angel O" escribió en el mensaje
news:
Otra vez Gracias Fernando. Me ha sido MUY, MUY útil tu ayuda. Yo me he


liado
dividiendo el número inicial en bloques de 10 cifras, etc.. Muchas Gracias


y
hasta la próxima




Me alegra saber que la función te ha sido útil, pero el caso es que lo de la
división entre 97 me ha hecho pensar si lo que necesitas hacer es calcular
los dígitos de control de códigos IBAN.

Si es esto, te diré que hace tiempo que andaba yo buscando una fórmula que
fuera capaz de calcular estos dígitos en nuestro querido Excel, y con la
ayuda del siguiente enlace:

http://www.ecbs.org/Download/EBS204_V3.2.pdf

creo haberla encontrado. Suponiendo que el CCC (Código de Cuenta de Cliente
de 20 dígitos del sistema bancario español) estuviera en A1, la fórmula
sería:

=REPETIR("0";LARGO(98-RESIDUO(RESIDUO(RESIDUO(RESIDUO(EXTRAE(A1;1;8);97)&EXT
RAE(A1;9;8);97)&EXTRAE(A1&"142800";17;8);97)&EXTRAE(A1&"142800";25;2);97))=1
)&98-RESIDUO(RESIDUO(RESIDUO(RESIDUO(EXTRAE(A1;1;8);97)&EXTRAE(A1;9;8);97)&E
XTRAE(A1&"142800";17;8);97)&EXTRAE(A1&"142800";25;2);97)

La fórmula para devolver el código IBAN de 24 caracteres completo (con las
letras correspondientes a España y los dígitos de control) sería:

="ES"&REPETIR("0";LARGO(98-RESIDUO(RESIDUO(RESIDUO(RESIDUO(EXTRAE(A1;1;8);97
)&EXTRAE(A1;9;8);97)&EXTRAE(A1&"142800";17;8);97)&EXTRAE(A1&"142800";25;2);9
7))=1)&98-RESIDUO(RESIDUO(RESIDUO(RESIDUO(EXTRAE(A1;1;8);97)&EXTRAE(A1;9;8);
97)&EXTRAE(A1&"142800";17;8);97)&EXTRAE(A1&"142800";25;2);97)&A1

He probado la fórmula con los códigos de mis cuentas bancarias y funciona
bien (espero que no haya sido casualidad :-D), pero el problema es que
ninguna de ellas tiene un cero como primer dígito de control, así que en
este caso no sé si devolverá el resultado correcto (debería hacerlo, pero no
tengo forma de saberlo con seguridad). Si lees este mensaje y tienes acceso
a muchos CCC auténticos, te pido por favor si podrías verificar si la
fórmula funciona en los casos en que el primer dígito de control resulta ser
un cero. Lógicamente, serviría que esta prueba la hiciera cualquiera que lea
este mensaje y se quiera tomar la molestia.

Un saludo.


Fernando Arroyo
MS MVP - Excel
www.excelesp.com
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida