Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Operadores Matemáticos en VBA

| 12 comentarios

Los operadores aritméticos nos permiten realizar cálculos matemáticos. VBA maneja la mayor parte de los operadores aritméticos habituales en los lenguajes de programación:

Captura de pantalla 2012 06 02 a las 18.09.02 300x141 Operadores Matemáticos en VBA

(Para una mayor visualización de la imagen, hacer click en la misma)

En general, el tipo devuelto por la ejecución de la operación, es el del tipo del mas preciso de los operadores, salvo que el resultado supere su rango; en ese caso devolverá el siguiente tipo de mayor precisión. Esta regla tiene muchas excepciones.

Si se trata de asignar un resultado fuera del rango de valores de la variable que va a recibir el resultado de la operación, se generara un error de “Desbordamiento” y se interrumpirá la ejecución del código, salvo que el error fuera capturado y tratado.

Cabe destacar que existe el valor Empty, el cual VBA lo trata como el valor cero y se maneja igual que el cero para cualquier operación aritmética (fuera de VBA).

Operador Suma (+)

Sirve para asignar el resultado de la suma de dos números. La forma de usarlo es:

Resultado = val1 + val2

Val1 y val2 son los operandos, pudiendo ser cualquier valor numérico o expresiones que lo generen. La variable resultado no tiene por que ser del mismo tipo de variable que los operandos.

VBA permite utilizar como operandos tipos numéricos distintos. Por ejemplo podemos usar un Byte con un Long o con un tipo Date. Cuando se utilizan tipos distintos, VBA cambia el menos preciso al tipo mas preciso. Por ejemplo si vamos a sumar un Integer con un Long, VBA realiza un cambio al tipo Integer por un Long, antes de empezar la operación. Si uno de los tipos fuera Date, el resultado también lo será.

Ejemplo sobre el uso del valor Empty:

Empty + 21 = 21
Empty + Empty = 0

Una de las limitaciones es que el resultado de la operación no debe sobrepasar la capacidad del tipo correspondiente a la variable que va a recibir el resultado de la misma, como sucede en el siguiente ejemplo:

 Sub SumaConError()     
      Dim variable1 As Byte
      variable1 = 10 + 20
      MsgBox variable1
      variable1 = 150 + 150
      MsgBox variable1
End Sub

Captura de pantalla 2012 06 01 a las 20.14.04 1 Operadores Matemáticos en VBA

Operador Resta (-)

Sirve para asignar el resultado de la sustracción entre dos números. Tiene dos formas sintácticas:

variable1 =  val1 – val2
 - Val1

En la primera la variable variable1 recibe el valor resultante de restar el val2 a el val1.

En la segunda se cambia el signo al valor numérico “val1”

Como hemos mencionado antes, si uno de los valores es de tipo Date, el resultado también lo será:

Ejemplo:

Sub RestaFecha()
    variable1 = Worksheets("hoja1").Range("D3").Value - Worksheets("hoja1").Range("F3").Value
   MsgBox variable1
End Sub

Captura de pantalla 2012 06 02 a las 18.19.06 300x86 Operadores Matemáticos en VBA

(Para una mayor visualización de la imagen, hacer click en la misma)

Operador Producto (*)

Sirve para asignar el resultado del producto de dos números. La forma en que se usa es:

variable1 = val1 * val2

El Resultado es una variable de tipo numérico y val1 * val2 pueden ser cualquier expresión como valor numérico.

Ejemplo sobre el uso del valor Empty:

Empty * 3,45 = 0

Operador División (/)                            

Asigna el resultado de la división de dos números. La forma de usarlo es:

variable1 = val1 / val2

El Resultado es una variable de tipo numérico y val1 / val2 pueden ser cualquier expresión como valor numérico. Si val2 fuera Empty, variable1 daría Error: “división por cero”. El tipo de resultado normalmente será del tipo Double (hay excepciones). Si uno de los operandos fuera decimal, el resultado también lo será.

Operador Potencia (^)

Asigna el resultado de elevar la base a la potencia del exponente. La forma de usarlo es:

variable1 = valor 1 ^ exponente

30^0 =1
5^2 = 25
3,456 ^Empty = 1

El exponente puede ser una fracción:

245^(1,2) = 736,2059

Ejemplo:

Sub Potencia()
   variable1 = Worksheets("hoja1").Range("D7").Value ^ Worksheets("hoja1").Range("F7").Value
   MsgBox variable1
End Sub

Si bien se pueden usar fracciones, para el caso especial de exponente = 0,5, se puede usar la función Sqr (), raíz cuadrada.

Sqr (16) = 4

Operador División Entera ( \)

Este operador realiza dos procesos:

Si no tuvieran valores enteros, realiza un redondeo del numerador y del denominador. Luego realiza la división y devuelve la parte entera de la división. La forma de usarlo es:

variable1 = valor 1 \ valor 2

Ejemplo:

8 \ 3 = 2
14 \ 4 = 3
5 \ 0,23 = Error
Empty \ 3 = 0

 

Operador Módulo o Resto (Mod)

Asigna el resto de una división entre dos números. Como en el caso anterior, previamente realiza un redondeo a cero decimales de ambos operandos, si estos tuvieran un valor distinto de entero. La forma de usarlo es:

variable1 = valor 1 Mod valor 2

Ejemplos:

7 Mod 2 =1
8,9 Mod 7,2 = 1
Empty Mod 7,2 = 0

Descargar ejemplo: Operadores Aritméticos en VBA

Elaborado por: Ana M. Di Nezio

12 comentarios

  1. Entonces, dicho de otra forma, el "Operador División Entera ( \)" te arroja el COCIENTE y el Operador Módulo o Resto (Mod) te arroja el RESIDUO (claro, previamente redondeando el dividendo y el divisor)

    (DIVIDENDO / DIVISOR = COCIENTE + RESIDUO)

    • Esto es incorrecto, lo correcto sería decir que:

      DIVIDENDO = DIVISOR * COCIENTE + RESIDUO

  2. Creo que un uso práctico de la función Operador División Entera ( \) sería aplicarlo en las planillas para el cálculo de las vacaciones o de las horas extras de los empleados.

    P.e.
    Minutos trabajados: 65
    Hora extras a aplicarse: 65/60 = 1 hora

  3. Como se puedo hacer para ejecutar una macro sencilla de Resta, porque cuando uso la propiedad Select no compila.

    Sub RESTA()

    Range("D3").Select = Range("C3").Select - Range("B3").Select

    End Sub

    • Te adjunto una propuesta, no compilaba debido a que se estaba usando la propiedad incorrecta. la propiedad correcta es . Formula

      Sub RESTA()
      Range(“D3″).Formula = Range(“C3″).Formula – Range(“B3″).Formula
      End Sub

      Saludos

    • Range("D3")=Val(Range("C3")) - Val(Range("B3"))

  4. ¿Existe la posibilidad de utilizar la función SUMA de Excel dentro de VBA para sumar los valores dentro de un rango o existe alguna función que permita hacer esto?

    Por ejemplo:

    SUMA(B2:B9)

    Saludos

    • si, el comando es
      sum ("B2:B9")

  5. hola, cómo poner el simbolo de theta?

  6. Buena noche..
    Disculpen tengo unas dudas si quiero restar una serie de fechas pero en la formula solo cambiaría el segundo rango especificando todas las celdas que tengan fechas,

    He tratado de hacerlo con diferentes funciones pero no me muestra el resultado que deseo, alguien que me pueda auxiliar..

  7. Buenas Tardes!, estoy realizando un formulario para nomina, y quiero hacer una formula en macro, que me seleccione el concepto (Salario, Comisiones, Días Libres, Domingo y feriados, Horas extras D y N, y las deducciones (ivss, LPH, PF, impuesto) dependiendo de la ocasión.

  8. Si quiero que el resultado de una suma quede plasmado en una celda, pero sólo el resultado, no la fórmula de la operación, como debe de ser escrito?.

Deja una respuesta

Los campos requeridos estan marcados con *.