Sumar unicamente celdas en negrita

En este post mostraré cómo sumar aquellas celdas que se encuentren de color negrita (Bold) mediante el uso de una función y una subrutina de Excel VBA. Se describe el uso de los parámetros por referencia y como ayudan a resolver este tipo de problemas. Por último y para curiosidad del lector lo mostrado líneas abajo se puede utilizar como plantilla para realizar sumas en caso se requiera una suma cuando se cumpla determinados criterios.

1. Paso por valor y por referencia

Cuando se crea un procedimiento por ejemplo: sumamodif(a as Double,b as Double) que hace a = a + b, por defecto Excel VBA asigna las variables a y b pasadas por valor, y que significa esto??, pues significa que a la función sumamodif se pasan una copia de los valores a y b por lo que no se alteran los valores originales que se pasaron a la función. Para aclarar analicemos el siguiente código:

Function Test1() as Double
Dim x as Double
Dim y as Double
x = 15
y = 10
Call sumamodif(x,y)
Msgbox(x)'en la ventana de mensaje el valor de x seguirá siendo 15 y no 25
End Function

Al ejecutar la función mostrará un mensaje con el valor de ‘x’, este seguirá siendo 15 ya que a la subrutina sumamodif se le pasó una copia de ‘x’ e ‘y’. Pero si delante de la variable ‘a’ del procedimiento sumamodif escribimos la palabra reservada ByRef entonces significará que el valor se pasa por referencia y cualquier cambio que se haga sobre ‘a’ dentro del procedimiento afectará a la variable original, por lo tanto el mensaje de la ventana será 25.

2. Sumar sólo celdas en negrita

Como se indicó antes usaremos una función y una subrutina. La subrutina:

Sub SumIfBlack(rg As Range, ByRef sum As Double)
If rg.Font.Bold Then
sum = sum + rg.Value
End If
End Sub

Verifica que la propiedad negrita(rg.Font.Bold) este activada en el rango rg, se le pasa la variable sum por referencia que suma el valor del rango rg si es que rg.Font.Bold = TRUE. Esta subrutina se usará dentro de una función que recorrerá el rango donde se debe realizar la búsqueda con el bucle For Each.

Function SumaNegrita(rg As Range) As Double
Dim total As Double
Dim c As Range
total = 0
For Each c In rg.Cells
Call SumIfBlack(c, total)
Next c
SumaNegrita = total
End Function

El código es claro, si deseas que en ves de sumar celdas de negrita, sume aquellas celdas en cursiva u otra propiedad sólo hay que modificar la subrutina que verifica si se ha cumplido la condición. Puedes descargar el archivo de ejemplo aquí.

Suerte

Posted in excel, excel programming, excel vba, excel vba ejemplos

Facebook comments:

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Make a computation for validation *
Time limit is exhausted. Please reload CAPTCHA.

Traducir

Read previous post:
Convertir la primera letra de una cadena a mayusculas

En este post mostraré cómo convertir la primera letra de una cadena a mayúsculas, para ello veremos un poco de...

Close