¿Como incremento datos en una celda a partir del numero anterior ?

12/07/2006 - 20:03 por Oswaldo Vargas | Informe spam
Deseo que en una misma celda se incremente el valor a partir de la cantidad
anterior por ej: si en la celda tengo 5 e ingreso 3 enla misma celda que se
incremente a 8

Preguntas similare

Leer las respuestas

#1 Gabriel Raigosa
12/07/2006 - 20:30 | Informe spam
' Esbribir solo numeros en la celda B1
' bloque como evento '_Change' de la hoja de trabajo en la que quieras
aplicarlo
' evento 'WorkBook_SheetChange' del objeto "ThisWorkbook"
'copiar en cada hoja si deseas aplicarlo a todas las hojas del libro

Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Address = "$B$1" And .Value <> "" Then
If IsEmpty(.Value) = False And IsNumeric(.Value) Then Cells(1,
1) = Cells(1, 1) + .Value
.Select: .Value = ""
End If
End With
End Sub

Gabriel Raigosa
Medellín - Colombia

news://msnews.microsoft.com/
news://msnews.microsoft.com/microso...c.es.excel

"Oswaldo Vargas" <Oswaldo escribió en el
mensaje news:
Deseo que en una misma celda se incremente el valor a partir de la
cantidad
anterior por ej: si en la celda tengo 5 e ingreso 3 enla misma celda que
se
incremente a 8

Respuesta Responder a este mensaje
#2 Henry Sanchez
13/07/2006 - 03:21 | Informe spam
Hola Gabriel,

No creo que tu codigo funcione, pues al presentarse el evento change de la
hoja de trabajo, ya la celda B1 contiene el nuevo valor digitado por el
usuario, con lo cual solo se lograria duplicar la nueva entrada:
Ejemplo, si la celda contiene el valor de 3 y se digita un 5, la macro
guardaria un 10 en la celda y no un 8 que es lo que se quiere.

Todo esto siempre y cuando utilices la instruccion
Application.EnableEvents=False antes de realizar la asignacion y pongas
nuevamente Application.EnableEvents=True antes de terminar la macro o
inmediatamente despues de la asignacion. Si no haces esto, estarias creando
una macro que se llamaria a si misma con resultados imprevisibles o un
posible volcado de pila.

Saludos,

Henry

"Gabriel Raigosa" escribió:

' Esbribir solo numeros en la celda B1
' bloque como evento '_Change' de la hoja de trabajo en la que quieras
aplicarlo
' evento 'WorkBook_SheetChange' del objeto "ThisWorkbook"
'copiar en cada hoja si deseas aplicarlo a todas las hojas del libro

Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Address = "$B$1" And .Value <> "" Then
If IsEmpty(.Value) = False And IsNumeric(.Value) Then Cells(1,
1) = Cells(1, 1) + .Value
.Select: .Value = ""
End If
End With
End Sub

Gabriel Raigosa
Medellín - Colombia

news://msnews.microsoft.com/
news://msnews.microsoft.com/microso...c.es.excel

"Oswaldo Vargas" <Oswaldo escribió en el
mensaje news:
> Deseo que en una misma celda se incremente el valor a partir de la
> cantidad
> anterior por ej: si en la celda tengo 5 e ingreso 3 enla misma celda que
> se
> incremente a 8
>



Respuesta Responder a este mensaje
#3 Héctor Miguel
13/07/2006 - 09:22 | Informe spam
hola, Oswaldo !

Deseo que en una misma celda se incremente el valor a partir de la cantidad anterior
por ej: si en la celda tengo 5 e ingreso 3 enla misma celda que se incremente a 8



1) te paso dos -posibles- alternativas al final del presente [usando codigo] ;)

2) toma en cuenta que la primera va a dejarte 'imposibilitado' para hacer uso del deshacer, undo, ctrl+Z :-((
ademas de que 'controlar' varias celdas 'auto-acumuladoras' resultaria en codigos 'menos' ligeros :)

-> a menos que te fuera de utilidad que la celda 'acumuladora' fuera distinta de la que 'recibe' los valores
[p.e.] acumular en 'B1' las entradas que hagas en 'A1' [incluso a y de hojas diferentes] ;)
definiendo una funcion personalizada NO por vba ??? [sino usando las macrofunciones del 'viejo' excel4] ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

1) para la primera alternativa, copia las siguientes lineas en el modulo de codigo de 'esa' hoja...
Dim Anterior As Double
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then Anterior = Val([a1])
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
If Val([a1]) = 0 Then Exit Sub
Application.EnableEvents = False
[a1] = Val([a1]) + Anterior
Application.EnableEvents = True
End Sub

2) para la 'alternativa diferente'... sigue los pasos siguientes:
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'] ;)
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida