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 de fejoal
1
1
fejoal, Por falta de tiempo para responder como me gusta hacerlo suspendo...
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.