Restar, pero no sumar

18/01/2004 - 03:40 por Jesus | Informe spam
Hola a todos

Desearía saber si hay una formula para hacer lo siguiente:
Tengo en las columnas B, C, D, E y F una serie de números ( aunque algunas
pueden estar vacías), y en la columna G la suma. En la siguiente columna (
H ) tengo que poder introducir un número, pero que si cualquier valor de las
5 columnas disminuye, también lo haga este número (solo hasta cero, no
negativo) pero que si aumenta cualquiera de estas 5 columnas, no lo haga el
de la H.
Si no existe fórmula, no importa que sea en VBA.

Mis agradecimientos de antemano, un saludo
Jesús
 

Leer las respuestas

#1 Héctor Miguel
18/01/2004 - 07:55 | Informe spam
hola, Jesus !

... si hay una formula para hacer lo siguiente:
... en las columnas B, C, D, E y F ... numeros ... en la columna G la suma.
... siguiente columna (H) ... introducir un numero
... si cualquier valor de las 5 columnas disminuye, tambien lo haga este numero (solo hasta cero, no negativo)
... si aumenta cualquiera de estas 5 columnas, no lo haga el de la H. Si no existe formula, no importa que sea en VBA.



no creo que pueda 'monitorearse' una celda 'sobre si-misma' sin apoyo de macros ['concretamente', eventos] :)
[segun como lo veo] es necesario llevar un 'registro' de valores [antes, despues y 'diferencia'] para:
- la celda que se modifique [dentro de las 5 columnas]
=>se puede capturar el 'antes' con un '_SelectionChange' y el 'despues' con un '_Change'<- la diferencia [entre lo que 'habia' y lo que 'quedo']
- el valor de la columna 'h' [para 'evitar' que 'baje' a menos cero o que 'trate' de aumentarse]
- ['adicionalmente'] EVITAR selecciones 'multiples' [dentro del rango de las 5 columnas]
=>el evento '_SelectionChange' NO se 're-dispara' y no se podria 'registrar' el valor 'anterior' de la/s celda/s<= :((

para evitar el uso de variables 'estaticas', sugiero usar variables 'publicas' para:
- registrar el valor 'anterior' [de la celda dentro de las 5 columnas] =>en el evento '_SelectionChange'<- 'calcular' el cambio [despues de modificar su valor] =>por medio del evento '_Change'<y algunas 'constantes' para:
- el rango [dentro de las 5 columnas] de celdas que podrian 'afectar' el valor de la columna 'h'
[en el ejemplo estoy 'suponiendo' que fuera 'B2:F24' =>cambialo por el 'real'<=] ;)
- la/s letra/s de la columna 'afectable' ['h' o la que necesites despues]
[+] algunos 'trucos' para evitar las selecciones 'multiples'

espero que te sean de utilidad :)
saludos,
hector.
_____ en un modulo de codigo 'normal' _____
Public DatoAnterior As Double, Cambio As Double
Public Const Entradas As String = "b2:f24"
Public Const ColTrack As String = "h"
_____ en el modulo de codigo de 'la hoja' _____
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range(Entradas)) Is Nothing Then Exit Sub
If Selection.Cells.Count > 1 Then
Application.EnableEvents = False
ActiveCell.Select
Application.EnableEvents = True
End If
If Intersect(ActiveCell, Range(Entradas)) Is Nothing Then Exit Sub
DatoAnterior = ActiveCell
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(Entradas)) Is Nothing Then Exit Sub
Cambio = Target - DatoAnterior
If Cambio >= 0 Then Exit Sub
With Range(ColTrack & Target.Row)
If .Value + Cambio <= 0 Then .Clear Else .Value = .Value + Cambio
End With
End Sub

Preguntas similares