Celda que suma.

Me gustaría saber si es posible conseguir en excel lo siguiente:
Tengo una celda que acumula totales, pero estos totales los calculo yo directamente. Me gustaría habilitar una celda para que le ponga un número, pulse intro, lo sume a la columna del total, y luego se quede en blanco para poder seguir introduciéndole números sucesivamente y que los vaya sumando. ¿Es eso posible?
Esos números que introduzco no los quiero guardar, solo me interesa el total (y tener que calcular los totales diariamente a mano es bastante engorroso). Bueno.

1 Respuesta

Respuesta
2
Si es fácil, debes hacer esto: te sitúas en tu hoja tomas nota de la celda donde aparece la suma y elige una celda para poner tu cantidad a sumar, ahora pulsas Alt+F11 te aparecerá el editor de VBA te fijas en la columna de la izquierda y haces doble click encima del texto de tu hoja ( si estas en Hoja1 pues en esa) en la ventana en blanco que te aparece pegas este código:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim valor As Integer
valor = Range("B8").Value
If Target.Address = "$D$5" Then
Application.EnableEvents = False
If Target.Value <> "" Then
valor = valor + Target.Value
Range("B8").Value = valor
End If
End If
End Sub
Te explico "B8" es la celda que yo he puesto donde aparece la suma, tu la cambias por la tuya, "D5" es la celda que yo he elegido para ir poniendo los datos, la cambias por la tuya, y vuelve a cambiar "B8" por la tuya.
Ahora puedes guardar y cerrar el editor de VBA, cada vez que cambies el valor de tu celda Y CAMBIES DE CELDA PULSANDO ENTER pues la cantidad que has puesto se sumará a la que excita en tu celda de suma. Si el valor de la celda es "0" o vacío no te cambiará el valor de la suma.
>Un saludo
>Julio
PD* Puntúa y finaliza la consulta.
Cometí algún error la he modificado la macro es esta, sin variables y más sencillita, sigues tiendo que poner en la macro tus celdas:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$D$5" Then
Range("B8").Value = Range("B8").Value + Target.Value
Application.EnableEvents = True
End If
End Sub
Lo siento.
>Un saludo
>Julio
Primero, muchas gracias ante todo.
Me gustaría 2 cosillas más:
1. ¿Se podría hacer que cada vez que le doy al intro, a la vez de sumar como ahora, la celda vacíe su contenido y que además no pierda el foco?
2. Esta macro me gustaría aplicarla a más celdas que tienen también sus respectivos totales, ¿tendría qué hacer una macro para cada una?
Espero que puedas ayudarme (de todos modos ya te has ganado la máxima puntuación).
1 saludo experto.
Hola de nuevo:
Algo que acabo de fijarme... :P
Si se escribe en esa celda una letra por equivocación y se pulsa intro da el error nº13, además de desactivar la macro. ¿Cómo podría evitarse esto? ¿Cómo activo de nuevo la macro sin tener que cerrar el programa y volver a abrirlo?
En Access sé hacerlo pero en Excel todavía no tengo mucha idea de VBA.
Bueno, espero tus consejos y siento ser tan pesado. 1 saludo.
Vamos a ver para solucionar el problema de los errores intercalamos entre la segunda y tercera linea de código esta linea:
On Error Resume Next
Si la macro detecta un error seguirá leyendo código pero como es imposible sumar una letra con un numero terminará la macro, pero se quedará activa para seguir sumando.(Si el valor es negativo te Resta que no te lo había dicho)
Respecto a mantener el foco en la celda, las celdas no funcionan como los texbox que puedes enviar el foco a la celda (bueno sí se puede, pero el código necesario te inutilizaría la celda de debajo) te explico:
Cuando ponemos un valor en la celda y pulsamos Enter( ejecutar) la celda activa pasa a ser la de debajo. Tan solo con pulsar la tecla de dirección hacia arriba vuelves a estar en la celda para poner nuevo valor. Podemos poner una condición como esta:
If ActiveCell.Select=Range("D6").Select Then
ActiveCell.Offset(-1, 0).Select
End If
Te explico la macro tiene esta condición:
Si la celda activa es D6 subeté 1 fila hacia arriba en la misma columna. Que ocurriría que en esa celda sería imposible escribir porque siempre te mandaría a la inmediata superior, yo pienso que tampoco es tanto trabajo cambiar de celda con la flecha de dirección, pero está en tu gusto. La macro entera quedaría así:
Application.EnableEvents = False
On Error Resume Next
If Target.Address = "$D$5" Then
Range("B8").Value = Range("B8").Value + Target.Value
Application.EnableEvents = True
End If
If ActiveCell.Select = Range("D6").Select Then
ActiveCell.Offset(-1, 0).Select
End If
End Sub
>Un saludo
>Julio
Por último, me gustaría preguntarte: (Prometo que son mis últimas preguntas)
1. ¿Se podría hacer que cada vez que le doy al intro, a la vez de sumar como ahora, la celda vacíe su contenido?
2. Esta macro me gustaría aplicarla a más celdas que tienen también sus respectivos totales, ¿tendría qué escribir todo eso para cada celda?
Espero que puedas ayudarme (de todos modos ya te has ganado la máxima puntuación).
La estructura que utilizo es celda que acumula y, al lado, celda que suma ( y son unas 30 celdas seguidas que deberían hacer eso, je je).
Gracias por tu infinita paciencia (o por lo menos espero que se acerque al infinito).
Efectivamente si te fijas este es el código para cuando se actúa sobre la celda D5 si quieres utilizar más celdas tendrás que volver a crear el código para cada una, (Sin la primera linea Pirvate Sub... y sin la última End Sub estas deben de quedar, debajo de la penúltima linea End If sigues esciribiendo código que podrías copiar todo el existente y pegarlo debajo pero cambiando las celdas sobre las que actuar.
Para que una celda te la limpie al salir de otra sería:
If Target.Address="$B$8" Then
If Range("C4").Value<>"" Then
Range("C4").Value=""
End If
End If
>Un saludo
>Julio

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas