Resultado de campo calculado erróneo

Espero podáis ayudarme.

En un informe, tengo dos columnas con valores y quiero calcular la variación % entre las dos:

Número clientes 2022 Numero clientes 2022 Variación

               8                                            5                                60,0%

Para calcular esto uso esta fórmula: =Abs(1-[Número clientes 2022]/[Número clientes 2021]), y hasta aquí todo bien.

Pero cuando el valor de la primera columna es inferior al valor de la segunda, la fórmula me da un resultado equivocado. Ej:

Número clientes 2022 Numero clientes 2022 Variación

              18                                          25                             28,0%

El resultado debería de ser negativo: -28%

¿Cómo puedo crear una fórmula que me de un resultado positivo cuando el primer número es mayor y un resultado negativo cuando es menor?

2 respuestas

Respuesta
1

Independiente al calculo, para que el resultado cumpla con esas condiciones, lo primero es eliminar la función ABS.

La función ABS devuelve 'el valor absoluto' (le suprime el signo) por lo que su respuesta siempre será un 'valor positivo'.

En la ventana de inmediato:

'Aplicando ABS
Clientes_2021 = 5
Clientes_2022 = 8
?Abs(1- clientes_2022/clientes_2021)
0,6
Clientes_2021 = 8
Clientes_2022 = 5
?Abs(1- clientes_2022/clientes_2021)
0,375
'El mismo calculo sin utilizar ABS
Clientes_2021 = 5
Clientes_2022 = 8
?1- clientes_2022/clientes_2021
-0,6
Clientes_2021 = 8
Clientes_2022 = 5
?1- clientes_2022/clientes_2021
0,375
'Si el cuadro de texto NO tiene formato porcentual
Clientes_2021 = 5
Clientes_2022 = 8
?format (1- clientes_2022/clientes_2021,"00.0%")
-60,0%
Clientes_2021 = 8
Clientes_2022 = 5
?format (1- clientes_2022/clientes_2021,"00.0%")
37,5%

¡Gracias!  Esto es genial.

Solo he tenido que invertir el uso de las comas y de los puntos y funciona de maravilla!

Hola Enrique, me he dado cuenta que en tus indicacione hay algo que no me cuadra. Si tomas tu ultimo ejemplo puedes ver como en las líneas de arriba pones Clientes 2021=5 y Clientes 2022=8, pero en las líneas de abajo estos valores están invertidos respeto al año.

Aplicando tu fórmula me encuentro con esto:

=Format(1-[# clienti 2021 -5K]/[# clienti 2022 -5k];"#,000")

Clientes 2022=18    Clientes 2021=25      Variación=-38,9%

En realidad el porcentaje debería de ser -28,0%.

¿Qué estoy haciendo mal? Obtengo resultados diferentes si el valor de 2022 es superior al 2021 o es al revés, el calculo no sale correcto.

Siento ser tan torpe con esto.

Acabo de ver el mensaje

En el ejemplo se utilizan dos datos, de años diferentes.

Para verificar la fórmula se mantiene la estructura (año2022/año2021) y se modifican los datos de referencia generando dos supuestos:

1.- Que la cifra aumente con respecto al año anterior

2.- Que la cifra disminuya con respecto al año anterior

Que sean las mismas cifras es lo de menos, son simples datos para un calculo:
En un supuesto 8/5 (aumenta)
En el otro 5/8 (disminuye)

Reconozco que no revise la fórmula, copie tu fórmula y no verifique el resultado fuese correcto, solo pretendía demostrar que devolvía valores positivos y negativos.

Y tienes razón, hay que invertir el resultado del calculo y eso se logra multiplicando por (-1) pero respeta el formato (añadiendo el signo de porcentaje) para que Format haga su magia.

clienti_2022= 18
clienti_2021= 25
?Format(-1*(1- clienti_2022/clienti_2021), "0.00%")
-28,00%
clienti_2022= 1
clienti_2021= 3
?Format(-1*(1- clienti_2022/clienti_2021), "0.000%")
-66,667%

He modificado (recortado) los nombres para que Access los admita como nombres de variable.

Respuesta
1

Pruebe con esta función

Public Function var_porc(dbnum1 As Double, dbnum2 As Double, Optional nforma As Byte) As Variant
'Función para obtener la variación porcentual
'Parámetros:
' dbnum1 - Primer dato
' dbnum2 - Segundo dato
 '            nforma: 1 = Retorna el resultado como decimal
 '                    2 = Retorna el resultado como valor absoluto
 '                    3 = Retorna el resultado como cadena en %
 'Elaborada por:
 '              EDUARDO PÉREZ FERNÁNDEZ
 'Fecha:        02/02/2023
  If nforma = 0 Then
    nforma = 1
  End If
 Select Case nforma
    Case 1 ' Com decimal
      var_porc = Round((dbnum2 - dbnum1) / dbnum1, 4)
    Case 2 ' Como valor absoluto
      var_porc = Round(((dbnum2 - dbnum1) / dbnum1) * 100, 2)
    Case 3 ' Como porcentaje
      var_porc = Format((dbnum2 - dbnum1) / dbnum1, "0.00%")
 End Select

Ejemplos ventana de inmediato

?var_porc(5,8,1)
 0,6
?var_porc(5,8,2) 
 60 
?var_porc(5,8,3) 
60,00%
?var_porc(8,5,1)
-0,375 
?var_porc(8,5,2)
-37,5 
?var_porc(8,5,3)
-37,50%
? Var_porc(25,18,1)
-0,28 

¡Gracias! 

Si le sirvió la respuesta no olvide valorarla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas