Excel Avanzado

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

Excel Avanzado

Función Abs

| 8 comentarios

La Función Abs obtiene el valor absoluto de un número.

Para utilizarla en Excel se va a la barra de fórmulas matemáticas y se elige la opción ABS, solo se debe especificar el número o la celda que se quiere hallar. Ahora en VBA se puede generar una macro de modo que se ejecute directamente.

Ejemplo 1: Valor Absoluto de un número

Sub Abs_Número()
Range("B1") = Abs(Range("A1"))
End Sub

Ejemplo 2: Valor Absoluto para un rango de valores

Sub Abs_Rango()
Range("B1") = "=+ABS(RC[-1])"
Range("B1").Select
Selection.AutoFill Destination:=Range("B1:B3")
Range("B1:B3").Select
End Sub

Ejemplo 3: Valor Absoluto con condicionales

Primero se tiene una lista de valores, a los cuales se saca el valor absoluto, de aquí se obtiene el total (suma de valores absolutos) y se puede agregar un condicional, siempre que sea mayor (o menor) a un valor especifico (en el ejemplo 16), nos saldrá como un Exceso (o Déficit), de acuerdo a lo que se especifique en la macros.

Sub Abs_Condicional()
Range("B1") = "=+ABS(RC[-1])"
Range("B1").Select
Selection.AutoFill Destination:=Range("B1:B3")
Range("B1:B3").Select
Range("B4") = "=SUM(R[-3]C:R[-1]C)"
If Range("B4") > 16 Then Range("B4").Value = "Exceso"
End Sub

8 comentarios

  1. El ejmplo 2 me ha aportado un nuevo conocimiento, el autocompletar un rango mediante AutoFill mediante la sentencia

    Selection.AutoFill Destination:=Range(“B1:B3″)

    Le veo bastante aplicación sobre todo para el completado de tablas que normalemnte se usan en Excel a modo de base de datos; sin embargo, el problema es que siendo una base de datos la cantidad de registros es variable y se requiere de una forma de saber cuál es la última fila de la hoja.

    Yo normalmente lo hago recorriendo la tabla de la siguiente manera:
    Sub otraforma()
    Range("A1").Select
    Do While Not IsEmpty(ActiveCell)
    ActiveCell.Offset(0, 1).Value = "=+ABS(RC[-1])"
    ActiveCell.Offset(1, 0).Activate
    Loop
    Range("B4") = "=SUM(R[-3]C:R[-1]C)"
    If Range("B4") > 16 Then Range("B4").Value = "Exceso"
    End Sub

    pero esto tiene el problema del tiempo o uso de memoria si la tabla es muy grande. Estimo que esto debe poder solucionarse con una función que identifique la última fila de la tabla.

    Agradeceré su apoyo.

    Saludos,
    Wilbert Ríos

    • Buenas, en mi caso tengo la misma duda de como hacer que repita el proceso hasta un determinado o celda, pero como creo que esto se lograría con la funcion FOR y DO y con un condional If si la celda tiene un valor seguir si no acabar ahi.

      • Bueno te comento Alan lo que yo generalmente hago:

        1. Determino la última celda con una variable, de dos maneras:

        1)
        y = 13 (última fila conocida)
        y = Worksheets("Hoja1").Range("A" & Worksheets("Hoja1").Rows.Count).End(xlUp).Row (última fila desconocida)

        2. Se digita el FOR

        For i = 1 to y
        "aquí va el código que ejecuta la actividad"
        next i

      • Bueno te comento Alan lo que yo generalmente hago:

        1. Determino la última celda con una variable, de dos maneras:

        a)
        y = 13 (última fila conocida)
        b)
        y = Worksheets("Hoja1").Range("A" & Worksheets("Hoja1").Rows.Count).End(xlUp).Row (última fila desconocida)

        2. Se digita el FOR

        For i = 1 to y
        "aquí va el código que ejecuta la actividad"
        next i

  2. Bueno te comento Alan lo que yo generalmente hago:

    1. Determino la última celda con una variable, de dos maneras:

    a)
    y = 13 (última fila conocida)
    b)
    y = Worksheets("Hoja1").Range("A" & Worksheets("Hoja1").Rows.Count).End(xlUp).Row (última fila desconocida)

    2. Se digita el FOR

    For i = 1 to y
    "aquí va el código que ejecuta la actividad"
    next i

  3. Como seria el codigo para una sumatoria de una columna de valores absolutos. Entiendase que cada valor absoluto es resultado de una diferencia.

  4. tengo una Excel de datos donde las columnas a,b,c y d tienen fórmulas y de la columna e a la ah son datos que voy añadiendo, me gustaría saber si me pueden mandar el texto de una macro en la que conforme se añadan filas de datos las celdas de las columnas a,b,c y d se autocopien las fórmulas de la fila anterior.
    gracias

    • De hecho con esta instrucción

      Selection.AutoFill Destination:=Range(“B1:B3″)

      del ejercicio 2 se puede, no lo sabia, pero ahora ya lo se.

      saludos

Deja una respuesta

Los campos requeridos estan marcados con *.