Discussion:
comprobar numero de cuenta bancaria
(demasiado antiguo para responder)
macadu
2005-02-26 20:11:03 UTC
Permalink
Hola amigos. En la columna "C" de una hoja Excel introduzco los 20 dígitos de
cuentas bancarias con las siguientes separaciones mediante guiones, ejemplo:

1234-5678-90-1234567890

como puedo comprobar que los números de cuenta son correctos.

Se ruega respuesta a nivel novato.

Gracias de antemano.

Un saludo.
--
macadu
Fernando Arroyo
2005-02-26 22:00:05 UTC
Permalink
Post by macadu
Hola amigos. En la columna "C" de una hoja Excel introduzco los 20 dígitos de
1234-5678-90-1234567890
como puedo comprobar que los números de cuenta son correctos.
Se ruega respuesta a nivel novato.
Gracias de antemano.
Un saludo.
--
macadu
Lo puedes hacer mediante VBA (la función no está escrita por mí pero ahora mismo no sé de dónde la saqué, así que no puedo atribuírsela a su autor):


Public Function CalcularDC(Banco, Cuenta)
Dim Pesos As Variant, n, S1, S2, R1, R2 As Integer

Pesos = Array(6, 3, 7, 9, 10, 5, 8, 4, 2, 1)
S1 = 0
S2 = 0


For n = 0 To 7
Debug.Print Val(Mid(Banco, 8 - n, 1)) * Pesos(n)
S1 = S1 + Val(Mid(Banco, 8 - n, 1)) * Pesos(n)
Next
For n = 0 To 9
S2 = S2 + Val(Mid(Cuenta, 10 - n, 1)) * Pesos(n)
Next


R1 = 11 - S1 Mod 11
R2 = 11 - S2 Mod 11

R1 = IIf(R1 > 9, 1 - R1 Mod 10, R1)
R2 = IIf(R2 > 9, 1 - R2 Mod 10, R2)

CalcularDC = R1 & R2
End Function



o mediante una "pequeña formulilla" :-))

=SI(11-RESIDUO(SUMAPRODUCTO(EXTRAE(A1;FILA(1:8);1)*(EXTRAE({"0408051009070306"};(FILA(1:8)*2)-1;2)));11)>9;1-(RESIDUO(11-RESIDUO(SUMAPRODUCTO(EXTRAE(A1;FILA(1:8);1)*(EXTRAE({"0408051009070306"};(FILA(1:8)*2)-1;2)));11);10));11-RESIDUO(SUMAPRODUCTO(EXTRAE(A1;FILA(1:8);1)*(EXTRAE({"0408051009070306"};(FILA(1:8)*2)-1;2)));11))&SI(11-RESIDUO(SUMAPRODUCTO(EXTRAE(B1;FILA(1:10);1)*(EXTRAE({"01020408051009070306"};(FILA(1:10)*2)-1;2)));11)>9;1-(RESIDUO(11-RESIDUO(SUMAPRODUCTO(EXTRAE(B1;FILA(1:10);1)*(EXTRAE({"01020408051009070306"};(FILA(1:10)*2)-1;2)));11);10));11-RESIDUO(SUMAPRODUCTO(EXTRAE(B1;FILA(1:10);1)*(EXTRAE({"01020408051009070306"};(FILA(1:10)*2)-1;2)));11))

Para que funcione la fórmula tal como está, es necesario que el código del banco y la sucursal estén (juntos) en la celda A1, y el código de la cuenta en B1, o sea:

A1 B1
012345678 01234567890

Un saludo.


Fernando Arroyo
MS MVP - Excel
Fernando Arroyo
2005-02-26 22:06:41 UTC
Permalink
Donde puse:

A1 B1
012345678 01234567890


tiene que ser:

A1 B1
01234567 0123456789
macadu
2005-02-27 11:07:02 UTC
Permalink
Gracias por tu ayuda. Ya he comprobado que con la "formulita" funciona, sin
embargo, he creado el módulo VBA pero no se que tengo que hacer para que al
introducir los datos en la hoja excel se haga una llamada a este código para
que entre en funcionamiento. No se si me he explicado. Ya te comentaba que
soy muy novato. ¿En que celdas tendría que introducir los datos?.

