Celda para Acumular Valor

29/09/2006 - 00:31 por Bart | Informe spam
Hola a todos,

Cómo puedo hacer para que una celda tome el valor acumulado de ella misma
MÁS el valor de otra celda, ejemplo:

Inicialmente:
A1= 100
A2= 0

Luego:
A1= 10
A2= 110

En realidad lo que se quiere es que al introducir un valor en la celda A1,
éste se acumule en otra celda con la sumatoria anterior.

Agradezco su ayuda,
B.S.

Preguntas similare

Leer las respuestas

#1 David
29/09/2006 - 01:20 | Informe spam
Hola, Bart.

Esto no lo puedes hacer desde la hoja, pues crearías una referencia
circular. Así que te recomiendo que ataques tu problema desde VBA, en el
evento Change de la hoja en la que necesitas acumular los valores.

Voy a suponer que el valor lo ingresas en A1, y que necesitas acumularlo en
B1. Con esta idea en mente, prueba con lo siguiente:

1. Haz clic en Herramientas - Macro - Editor de Visual Basic.

2. Haz clic en Ver - Explorador de proyectos.

3. Si fuera necesario, en el explorador de proyectos haz clic en los signos
de esquema (los signos más o menos a la izquierda de los objetos o carpetas),
hasta que localices la hoja en la cual necesitas implementar el cálculo.

4. Cuando localices la hoja, haces doble clic en ella.

5. Pegas el siguiente código:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Range("B1").Value = Range("B1").Value + Range("A1").Value
End If
End Sub

6. Cierras el editor de Visual Basic, y prueba escribir varios valores en la
celda A1.

Comentas si encuentras problemas.

Saludos cordiales.



"Bart" escribió:

Hola a todos,

Cómo puedo hacer para que una celda tome el valor acumulado de ella misma
MÁS el valor de otra celda, ejemplo:

Inicialmente:
A1= 100
A2= 0

Luego:
A1= 10
A2= 110

En realidad lo que se quiere es que al introducir un valor en la celda A1,
éste se acumule en otra celda con la sumatoria anterior.

Agradezco su ayuda,
B.S.
Respuesta Responder a este mensaje
#2 Héctor Miguel
29/09/2006 - 01:53 | Informe spam
hola, Bart !

Como puedo hacer para que una celda tome el valor acumulado de ella misma MAS el valor de otra celda, ejemplo:
Inicialmente:
A1= 100
A2= 0
Luego:
A1= 10
A2= 110
En realidad lo que se quiere es que al introducir un valor en la celda A1, este se acumule en otra celda con la sumatoria anterior.



para una probable 'alternativa diferente'... sigue los pasos al final del presente :D

si cualquier duda... comentas ?
saludos,
hector.
:
1.- 'click-derecho' en la pestaña de [alg]una hoja en el libro y selecciona -> 'insertar...'
2.- de la pesta#a general [en el dialogo siguiente]... elegir...
o... 'macro de microsoft excel 4' [EN TU IDIOMA]
u... 'hoja internacional de macros' ['igual'... pero... 'diferente'... es decir... =>en ingles<=] :))
3.- [en la recien-creada hoja de macros] escribe las siguientes instrucciones para =>cada celda<=...
[A1] AcumulaCambios
[B1] =Argumento("Rango",8)
[B2] =Volatil(Falso)
[B3] =Volver(Llamador()+Rango)
=> o... si 'piensas' en acumular la suma de varias celdas... [B3] =Volver(Llamador()+Suma(Rango))
escribelas 'tal-como-puse', si son 'reconocidas' por la aplicacion, seran 'convertidas' a mayusculas
[solo las instrucciones, que 'inician' con el signo '=' y exceptuando los argumentos 'definidos', p.e "Rango"]
3a- si tu idioma es ingles [o la hoja de macros 'fue' del tipo 'internacional']... las instrucciones en ingles...
[B1] =Argument("Rango",8)
[B2] =Volatile(False)
[B3] =Return(Caller()+Rango)
=> o... si 'piensas' en acumular la suma de varias celdas... [B3] =Return(Caller()+Sum(Rango))
4.- selecciona [en la hoja de macros] la celda 'B1' y...
[menu] insertar / nombre / definir... [en este paso, 'tomara' el nombre que 'pusiste' en 'A1', o el que 'le digas']
[en la seccion 'macro] selecciona el 'tipo' de macro... =>funcion< [opcionalmente]... puedes 'decidir' en cual 'categoria' de funciones sera 'agregada' [por omision... def. por el usuario]
=>ACEPTAR<5.- 'regresa' a la hoja, y en [alg]una celda [p.e. en 'B1'] 'llama' a la funcion [p.e.]
=AcumulaCambios(A1)
=AcumulaCambios(A1:A10)
=AcumulaCambios(Hoja5!A1)
'repite' la llamada a la funcion en tantas celdas como sea necesario ;)

notas:
- en ambas 'formas' puedes hacer uso del 'des-hacer' [undo... ctrl+z] 'pero'...
'el regreso' [que ES UN CAMBIO] ->tambien 'se acumula'<- [en el resultado del procedimiento/funcion] <= OJO
- la instruccion 'Volatil(Falso)' =>evita<= que la funcion se 'auto-actualice' en cada 're-calculo' del modelo
solo se 'actualiza' =>SI CAMBIAN<= [o se modifican] los valores del 'Rango' en el argumento de la funcion.
- por lo anterior... si el cambio 'deja' =>el mismo<= valor que 'antes'... NO se 'actualiza' [NO 'hubo cambios']
'a menos que'... 'el cambio' ocurra =>por codigo<= [no importa que 'quede el mismo'] ;)
Respuesta Responder a este mensaje
#3 JR
29/09/2006 - 03:44 | Informe spam
Hace algunos meses me enviaron por este medio un ejemplo que necesitaba y me
funciono bien

copia y pega este codigo en la hoja donde lo quieres implementar en VB

Private Sub Worksheet_Change(ByVal Target As Range)
Static Anterior As Double
If Not Target = Range("A1") Then Exit Sub
Application.EnableEvents = False
Target = Target + Anterior
Anterior = Target
Application.EnableEvents = True
End Sub

donde A1 es la Celda a incrementar con el dato anterior.


"David" escribió en el mensaje
news:
Hola, Bart.

Esto no lo puedes hacer desde la hoja, pues crearías una referencia
circular. Así que te recomiendo que ataques tu problema desde VBA, en el
evento Change de la hoja en la que necesitas acumular los valores.

Voy a suponer que el valor lo ingresas en A1, y que necesitas acumularlo


en
B1. Con esta idea en mente, prueba con lo siguiente:

1. Haz clic en Herramientas - Macro - Editor de Visual Basic.

2. Haz clic en Ver - Explorador de proyectos.

3. Si fuera necesario, en el explorador de proyectos haz clic en los


signos
de esquema (los signos más o menos a la izquierda de los objetos o


carpetas),
hasta que localices la hoja en la cual necesitas implementar el cálculo.

4. Cuando localices la hoja, haces doble clic en ella.

5. Pegas el siguiente código:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Range("B1").Value = Range("B1").Value + Range("A1").Value
End If
End Sub

6. Cierras el editor de Visual Basic, y prueba escribir varios valores en


la
celda A1.

Comentas si encuentras problemas.

Saludos cordiales.



"Bart" escribió:

> Hola a todos,
>
> Cómo puedo hacer para que una celda tome el valor acumulado de ella


misma
> MÁS el valor de otra celda, ejemplo:
>
> Inicialmente:
> A1= 100
> A2= 0
>
> Luego:
> A1= 10
> A2= 110
>
> En realidad lo que se quiere es que al introducir un valor en la celda


