Start » VBA-Ejemplos » Calcular los Dígitos de control desde Excel VBA

Calcular los Dígitos de control desde Excel VBA

En este ejemplo presentamos un ejemplo de marcado VBA para calcular los dígitos de control de una cuenta bancaria española.

dccontrol

¿Qué son los dígitos de control?

Las cuentas bancarias españolas consisten de 4 grupos de dígitos. Los dígitos de control verifican los códigos de Entidad y Oficina (el primer dígito), y el Número de Cuenta (el segundo dígito). El algoritmo para calcular los dígitos de control se define en Norma bancaria 34 de AEB (Asociación Española de Banca).

Tarea

Queremos un programa que nos calcule los dígitos de control de una cuenta.

Un ejemplo de cuenta

0123 - 4567 - xx - 0123456789

Entidad0123
Oficina4567
Dígitos de controlxx
Cuenta0123456789

En el ejemplo arriba, los dígitos de control serían 81.

Empezamos

Abrimos un libro nuevo. Formateamos las celdas B3:E3 a TEXTO.

dccontrol

Crear el módulo

Entra a Herramientas - Macros - Editor VBA. A la izquierda ves (si no lo ves CTRL+R) algo como "ProyectoVBA (Tu libro). Marca ese proyecto. Insertar - Módulo.

Doble click en el módulo nuevo, y a la derecha sale un espacio blanco, es para el código. Herramientas - Referencias. Marca Microsoft ActiveX DataObjects x.x Library.
Ahora cierras el editor VBA, vuelves a Excel. Guardamos el libro.

El código

Sub DC_check()

Dim Bank As String
Dim Office As String
Dim DC As String
Dim Account As String
Dim BankOffice As String
Dim Valor1, Valor2, Valor3, Valor4, Valor5
DIm Valor6, Valor7, Valor8, Valor9, Valor10
Dim TestValue1 As Integer
Dim TestValue2 As Integer
Dim TestValueDC As Integer
'---------------------------------------------------
'recoger el número de cuenta
Bank = Range("B3").Text
Office = Range("C3").Text
DC = Range("D3").Text
Account = Range("E3").Text
BankOffice = Bank & Office
'---------------------------------------------------
'evaluar DC (1)
Valor1 = (Mid(BankOffice, 1, 1) * 4)
Valor2 = (Mid(BankOffice, 2, 1) * 8)
Valor3 = (Mid(BankOffice, 3, 1) * 5)
Valor4 = (Mid(BankOffice, 4, 1) * 10)
Valor5 = (Mid(BankOffice, 5, 1) * 9)
Valor6 = (Mid(BankOffice, 6, 1) * 7)
Valor7 = (Mid(BankOffice, 7, 1) * 3)
Valor8 = (Mid(BankOffice, 8, 1) * 6)

TestValue1 = Valor1 + Valor2 + Valor3 + Valor4 + _
Valor5 + Valor6 + Valor7 + Valor8

TestValue1 = (TestValue1 Mod 11)
TestValue1 = 11 - TestValue1

If TestValue1 = 10 Then TestValue1 = 1
If TestValue1 = 11 Then TestValue1 = 0
'---------------------------------------------------
'evaluar DC (2)
Valor1 = (Mid(Account, 1, 1) * 1)
Valor2 = (Mid(Account, 2, 1) * 2)
Valor3 = (Mid(Account, 3, 1) * 4)
Valor4 = (Mid(Account, 4, 1) * 8)
Valor5 = (Mid(Account, 5, 1) * 5)
Valor6 = (Mid(Account, 6, 1) * 10)
Valor7 = (Mid(Account, 7, 1) * 9)
Valor8 = (Mid(Account, 8, 1) * 7)
Valor9 = (Mid(Account, 9, 1) * 3)
Valor10 = (Mid(Account, 10, 1) * 6)

TestValue2 = Valor1 + Valor2 + Valor3 + Valor4 + Valor5 + _
Valor6 + Valor7 + Valor8 + Valor9 + Valor10

TestValue2 = (TestValue2 Mod 11)
TestValue2 = 11 - TestValue2

If TestValue2 = 10 Then TestValue2 = 1
If TestValue2 = 11 Then TestValue2 = 0
'---------------------------------------------------
'reconstituir las dos cifras del DC
TestValueDC = TestValue1 & TestValue2

'evaluar DC completo
If TestValueDC = DC Then
Test = True
MsgBox "Correcto."
Else
Test = False
MsgBox "DC no corresponde a esta cuenta." & vbCrLf & _
"[en este caso DC sería " & TestValueDC & ".]", vbOKOnly, vbInformation
End If

End Sub