Gracias una vez mas por tu ayuda.

Un saludo.
Post by Fernando Arroyo
A1 B1
012345678 01234567890
A1 B1
01234567 0123456789
Fernando Arroyo
2005-02-27 15:33:52 UTC
Permalink
La función está bien colocada en un módulo creado por ti.

Para invocarla desde una celda, lo único que tienes que hacer es poner su nombre precedido del signo igual y facilitar los argumentos. Por ejemplo, suponiendo que el código del banco estuviera en A1, el de la entidad en B1 y la cuenta en C1, en la celda tendrías que poner:

=CalcularDC(A1&B1;C1)

aunque también sería posible escribir los argumentos directamente:

=CalcularDC("01234567";"0123456789")



De paso, al revisar el código veo que hay una instrucción que se puede borrar porque debieron de ponerla mientras depuraban la función:

Debug.Print Val(Mid(Banco, 8 - n, 1)) * Pesos(n)



Y, también de paso, si usas "la formulita" y fuera posible que en algún momento tuvieras que insertar o eliminar filas entre la 1 y la 10, tendrías que usar la "versión extendida" :-[] de la misma. Suponiendo de nuevo que el código del banco estuviera en A1, el de la entidad en B1 y la cuenta en C1:

=SI(11-RESIDUO(SUMAPRODUCTO(EXTRAE(A1&B1;FILA(INDIRECTO("1:8"));1)*(EXTRAE({"0408051009070306"};(FILA(INDIRECTO("1:8"))*2)-1;2)));11)>9;1-(RESIDUO(11-RESIDUO(SUMAPRODUCTO(EXTRAE(A1&B1;FILA(INDIRECTO("1:8"));1)*(EXTRAE({"0408051009070306"};(FILA(INDIRECTO("1:8"))*2)-1;2)));11);10));11-RESIDUO(SUMAPRODUCTO(EXTRAE(A1&B1;FILA(INDIRECTO("1:8"));1)*(EXTRAE({"0408051009070306"};(FILA(INDIRECTO("1:8"))*2)-1;2)));11))&SI(11-RESIDUO(SUMAPRODUCTO(EXTRAE(C1;FILA(INDIRECTO("1:10"));1)*(EXTRAE({"01020408051009070306"};(FILA(INDIRECTO("1:10"))*2)-1;2)));11)>9;1-(RESIDUO(11-RESIDUO(SUMAPRODUCTO(EXTRAE(C1;FILA(INDIRECTO("1:10"));1)*(EXTRAE({"01020408051009070306"};(FILA(INDIRECTO("1:10"))*2)-1;2)));11);10));11-RESIDUO(SUMAPRODUCTO(EXTRAE(C1;FILA(INDIRECTO("1:10"));1)*(EXTRAE({"01020408051009070306"};(FILA(INDIRECTO("1:10"))*2)-1;2)));11))

Un saludo.


Fernando Arroyo
MS MVP - Excel
Post by macadu
Gracias por tu ayuda. Ya he comprobado que con la "formulita" funciona, sin
embargo, he creado el módulo VBA pero no se que tengo que hacer para que al
introducir los datos en la hoja excel se haga una llamada a este código para
que entre en funcionamiento. No se si me he explicado. Ya te comentaba que
soy muy novato. ¿En que celdas tendría que introducir los datos?.
Gracias una vez mas por tu ayuda.
Un saludo.
macadu
2005-02-27 16:03:08 UTC
Permalink
Fernando, perdoname por abusar tanto de tu paciencia. La verdad es que me
estás ayudando muchísimo. Ahora el problema con el que me encuentro es que
cuando el primer dígito es un "0" Excel lo suprime y por otra parte los
cálculos del dígito de control son erroneos. No sé donde puede estar el error.

Gracias una vez mas.

Saludos
Post by Fernando Arroyo
La función está bien colocada en un módulo creado por ti.
=CalcularDC(A1&B1;C1)
=CalcularDC("01234567";"0123456789")
Debug.Print Val(Mid(Banco, 8 - n, 1)) * Pesos(n)
=SI(11-RESIDUO(SUMAPRODUCTO(EXTRAE(A1&B1;FILA(INDIRECTO("1:8"));1)*(EXTRAE({"0408051009070306"};(FILA(INDIRECTO("1:8"))*2)-1;2)));11)>9;1-(RESIDUO(11-RESIDUO(SUMAPRODUCTO(EXTRAE(A1&B1;FILA(INDIRECTO("1:8"));1)*(EXTRAE({"0408051009070306"};(FILA(INDIRECTO("1:8"))*2)-1;2)));11);10));11-RESIDUO(SUMAPRODUCTO(EXTRAE(A1&B1;FILA(INDIRECTO("1:8"));1)*(EXTRAE({"0408051009070306"};(FILA(INDIRECTO("1:8"))*2)-1;2)));11))&SI(11-RESIDUO(SUMAPRODUCTO(EXTRAE(C1;FILA(INDIRECTO("1:10"));1)*(EXTRAE({"01020408051009070306"};(FILA(INDIRECTO("1:10"))*2)-1;2)));11)>9;1-(RESIDUO(11-RESIDUO(SUMAPRODUCTO(EXTRAE(C1;FILA(INDIRECTO("1:10"));1)*(EXTRAE({"01020408051009070306"};(FILA(INDIRECTO("1:10"))*2)-1;2)));11);10));11-RESIDUO(SUMAPRODUCTO(EXTRAE(C1;FILA(INDIRECTO("1:10"));1)*(EXTRAE({"01020408051009070306"};(FILA(INDIRECTO("1:10"))*2)-1;2)));11))
Un saludo.
Fernando Arroyo
MS MVP - Excel
Post by macadu
Gracias por tu ayuda. Ya he comprobado que con la "formulita" funciona, sin
embargo, he creado el módulo VBA pero no se que tengo que hacer para que al
introducir los datos en la hoja excel se haga una llamada a este código para
que entre en funcionamiento. No se si me he explicado. Ya te comentaba que
soy muy novato. ¿En que celdas tendría que introducir los datos?.
Gracias una vez mas por tu ayuda.
Un saludo.
Fernando Arroyo
2005-02-27 18:08:24 UTC
Permalink
Para evitar la pérdida de los ceros a la izquierda tienes (al menos) dos posibilidades:
- dar a las celda formato de texto (Formato->Celdas->solapa 'Número'->Categoría "Texto")
- anteponer a los códigos un apóstrofo ' con lo que "le dices" a Excel que el contenido de la celda es un texto.

Cuando hablas de cálculos erróneos, ¿te refieres a los casos en que se pierden ceros por la izquierda o también en el caso de códigos que no empiezan por cero/s?. Yo he hecho algunas pruebas tanto con la función como con "la formulita" y hasta ahora no he encontrado errores (y además ambos métodos dan los mismos resultados), pero también es cierto que el número de CCC auténticos de que dispongo no es muy grande...

Un saludo.


Fernando Arroyo
MS MVP - Excel
Post by macadu
Fernando, perdoname por abusar tanto de tu paciencia. La verdad es que me
estás ayudando muchísimo. Ahora el problema con el que me encuentro es que
cuando el primer dígito es un "0" Excel lo suprime y por otra parte los
cálculos del dígito de control son erroneos. No sé donde puede estar el error.
Gracias una vez mas.
Saludos
macadu
2005-02-27 21:05:02 UTC
Permalink
Ahora ya funciona todo perfectamente. Muchas gracias por vuestra inestimable
ayuda.

Saludos.
Post by Fernando Arroyo
- dar a las celda formato de texto (Formato->Celdas->solapa 'Número'->Categoría "Texto")
- anteponer a los códigos un apóstrofo ' con lo que "le dices" a Excel que el contenido de la celda es un texto.
Cuando hablas de cálculos erróneos, ¿te refieres a los casos en que se pierden ceros por la izquierda o también en el caso de códigos que no empiezan por cero/s?. Yo he hecho algunas pruebas tanto con la función como con "la formulita" y hasta ahora no he encontrado errores (y además ambos métodos dan los mismos resultados), pero también es cierto que el número de CCC auténticos de que dispongo no es muy grande...
Un saludo.
Fernando Arroyo
MS MVP - Excel
Post by macadu
Fernando, perdoname por abusar tanto de tu paciencia. La verdad es que me
estás ayudando muchísimo. Ahora el problema con el que me encuentro es que
cuando el primer dígito es un "0" Excel lo suprime y por otra parte los
cálculos del dígito de control son erroneos. No sé donde puede estar el error.
Gracias una vez mas.
Saludos
Manuel Nilo
2005-02-27 17:54:55 UTC
Permalink
En el caso de que uno de los números comience por cero tienes que introducir
el número como si fuera un texto, con el signo ' entonces funciona bien.
--
Un saludo

Manuel Nilo
Post by macadu
Fernando, perdoname por abusar tanto de tu paciencia. La verdad es que me
estás ayudando muchísimo. Ahora el problema con el que me encuentro es que
cuando el primer dígito es un "0" Excel lo suprime y por otra parte los
cálculos del dígito de control son erroneos. No sé donde puede estar el error.
Gracias una vez mas.
Saludos
Post by Fernando Arroyo
La función está bien colocada en un módulo creado por ti.
Para invocarla desde una celda, lo único que tienes que hacer es poner su
nombre precedido del signo igual y facilitar los argumentos. Por ejemplo,
suponiendo que el código del banco estuviera en A1, el de la entidad en
=CalcularDC(A1&B1;C1)
=CalcularDC("01234567";"0123456789")
De paso, al revisar el código veo que hay una instrucción que se puede
Debug.Print Val(Mid(Banco, 8 - n, 1)) * Pesos(n)
Y, también de paso, si usas "la formulita" y fuera posible que en algún
momento tuvieras que insertar o eliminar filas entre la 1 y la 10,
tendrías que usar la "versión extendida" :-[] de la misma. Suponiendo de
nuevo que el código del banco estuviera en A1, el de la entidad en B1 y
=SI(11-RESIDUO(SUMAPRODUCTO(EXTRAE(A1&B1;FILA(INDIRECTO("1:8"));1)*(EXTRAE({"0408051009070306"};(FILA(INDIRECTO("1:8"))*2)-1;2)));11)>9;1-(RESIDUO(11-RESIDUO(SUMAPRODUCTO(EXTRAE(A1&B1;FILA(INDIRECTO("1:8"));1)*(EXTRAE({"0408051009070306"};(FILA(INDIRECTO("1:8"))*2)-1;2)));11);10));11-RESIDUO(SUMAPRODUCTO(EXTRAE(A1&B1;FILA(INDIRECTO("1:8"));1)*(EXTRAE({"0408051009070306"};(FILA(INDIRECTO("1:8"))*2)-1;2)));11))&SI(11-RESIDUO(SUMAPRODUCTO(EXTRAE(C1;FILA(INDIRECTO("1:10"));1)*(EXTRAE({"01020408051009070306"};(FILA(INDIRECTO("1:10"))*2)-1;2)));11)>9;1-(RESIDUO(11-RESIDUO(SUMAPRODUCTO(EXTRAE(C1;FILA(INDIRECTO("1:10"));1)*(EXTRAE({"01020408051009070306"};(FILA(INDIRECTO("1:10"))*2)-1;2)));11);10));11-RESIDUO(SUMAPRODUCTO(EXTRAE(C1;FILA(INDIRECTO("1:10"));1)*(EXTRAE({"01020408051009070306"};(FILA(INDIRECTO("1:10"))*2)-1;2)));11))
Un saludo.
Fernando Arroyo
MS MVP - Excel
Post by macadu
Gracias por tu ayuda. Ya he comprobado que con la "formulita" funciona, sin
embargo, he creado el módulo VBA pero no se que tengo que hacer para que al
introducir los datos en la hoja excel se haga una llamada a este código para
que entre en funcionamiento. No se si me he explicado. Ya te comentaba que
soy muy novato. ¿En que celdas tendría que introducir los datos?.
Gracias una vez mas por tu ayuda.
Un saludo.
Loading...