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:

[code language=”vb”]
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
[/code]

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:

[code language=”vb”]
Sub SumIfBlack(rg As Range, ByRef sum As Double)
If rg.Font.Bold Then
sum = sum + rg.Value
End If
End Sub
[/code]

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.

[code language=”vb”]
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
[/code]

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

Sumar unicamente celdas en negrita

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *