Excel Avanzado

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

Excel Avanzado
Logo Excel Avanzado

Función WorksheetFunction.Sum

| 9 comentarios

Función WorksheetFunction.Sum

La  Función WorksheetFunction.Sum nos permite obtener el resultado de la suma de los argumentos ingresados a la función, esta  función devuelve el resultado el cual es del tipo DOUBLE. Los  tipos de argumentos que acepta esta función son del tipo numérico, bolean (verdadero, falso) donde VERDADERO tendrá el valor de ‘1’ y FALSO el valor de ‘0’. Además, la función WorksheetFunction.Sum en VBA solo acepta 30 argumentos como máximo y un argumento como mínimo.

Si solo si un argumento esta compuestos por un rango de celdas, es decir, el argumento es un vector , la función WorksheetFunction.Sum solo tomara en cuenta los valores numéricos de este argumento, en otras palabras ignorara los componentes del vector que sean del tipo lógico (VERDADERO o FALSO), las celdas vacías, y los textos contenidos en el vector.

Sintaxis:

Application.WorksheetFunction.Sum(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20,Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)

Si  utilizamos mas de 30 argumentos en la función , nos mostrara el siguiente error:

error

Ejemplo 1

Aplicar la  función WorksheetFunction.Sum con un  rango de celdas

VBA2

Vba

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

Lo que hace este código es leer  los valores de las celdas desde A1 hasta A10, luego aplicamos  la  función WorksheetFunction.Sum

e imprimimos el resultado en la celda C1 y lo mostramos en un message box.

Obteniendo el siguiente resultado:

VBA3

Ejemplo 2

Aplicar la  función WorksheetFunction.Sum  con un  rango de celdas (que incluya celdas vacías y valores lógicos), con un argumento numérico, y con un argumento lógico.

VBA5

 

VBA$

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

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

Esta función carga  los valores de A1  hasta A5 y lo asigna a una variable(vector),carga un valor numérico constante y lo asigna a la variable "b" y carga el valor de la celda  B1 (valor numérico).Finalmente, Suma todos estos argumentos con un argumento de valor lógico (en este caso TRUE=1).

La función WorksheetFunction.Sum ignorara las celdas vacías y los valores lógicos ,en este caso lo valores lógicos del primer argumento, cabe resaltar que la ya mencionada función suma el valor lógico del ultimo argumento , el cual hace que el resultado de la suma final se 124.1

Usando un messagebox   imprime el resultado.

VBA6

 

Autor: Carlos Perez Rodriguez

9 comentarios

  1. En el ejemplo 2 , tengo una duda, cuando usan como argumento el valor lógico True.
    Resultado = Application.WorksheetFunction.Sum(a, b, c, True)
    si la función worksheetFuntion.sum ignora las celdas vacías y valores lógicos.

    • No es necesario usar el argumento condicional True, ya que el valor lógico de esta condición también se sumara al rango de datos del argumento, cabe indicar que True es =1, entonce al poner como argumento el condicional True se estaría sumando 1 al rango de datos, incluso si no hubiera ninguna cantidad en el rago de datos que estamos utlizando como argumento el resultado será 1 en vez de cero.

  2. Que función reemplazaría a esta, si es que tengo más de 30 argumentos y estos no tienen posición fija sino van cambiando de forma iterativa cada 4 o 5 casillas. Muchas gracias por su atención.

    • Hola Jorge

      Posiblemente sea necesario usar un FOR para recorrer todo el contenido que posiblemente deba ser considerado, dentro del for un IF para determinar si debe ser incluído en el cálculo o no ... y dentro del IF un acumulador, que puede ser la función aqui descrita.

      Saludos.

    • Creo que estan estableciendo cambios sobre funciones inalterables, si quieren contar los valores lógicos utlicen otra funció “Contar Si” y listo, un ejemplo:

      Set myrange = Worksheets("Hoja1").Range("A1:A45")
      respuesta = Application.WorksheetFunction.Sum(myrange)

      respuesta2 = Application.CountIf(myrange, 1)

      MsgBox "La suma total del rango es: " & respuesta & " y la cantidad del valor lógico es: " & respuesta2

  3. Solo suma valores en el formato numérico si los transformo en el formato de moneda me sale cero porque ?

  4. Bueno dias..
    Como podria aplicar un a Macros que me permita sumar o consolidar datos de hojas de varios libros ejemplo:

    hoja 1 del libro 1 + hoja 1 del libro 2 + hoja 1 del libro 3

    Cada hoja tiene una planilla igual

    Se podra realizar?
    saludos cordiales

  5. Hola. Como haría para hacer una sumatoria en una base de datos de excel cargada dinamicamente por un formulario

  6. buenas ,como hago para que me sume un rango dado con APPLICATION.inputbox ,y me coloque la formula suma de forma(Rx:Cx) en la celda de abajo,es decir si vuelvo y corro la macro ,puedo meter otro rango diferente , e igual me suma, asi sean 2 celdas o 20 0 50 celdas ..gracias rene

Deja una respuesta

Los campos requeridos estan marcados con *.