Código EAN13 con macro de Excel

Tengo una hoja de excel y en una columna 20.000 registros distintos con 12 dígitos por registro, a los que tengo que calcularles el dígito 13 con una fórmula que paso a detallaros, a ver quien es el valiente que encuentra la solución al problema o tiene los conocimientos para hacer una macro y que lo calcule del tirón para cada uno de los registros.
El dígito de control es una parte importante de la codificación GS1, ya que gracias a él es posible la eliminación total de los errores de lectura del código; es el mecanismo que evita el error en el tratamiento automático del Código GTIN. Dicho de otra manera, el dígito de control nos ofrece seguridad TOTAL de lectura.
El proceso de cálculo es muy sencillo, basta con seguir tres puntos:
Numerando el código de Derecha a Izquierda, se multiplican por 1 los dígitos que ocupan posición par, y por tres los dígitos que ocupan posición impar. Se suman los valores de los productos obtenidos.
Se busca la decena superior al resultado de la suma anterior y se restan estos dos valores. El resultado obtenido es el dígito de control.

EL CÓDIGO GTIN-13 COMPLETO ES: 84 12345 67891 2

Respuesta
1

.#cálculo dígito verificador de código EAN13#

Buenos días, Adan

Considerando la gran cantidad de registros que deberás procesar, conviene que la fórmula fuese lo más eficiente posible. La que te propongo, multiplica por 3 a la suma de las posiciones impares (aprovechando la propiedad distributiva de la suma) y simplemente suma las posiciones pares. Finalmente, el resultado se resta del múltiplo superior.

Entonces, la fórmula que calcula el dígito verificador es la siguiente:

=MULTIPLO.SUPERIOR.MAT(EXTRAE(A1;1;1)+EXTRAE(A1;3;1)+EXTRAE(A1;5;1)+EXTRAE(A1;7;1)+EXTRAE(A1;9;1)+EXTRAE(A1;11;1)+3*(EXTRAE(A1;2;1)+EXTRAE(A1;4;1)+EXTRAE(A1;6;1)+EXTRAE(A1;8;1)+EXTRAE(A1;10;1)+EXTRAE(A1;12;1));10)-(EXTRAE(A1;1;1)+EXTRAE(A1;3;1)+EXTRAE(A1;5;1)+EXTRAE(A1;7;1)+EXTRAE(A1;9;1)+EXTRAE(A1;11;1)+3*(EXTRAE(A1;2;1)+EXTRAE(A1;4;1)+EXTRAE(A1;6;1)+EXTRAE(A1;8;1)+EXTRAE(A1;10;1)+EXTRAE(A1;12;1)))

Si, eventualmente, quisieras una fórmula que devuelva directamente el código completo con el dígito verificado incluido, usa esta variante:

=A1*10+MULTIPLO.SUPERIOR.MAT(EXTRAE(A1;1;1)+EXTRAE(A1;3;1)+EXTRAE(A1;5;1)+EXTRAE(A1;7;1)+EXTRAE(A1;9;1)+EXTRAE(A1;11;1)+3*(EXTRAE(A1;2;1)+EXTRAE(A1;4;1)+EXTRAE(A1;6;1)+EXTRAE(A1;8;1)+EXTRAE(A1;10;1)+EXTRAE(A1;12;1));10)-(EXTRAE(A1;1;1)+EXTRAE(A1;3;1)+EXTRAE(A1;5;1)+EXTRAE(A1;7;1)+EXTRAE(A1;9;1)+EXTRAE(A1;11;1)+3*(EXTRAE(A1;2;1)+EXTRAE(A1;4;1)+EXTRAE(A1;6;1)+EXTRAE(A1;8;1)+EXTRAE(A1;10;1)+EXTRAE(A1;12;1)))

La fórmula se vé compleja porque está dos veces dentro de si misma pero no es un caso para resolver con macros.

Espero que te sirva (y que no demore demasiado su cálculo).

Comentame si te funcionó

Abrazo

Fernando

(Buenos Aires - Argentina)

¡Gracias!

Aun no he tenido ocasión de probarla, por que me pasaron otra y esa ya me sirvió, pero igualmente valoro tu esfuerzo y lo agradezco de corazón, en cuanto tenga un rato para probarla te haré saber si funciona correctamente. Un saludo

1 respuesta más de otro experto

Respuesta
1

Para un nº de que esté en la celda A1, cópiala tantas veces como quieras. Aunque excel tira de puro procesador para hacer cálculos de fórmulas. Si tu pc no es ninguna maravilla, 20k fórmulas como esta te van a bloquear el excel un buen rato.

=concatenar(a1;multiplo.superior((valor(extrae(texto(a1;0);1;1))*1)+(valor(extrae(texto(a1;0);2;1))*3)+(valor(extrae(texto(a1;0);3;1))*1)+(valor(extrae(texto(a1;0);4;1))*3)+(valor(extrae(texto(a1;0);5;1))*1)+(valor(extrae(texto(a1;0);6;1))*3)+(valor(extrae(texto(a1;0);7;1))*1)+(valor(extrae(texto(a1;0);8;1))*3)+(valor(extrae(texto(a1;0);9;1))*1)+(valor(extrae(texto(a1;0);10;1))*3)+(valor(extrae(texto(a1;0);11;1))*1)+(valor(extrae(texto(a1;0);12;1))*3);10)-((valor(extrae(texto(a1;0);1;1))*1)+(valor(extrae(texto(a1;0);2;1))*3)+(valor(extrae(texto(a1;0);3;1))*1)+(valor(extrae(texto(a1;0);4;1))*3)+(valor(extrae(texto(a1;0);5;1))*1)+(valor(extrae(texto(a1;0);6;1))*3)+(valor(extrae(texto(a1;0);7;1))*1)+(valor(extrae(texto(a1;0);8;1))*3)+(valor(extrae(texto(a1;0);9;1))*1)+(valor(extrae(texto(a1;0);10;1))*3)+(valor(extrae(texto(a1;0);11;1))*1)+(valor(extrae(texto(a1;0);12;1))*3)))

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas