Sustituir el valor de una celda desde otra. EXCEL

Estimadas, @elsamatilde  un placer saluldarle, quisiera preguntarle si es posible que se cumpla esta lógica:

Si coloco una F en la celda H2, las celdas C10 Y B15 deben sustituir cualquier numero que tengan en ese momento por 0, ¿es esto posible?

De ser así me pueden informar la fórmula a usar con los datos dados.

2 respuestas

Respuesta
2

Esto no te será posible con fórmulas porque necesitas también ingresar valores en C10 y B15, por lo que tendrás que utilizar una macro que se ejecute cada vez que hagas un cambio en H2.

Entra al Editor de macros, selecciona con doble clic el objeto HOJA (desde el panel a tu izquierda) y allí copia esto:

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'solo se ejecuta al cambio de la celda H2
If Target.Address <> "$H$2" Then Exit Sub
If Target.Value = "F" Then
    [C10] = 0: [B15] = 0
End If
End Sub

Si esto resuelve tu consulta no olvides valorarla.

Elsa el macro funciono a la perfección, ahora validando el funcionamiento quería preguntarle si es posible que después que coloque la F y se ejecute,¿existirá una manera de que si coloco otra letra deshaga el cambio? ¿Es decir coloque los valores que antes tenían las celdas C10 y B15?

Es sabido que al ejecutar una macro se inhabilita la opción de Deshacer.

Por lo que se me ocurre que la macro previamente guarde los valores de las celdas en un rango auxiliar, en mi ejemplo: AA1:AB1

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'solo se ejecuta al cambio de la celda H2
If Target.Address <> "$H$2" Then Exit Sub
If Target.Value = "F" Then
    'guardo los valores en rango auxiliar AA1:AB1
    [AA1] = [C10]: [AA2] = [B15]
    'coloca 0 en las celdas
    [C10] = 0: [B15] = 0
Else
    'si no es F coloca los valores que están guardados  (*)
    If [AA1] <> "" Then [C10] = [AA1]
    If [AB1] <> "" Then [B15] = [AA2]
End If
End Sub

(*) Si las celdas auxiliares están vacías consideraré que aún no se dió un caso de F.

De todos modos te dejo un código que tomé y adapté para tu caso del genial John Walkenbach, que habilita justamente las opciones de Deshacer.

Pero debes tener presente que solo sirve para 'deshacer cambios' tal como lo hacemos con CTRL Z... si colocas hoy una F y mañana quieres cambiarla... ya no te sirve esta opción y tendrás que optar por mi macro anterior.

Este código va en el objeto HOJA donde estés trabajando.

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'solo se ejecuta al cambio de la celda H2
If Target.Address <> "$H$2" Then Exit Sub
    ReDim OldSelection(2)
    Set OldWorkbook = ActiveWorkbook
    Set OldSheet = ActiveSheet
        OldSelection(1).Addr = "$C$10"
        OldSelection(1).Val = [C10].Value
        OldSelection(2).Addr = "$B$15"
        OldSelection(2).Val = [B15].Value
If Target.Value = "F" Then
    [C10] = 0: [B15] = 0
    Application.OnUndo "eliminar cambios", "Deshacer"
End If
End Sub

Y estos otros en un módulo:

'Custom data type for undoing
    Type SaveRange
        Val As Variant
        Addr As String
    End Type
    Public OldSelection() As SaveRange
Sub Deshacer()
'habilita la opción de Deshacer (Ctrl Z)
    On Error GoTo Problem
    Application.ScreenUpdating = False
'   Restaura la información guardada en la matriz
    For i = 1 To UBound(OldSelection)
        Range(OldSelection(i).Addr).Formula = OldSelection(i).Val
    Next i
    Exit Sub
Problem:
    MsgBox "No se puede deshacer"
End Sub

Sdos y no olvides valorar las 2 respuestas que te envié.

Muchísimas gracias elsa sus aportes han sido claves y precisos no puedo pedir más, trabajare después con el tema de deshacer lo cambio del macro a la posición anterior.

Muchas gracias!

Respuesta
1

Las celdas C10 y B15 son resultado de un cálculo? si es así prueba a poner en estas celdas algo como: =SI(F5="F";0;A1+A2), suponiendo que el valor de esta celda sea el resultado de la suma de A1 y A2

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas