¿Podemos cargar valores sucesivos en una misma celda y que ésta vaya acumulando los valores?
Tarde o temprano, las referencias circulares causan problemas.
En cambio, proponemos hacer la acumulación mediante una macro automática:
El problema de acumular valores en una celda suele
resolverse con “referencias circulares”. Son fórmulas que incluyen en su expresión
la propia celda en la que están escritas.
Por ejemplo, cuando escribimos =A1+A2 en la celda[A1].
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = (“$A$1”) Then
Range(“B1”) = Range(“B1”) + Range(“A1”)
End If
End Sub
Esta macro se escribe en la ventana de código de la hoja
donde vamos a hacer la acumulación y, por tener el nombre
especial Worksheet_Change, se ejecuta automáticamente
cada vez que cambia algún dato en la hoja. La macro verifica que
la celda modificada sea [A1]. En ese caso, suma el nuevo valor
en la celda [B1]. Tras cada modificación, la celda [B1]
va acumulando el valor escrito en [A1].
Sin embargo, esto no resuelve el problema planteado,
porque la acumulación no se hace en la misma celda donde
se escriben los datos. Para satisfacer esta condición
podríamos transferir el valor de [B1]a [A1].
Pero, como esto modifica la celda [A1], se dispara nuevamente
la macro y se entra en un ciclo infinito.
La solución es usar una segunda celda auxiliar (por ejemplo, [C1])
para diferenciar la modificación de la celda por
carga de un dato de la modificación por la propia macro. Algo así:
Private Sub Worksheet_Change(ByVal Target As Range)
If [C1] = 0 Then
If Target.Address = (“$A$1”) Then
Range(“B1”) = Range(“B1”) + Range(“A1”)
[C1] = 1
[A1] = [B1]
[C1] = 0
End If
End If
End Sub
Antes de proceder a la acumulación, esta macro comprueba
el estado de la celda [C1]. Si su valor es cero, procede con la
acumulación en [B1]. Pero antes de transferir el acumulado a [A1],
cambia el estado de [C1]. De esta manera, este segundo cambio en el valor
de [A1] no dispara la ejecución de la macro
(es decir, sí la dispara, pero la macro no hace nada).
Antes de terminar, la macro vuelve a poner en cero la celda [C1].
Para abrir la ventana de código de la hoja, seleccionamos
la hoja en el explorador de proyectos del editor de Visual Basic
y luego tomamos las opciones [Ver/Código].
No hay comentarios:
Publicar un comentario
Deja todo lo que quieras decirnos, somos mentes abiertas y leemos de todo y para todos, pero por favor no insultes, no agredas, no seas pornografico, eso no nos gusta y te vamos a mandar bien lejos.