A1,
> éste se acumule en otra celda con la sumatoria anterior.
>
> Agradezco su ayuda,
> B.S.
Respuesta Responder a este mensaje
#4 Bart
29/09/2006 - 05:10 | Informe spam
Hola de nuevo, A TODOS GRACIAS POR SU VALIOSA AYUDA, vean esta complicación:

Y entonces cómo sería, si deseo que el valor antes de ACUMULARSE en una
celda determinada, verifique primero en cual se debe acumular.

Es decir, introduzco un valor en la celda A1, y dependiendo de la fecha, se
deberá acumular en la celda de ACUMULACIÓN del mes correspondiente a la fecha
de hoy.

Ej.:
En A1 se introduce el valor.
B1 acumula los valores mientras que la fecha del día corresponden al mes de
ENERO.
B2 acumula los valores mientras que la fecha del día corresponden al mes de
FEBRERO.
B3 acumula los valores mientras que la fecha del día corresponden al mes de
MARZO.
etc...

Es decir, vean que en este caso no existe una única celda de ACUMULACIÓN,
sino que el valor se acumulará dependiendo de la fecha del día en la celda
correspondiente. PERO SIEMPRE la celda de entrada de data es A1.

Traté de hacerlo con auxilio de otras celdas, y comparación del mes actual
con el mes que se genera a partir de HOY(), de hecho logro asignar el valor
a una celda de transición con el valor recien introducido del mes
correspondiente, pero como esta asignación la realiza el programa y no
directamente el usuario, entonces la instrucción Change(ByVal Target As
Range) no trabaja y no se acumula el valor, debido a que no detecta el cambio
del valor introduciéndose por el teclado, ya que lo realiza automaticamente
el programa.

"David" wrote:

Hola, Bart.

Esto no lo puedes hacer desde la hoja, pues crearías una referencia
circular. Así que te recomiendo que ataques tu problema desde VBA, en el
evento Change de la hoja en la que necesitas acumular los valores.

Voy a suponer que el valor lo ingresas en A1, y que necesitas acumularlo en
B1. Con esta idea en mente, prueba con lo siguiente:

1. Haz clic en Herramientas - Macro - Editor de Visual Basic.

2. Haz clic en Ver - Explorador de proyectos.

3. Si fuera necesario, en el explorador de proyectos haz clic en los signos
de esquema (los signos más o menos a la izquierda de los objetos o carpetas),
hasta que localices la hoja en la cual necesitas implementar el cálculo.

4. Cuando localices la hoja, haces doble clic en ella.

5. Pegas el siguiente código:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Range("B1").Value = Range("B1").Value + Range("A1").Value
End If
End Sub

6. Cierras el editor de Visual Basic, y prueba escribir varios valores en la
celda A1.

Comentas si encuentras problemas.

Saludos cordiales.



"Bart" escribió:

> Hola a todos,
>
> Cómo puedo hacer para que una celda tome el valor acumulado de ella misma
> MÁS el valor de otra celda, ejemplo:
>
> Inicialmente:
> A1= 100
> A2= 0
>
> Luego:
> A1= 10
> A2= 110
>
> En realidad lo que se quiere es que al introducir un valor en la celda A1,
> éste se acumule en otra celda con la sumatoria anterior.
>
> Agradezco su ayuda,
> B.S.
Respuesta Responder a este mensaje
#5 David
29/09/2006 - 20:30 | Informe spam
Podrías modificar el código anterior en forma parecida al siguiente ejemplo
(lo he recortado en el mes de abril para ahorrar espacio, pero ya lo he
probado y funciona):

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Select Case Month(Date)
Case 1
Range("B1").Value = Range("B1").Value + Range("A1").Value
Case 2
Range("B2").Value = Range("B2").Value + Range("A1").Value
Case 3
Range("B3").Value = Range("B3").Value + Range("A1").Value
Case 4
Range("B4").Value = Range("B4").Value + Range("A1").Value

'y así continúas hasta llegar a 12

Case 12
Range("B12").Value = Range("B12").Value + Range("A1").Value
End Select
End If
End Sub

Observa en la instrucción

Select Case Month(Date)

que se utiliza la constante Date, la cual se obtiene del reloj de tu equipo.
si quieres probar para diferentes meses, deberías cambiar la configuración
del calendario de Windows, y luego ingresar datos en A1 para verificar si los
asigna a la celda correcta.

Siempre comentas, para saber cómo te fue.



"Bart" escribió:

Hola de nuevo, A TODOS GRACIAS POR SU VALIOSA AYUDA, vean esta complicación:

Y entonces cómo sería, si deseo que el valor antes de ACUMULARSE en una
celda determinada, verifique primero en cual se debe acumular.

Es decir, introduzco un valor en la celda A1, y dependiendo de la fecha, se
deberá acumular en la celda de ACUMULACIÓN del mes correspondiente a la fecha
de hoy.

Ej.:
En A1 se introduce el valor.
B1 acumula los valores mientras que la fecha del día corresponden al mes de
ENERO.
B2 acumula los valores mientras que la fecha del día corresponden al mes de
FEBRERO.
B3 acumula los valores mientras que la fecha del día corresponden al mes de
MARZO.
etc...

Es decir, vean que en este caso no existe una única celda de ACUMULACIÓN,
sino que el valor se acumulará dependiendo de la fecha del día en la celda
correspondiente. PERO SIEMPRE la celda de entrada de data es A1.

Traté de hacerlo con auxilio de otras celdas, y comparación del mes actual
con el mes que se genera a partir de HOY(), de hecho logro asignar el valor
a una celda de transición con el valor recien introducido del mes
correspondiente, pero como esta asignación la realiza el programa y no
directamente el usuario, entonces la instrucción Change(ByVal Target As
Range) no trabaja y no se acumula el valor, debido a que no detecta el cambio
del valor introduciéndose por el teclado, ya que lo realiza automaticamente
el programa.

"David" wrote:

> Hola, Bart.
>
> Esto no lo puedes hacer desde la hoja, pues crearías una referencia
> circular. Así que te recomiendo que ataques tu problema desde VBA, en el
> evento Change de la hoja en la que necesitas acumular los valores.
>
> Voy a suponer que el valor lo ingresas en A1, y que necesitas acumularlo en
> B1. Con esta idea en mente, prueba con lo siguiente:
>
> 1. Haz clic en Herramientas - Macro - Editor de Visual Basic.
>
> 2. Haz clic en Ver - Explorador de proyectos.
>
> 3. Si fuera necesario, en el explorador de proyectos haz clic en los signos
> de esquema (los signos más o menos a la izquierda de los objetos o carpetas),
> hasta que localices la hoja en la cual necesitas implementar el cálculo.
>
> 4. Cuando localices la hoja, haces doble clic en ella.
>
> 5. Pegas el siguiente código:
>
> Private Sub Worksheet_Change(ByVal Target As Range)
> If Target.Address = "$A$1" Then
> Range("B1").Value = Range("B1").Value + Range("A1").Value
> End If
> End Sub
>
> 6. Cierras el editor de Visual Basic, y prueba escribir varios valores en la
> celda A1.
>
> Comentas si encuentras problemas.
>
> Saludos cordiales.
>
>
>
> "Bart" escribió:
>
> > Hola a todos,
> >
> > Cómo puedo hacer para que una celda tome el valor acumulado de ella misma
> > MÁS el valor de otra celda, ejemplo:
> >
> > Inicialmente:
> > A1= 100
> > A2= 0
> >
> > Luego:
> > A1= 10
> > A2= 110
> >
> > En realidad lo que se quiere es que al introducir un valor en la celda A1,
> > éste se acumule en otra celda con la sumatoria anterior.
> >
> > Agradezco su ayuda,
> > B.S.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida