Acumular (¿se puede?)

13/09/2004 - 16:56 por Omar | Informe spam
Hola espero alguien me pueda sacar de mi duda.
tengo dos hojas (hoja1 y hoja2)

En la hoja1 capturo algunos datos y en la hoja2 llevo un
acomulado de un total (extraido de la hoja 1) quisiera
saber si hay alguna forma de acomular por medio de un
boton (macro) por ejemplo.
Hoja1 Hoja2
A A B C
1 Total 1000 200 3000
2 1000
3 200
4 3000

Los valores de la hoja 1 a diario se borran es por eso que
necesito acomular esos valores habi intentado con un
simple (=) pero al borrar los valores de la hoja 1 pues
tambien se borran los de la hoja 2 y ese no el caso.
¿Alguna sugerencia?
Gracias
 

Leer las respuestas

#1 Héctor Miguel
13/09/2004 - 21:10 | Informe spam
hola, Omar !

tengo dos hojas (hoja1 y hoja2)
... hoja1 capturo algunos datos y en la hoja2 llevo un acomulado de un total (extraido de la hoja 1)
... forma de acomular ... por ejemplo.
Hoja1 Hoja2
A A B C
1 Total 1000 200 3000
2 1000
3 200
4 3000
... hoja 1 a diario se borran es por eso que necesito acumular esos valores
habia intentado con un simple (=) pero al borrar los valores de la hoja 1 [...]



suponiendo que necesitas 'acumular' de las celdas 'A2:A15' [de hoja1] a la fila 2 [de hoja2]...
en el modulo de codigo de la 'hoja1' ==Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 Or Target.Row > 15 Or Target.Column > 1 Then Exit Sub
With Worksheets("Hoja2").Cells(2, Target.Row - 1)
.Value = .Value + Target
End With
End Sub
´el siguiente 'manejo del evento' ->es opcional<- para 'evitar' cambios 'masivos' [varias celdas] '
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then Exit Sub
Application.EnableEvents = False
ActiveCell.Select
Application.EnableEvents = True
End Sub

=> una 'alternativa' para esta situacion, seria crear una funcion 'personalizada' =>NO en 'vba'<= ???
sino utilizando el lenguaje de macros de nuestro 'viejo' amigo 'excel 4'... las 'macrosheets' [hojas de macros]
para aquellos que -aun- lo recuerdan [o quizas... ¿añoran?] 'conserva' -algunas- 'cosillas' mas 'poderosas' que vba

expongo un ejemplo al final.
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 hoja2, y en [alg]una celda [p.e. en 'C1'] 'llama' a la funcion =AcumulaCambios(Hoja1!A2)
'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'] ;)

Preguntas similares