VBA: Crea tus propias funciones o formulas.

Mediante VBA puedes crear tus propias funciones para realizar cálculos complejos (Si no estas familiarizado con VBA puedes leer este articulo antes de continuar) En esta ocasión te  mostraremos como hacer una función que calcule el impuesto de venta sobre cualquier celda a la que se aplique.

Lo primero que tienes que hacer es entrar al editor de VBA (Alt+F11) , luego en nuestro libro hacemos clic derecho sobre Microsoft Excel Objetos, luego seleccionamos Insertar y hacemos clic sobre Modulo, esto nos creara una sección en la que podemos agregar funciones y macros.

Pasos para agregar un modulo de codigo a VBA

Ahora hacemos doble clic sobre la nueva sección Módulo1 y agregamos este código:

Function CalculaImpuesto(Valor As Double) As Double
Dim calculo As Double
calculo = Valor * 0.13
CalculaImpuesto = calculo
End Function

Ventana de codigo para agregar la funcion

Ahora ya tenemos la función disponible para nuestra hoja de calculo.

Como utilizar la función en nuestra hoja de calculo.

La función que hemos creado esta ahora disponible como todas las demás funciones de Excel, para usarla ingresamos esto en cualquier celda

=CalculaImpuesto(A3)

Donde A3 puede ser cualquier valor numérico o celda que contenga algún numero.

Como usar la función personalizada

Explicación de la función.

Function CalculaImpuesto(Valor As Double) As Double
Dim calculo As Double
calculo = Valor * 0.13
CalculaImpuesto = calculo
End Function

Todas las funciones que creemos se deben colocar entre las secciones “Function …. End Function“, para este caso CalculaImpuesto, es el nombre de nuestra función y será el nombre que ocupemos para llamarla en nuestra hoja de calculo. La sección  “(Valor As Double)” indica que la función recibe un parámetro (o valor) de tipo Double y con nombre Valor (Double es un tipo de datos numérico e indica que contendrá un numero posiblemente con decimales), la parte As Double, indica que el resultado de la formula también sera de tipo Double.

Dim calculo As Double, declara una variable llamada calculo y que sera de tipo double, la linea calculo = Valor * 0.13, realiza el calculo de la formula multiplicando por 0.13 el valor que se recibe como parámetro y lo almacena en la variable Calculo. Finalmente en la linea CalculaImpuesto = calculo, indica que la función regresa el valor almacenado en la variable calculo (esto es el resultado Valor * 0.13).

Para regresar un valor en la formula siempre debemos hacerlo de esta forma:

NombreFuncion = Valor_a_devolver

Nota: Cuando guardes el archivo deberás hacerlo habilitado para macros con extensión .xlsm si tienes Excel en versiones 2007 o superiores.

[Actualización]: Si ademas deseas agregar las descripciones a tus funciones, te lo explicamos fácil en este otro articulo.

¿Te gustaría aprender más sobre macros?

He creado un curso  sobre macros, esta en video HD, donde puedes ver todo paso a paso, tendrás acceso de por vida incluso a las actualizaciones. Además hay un descuento especial para tí, para más información haz clic aquí.


Quizá te interesen estos otros articulos:

  • esteban

    Lo qu equisodeci Humberto es cómo poder disponer de información de los argumentos (ventana insertar fórmula). ¿Cómo se puede acceder a estas propiedades de la fórmula? Me gustariá que, por ejemplo, siguiendo el ejemplo de la función Colorcelda, el argumento “celda” disponga en esta ventana de un comentrio explicativo (por ejemplo “celda activa a determinar color” y un alias si es posible

  • esteban

    perdon me pasa por copiar y pegar en otro post lo mismo. Quise decir si hay manera de programar atributos a los argumentos (imagino que los argumentos de las funciones son en sí objetos con propiedades, entre ellas, una ayuda en línea, el tipo de dato, un alias (no el nombre directo) etc

    • Hola Esteban, si se puede hacer lo que deseas, voy a actualizar el articulo para explicar como hacerlo.

  • Daniel

    Disculpa, como podria trabajar con variables al crear una nueva función, porque lo he intentado y simplemente no encuentro la manera.
    De antemano muchas gracias.

    • lcruz

      Hola, si te refieres a variables dentro de la funcion deberias de usar VBA.

  • vgggg

    Gracias!!!!!!

  • RENE GONZALEZ

    yo quiero saber en que lenguaje de programaciòn esta hecho, y donde puedo descargar el manual para estudiar.

  • Erika

    En caso de crear una funcion que divida .. en caso de que el denominador sea cero… devuelva el error 532, es decir: #DIV/0!.. pero no el comentario sino el error… como seria??

  • Enrique Campos

    Me gustaría saber cómo se puede guardar una función o macro completamente en excel, y no solo en el libro, es decir, crearla y que se pueda usar en cualquier libro que abra o cree nuevo, sin tener que realizar la función nuevamente en cada uno.

    • Luis Cruz

      Hola Enrique, que bueno que preguntas esto, casualmente hace un tiempo escribí un articulo sobre como crear complementos, y eso es justo lo que necesitas para que tu funcion o macro este disponible en cualquier libro que crees o abras, siempre. La direccion es esta:

      http://excel.facilparami.com/2013/05/como-crear-complementos-para-excel-add-ins/

      En este sitio puedes encontrar muchas cosas realmente útiles para que usar Excel se más fácil.

  • ranminuya manga

    el programa es bueno solo quiero saber si este programa me sirve para acceder a información de algo, por ejemplo si puedo crear una función que me permita acceder a la información de mi municipio o localidad con solo dar un clic y escribir su nombre (el del municipio)

    • Luis Cruz

      Hola, utilizando VBA o macros puedes lograr cualquier cosa, es como crear un programa, pero requiere que conozcas algo de programación.

  • Edgardo

    Hola, Primero que todo te quiero dar las gracias por tu post.
    Mi pregunta es cómo puedo hacer para que no se me borre la función que creo, ya que cada vez que apago el computador la función desaparece, ni siquiera está disponible ni en el archivo ni en la hoja de cálculo donde la cree. Gracias de antemano.

  • Reyes

    Olle disculpa y si quiero hacer una formula donde me pida dos datos o 2 celdas
    esta la formula escrita ((dato1)*100)/dato2 como seria el codigo o como exclamo que necesito dos datos?

    • lcruz

      Hola podrias tener algo como:

      Function tuFuncion(dato1 As Double, datos2 as Double) As Double
      tuFuncion = dato1 * 100 / dato2
      End Function

      Como tienes solo multiplicaciones y divisiones no necesitas los paréntesis (el orden de los factores no altera el producto)

  • Jorge Garcia

    Que funcion debo usar para que en una resta de cantidades si el sumando es menor que el sustraendo el producto sea cero (0) y no la cantidad negativa.

  • EDGAR

    como puedo hacer que el valor de una celda se repita automáticamente en otra hoja de calculo cual seria la manera por favor

  • Carlos Górriz

    [email protected], mi problema es el siguiente:
    Quiero pasar datos de Access a Excel, me explico, tengo la base de datos Base y la tabla Tabla, el directorio donde se encuentra Base es C:\Aplicaciones
    Tabla tiene cinco campos, entre ellos estos dos:
    Id_Cliente Número
    N_Cliente Texto
    La idea es crear una función en Excel para todos los libros en los que la quiera usar donde si en la celda A1 de mi hoja Excel pongo 1, en la celda A2 me salga el dato N_Cliente que coincida con lo que he puesto en la celda A1.
    Os agradeceré una respuesta.
    Saludos y gracias.

  • Mauricio

    Hola estimados,

    Tengo una PC en la oficina y una en mi hogar, la de mi hogar tiene excel windows 2010, la formula BUSCARV solo hay BUSCAR y no puedo hacer de nignuna forma que esta función haga lo de la otra que si hay en mi oficina
    ¿como puedo hacer para añadirla a la barra de funciones del Excel
    Es una función extremadamente importante para mi trabajo en estadística diaria?

    Gracias
    Mauricio
    Quito
    Por favor su ayuda.

  • Oscar

    Disculpa yo cree una función que me funciona, pero ahora debo modificarla pero no al encuentro, como puedo ubicar a la función?

  • CRISTOBAL

    hola, es posible crear una macro para buscar datos? como debería hacerlo? lo que suelo utilizar es la funcion si anidada con indice o buscav pero resulta que la funcion si me tolera 64 anidadas y tengo muchos datos mas que 64. He leido que haciendo una macro es posible, la pregunta es: como poder hacerlo?

    saludos y muchas gracias

  • Mikel

    End SubSub Ocultar01()

    Application.ScreenUpdating = Falso
    Range(“G21”).Select
    For Each celda In Range(“G21:G600”)
    If celda.Value = 1 Then
    ActiveCell.EntireRow.Hidden = Falso
    Else
    ActiveCell.EntireRow.Hidden = True
    End If
    ActiveCell.Offset(1).Select
    Next
    ‘ActiveSheet.Protect “mazua”
    Range(“a1”).Select
    End Sub

    Necesito que en esta macro al llegar al valor de la celda
    se pare y me deje poner otro valor distinto al 1 y siga ejecutándose la macro. Con eso me evitaría tener que hacer 85 botones.

  • Aldo

    Quiero crear una funcion que utiliza if-else if pero no he tenido éxito en implemetarlo, por favor agradecería mucho su ayuda, la función es como sigue:

    function pat = ava(r,m)
    if r >= m
    pat = 1;
    elseif r0
    pat = r/m;
    elseif r<m&m<0
    pat = m/r;
    elseif
    pat = 0;
    end

    end

    • Aldo

      Corrijo la función es como esta:

      function pat = ava(r,m)
      if r >= m
      pat = 1;
      elseif r0
      pat = r/m;
      elseif (r<m&m<0)
      pat = m/r;
      else
      pat = 0;
      end

      end

  • Juan F HeL

    Muchas gracias. Me sirvió de mucho, sumamente explícito y entendible; sigue así amigo 🙂

    • lcruz

      Hola, me alegra que haya servido

  • David

    Buena tarde

    Agradeceria a la persona me pueda suministrar el codigo Visual Basic Excel 2013 para poder bloquear un archivo despues de una fecha determinada o un uso determinado.

    Lo tengo en 2010 pero en 2013 me refleja error.

    Muchas gracias.

  • Maria

    Hola

    Tengo el siguiente código pero no se actualiza automáticamente y lo que necesito es que cada vez que hago un cambio se refleje inmediatamente y no tenga que esta cerrado y guardando cambio para que se actualice.

    Gracias
    Function SumarColor(color As Range, rango As Range)
    ‘color: La celda que contiene el color a sumar
    ‘rango: El rango de celdas a considerar en la suma

    Dim resultado ‘Almacenará el resultado de la suma
    Dim celda As Range

    ‘Recorrer cada celda del rango
    For Each celda In rango
    ‘Sumar si el color de la celda es igual al color especificado
    If celda.Interior.ColorIndex = color.Interior.ColorIndex Then
    resultado = resultado + celda.Value
    End If
    Next celda

    SumarColor = resultado
    End Function