Extraer dígitos para código EAN 13

Anteriormente hice una consulta para sumar los dígitos pares por un lado y por otro los dígitos impares de un número, CONTESTADA muy amablemente por el amigo Mauricio;(al que por cierto no localizo entre los expertos)
La cuestión:
Quisiera extraer la suma de los dígitos que ocupen las posiciones pares (no que su valor sea par) por un lado y por otro la suma de los dígitos que ocupen las posiciones impares del citado número (El número de dígitos es variable entre 1 y 12).
Ejemplo:
Del número 456912
Las posiciones pares las ocupan los dígitos 5, 9, y 2
Las posiciones impares las ocupan los dígitos 4, 6, y 1

1 Respuesta

Respuesta
1
Me pregunto cómo consideras las posiciones pares e impares:
¿De derecha a izquierda (como parece lógico suponer)?
O de izquierda a derecha, (¿cómo parece indicar tu ejemplo)? Nota que si tiene un número par de cifras, el resultado será afectado considerablemente, según el sentido que tomes.
Por tal motivo la función que desarrollé, permite que elijas el sentido. Tal vez sea redundante, y siempre la utilices en un mismo sentido, pero ante la falta de claridad de la pregunta, incluí esta posibilidad de selección. (0 para Izquierda a derecha, 1 para el sentido derecha a izquierda)
La misma función sirve tanto para calcular suma de posiciones pares O suma de posisiciones impares, según el parámetro que incluyas como argumento en la fórmula (0 para pares, 1 para impares)
Vi que fuiste instruido en (o, por lo menos, invitado a) introducir una función en un archivo. De todos modos reitero los pasos:
Activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "Módulo") y pega el siguiente código:
Public Function SsPOS(ByVal Numero As Long, tipo As Integer, Sentido As Integer)
Application.Volatile
If Len(Trim(Numero)) < 2 Then
SsPOS = Numero
Else
NumTmp = Trim(Str(Numero))
UltDig = Len(NumTmp)
If tipo > 1 Then
SsPOS = "MAL TIPO!"
Exit Function
Else
'Tipo = 1 Impares , Tipo = 0 Pares
DigAct = Val(IIf(tipo, 2, 1))
End If
If Sentido > 1 Then
SsPOS = "MAL SENTIDO!"
Exit Function
Else
'Calculo de suma de factores
If Sentido Then
'Sentido = 1 :de derecha a izquierda
Do
dig = Val(Mid(NumTmp, UltDig - DigAct + 1, 1))
SsPOS = SsPOS + dig
DigAct = DigAct + 2
Loop While DigAct <= UltDig
Else
'Sentido = 0 :de izquierda a derecha
Do
dig = Val(Mid(NumTmp, DigAct, 1))
SsPOS = SsPOS + dig
DigAct = DigAct + 2
Loop While DigAct <= UltDig
End If
End If
End If
End Function
Cierra el editor y graba el archivo.
Bien, deyplan, Ahora tienes una nueva función disponible (SsPos) en el archivo donde colocaste este código.
Su sintaxis es:
=SsPos(Numero,Pares o Impares, de Izq. a der o de der a izquierda)
El primer argumento, puede ser el número o la dirección de una celda que lo contenga.
El segundo puede ser:
0 para suma los números pares
1 para suma los números impares
El tercer argumento es:
0 para considerarlo de Izquierda a derecha
1 para considerarlo de derecha a izquierda
Para obtener la suma de las cifras en posiciones pares de tu ejemplo, suponiendo que 456912 estuviera en la celda B4, usa esta fórmula:
=SsPos(B4,0,0)
[Considera si sueles usar comas o punto y coma para separar argumentos de las funciones. Yo usé ","]
Y para los impares:
=SsPos(B4,1,0)
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
A cambio de mi tiempo, sólo te pido dos cosas:
- Finaliza (con puntaje y comentario) esta pregunta
- Ingresa al sitio www.porloschicos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas